- 嵌入式
- 固件
- 驱动开发
- 硬件开发
【免费下载链接】qmk_firmware
Open-source keyboard firmware for Atmel AVR and Arm USB families
导读
本文围绕 QMK 固件仓库中 keyboards/converter/a1200 的转换器项目展开,讲解如何将经典 Amiga 1200 原装薄膜键盘(并兼容 Amiga 500/600)改装为 USB 输入设备,可同时用于台式 PC 与装入 Amiga 机箱内的 R-Pi/FPGA 主控方案。读完本文,你将掌握:三种目标单片机(Teensy 2.0++、MiSS-1200、MiSTress-1200)的引脚接线、矩阵方向与指示灯配置、默认键位与 Help 键临时层的设计、编译与刷写(含 HELP+R 快捷键重刷)的完整操作,以及 键盘布局定义 与 默认键位 的源码级对应关系。
项目背景与工作原理
A1200 Converter 是 QMK 键盘转换器(converter)家族的一员,其技术血缘来自 Model-M 101 薄膜适配器(文档中记为 converter/modelm101):该项目将其适配逻辑整体移植到 Amiga 1200 键盘矩阵上。转换器的核心价值在于把旧键盘的矩阵扫描转换为标准 USB HID 键盘协议,从而让 30 年前的键盘在现代操作系统上即插即用。
从 QMK 的 docs/feature_converters.md 可以看到,converter 目录下汇集了 adb_usb、sun_usb、xt_usb、ibm_terminal、usb_usb 等大量历史键盘转接方案,A1200 是其中面向 Amiga 平台的一员。其基本工作方式是:固件按行列扫描薄膜键盘的按键矩阵,将行/列坐标映射为键码,再经 USB 上报给主机。
支持的三款硬件方案
原文档明确列出 A1200 Converter 适配三种微控制器,仓库中对应三个独立的目标目录,每个目录以 keyboard.json 声明各自的处理器、引脚与启动方式:
| 目标 | 单片机 | 硬件载体 | 仓库目录 |
|---|---|---|---|
teensy2pp | AT90USB1286 | PJRC Teensy 2.0++ 板 | teensy2pp/keyboard.json |
miss1200 | ATmega32u4 | 8bits4ever MiSS-1200 FPGA 板 | miss1200/keyboard.json |
mistress1200 | ATmega16u4 | MiSTress-1200 改装套件 | mistress1200/keyboard.json |
硬件连接方式因载体而异:
- Teensy 2.0++需要一块小型 PCB 适配板将键盘薄膜排线转接到 Teensy 引脚(作者提供了简单的示例适配板设计,见文档所述 A1200-Keyboard-Adapter 项目)。
- MiSS-1200 与 MiSTress-1200板卡上直接集成了 Amiga 1200 薄膜键盘专用连接器,无需额外转接板。
三者的 USB 描述符均为0xFEED:0x0000(teensy2pp)或0xFFFF:0x0000(两款 FPGA 板),设备名分别为 "Amiga-1200"、"MiSS-1200"、"MiSTress1200"。
矩阵引脚分配:两套接线方案
薄膜键盘的矩阵固定为16 列 × 8 行,但两套板卡的 MCU 引脚资源不同,接线因此分为两套方案。原文档给出的默认接线如下。
Teensy 2.0++(AT90USB1286)
Columns: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Pins: D2 D3 D4 D5 D6 D7 E0 E1 C0 C1 C2 C3 C4 C5 C6 C7 -------------------------------------------------------- Rows: 1 2 3 4 5 6 7 8 Pins: F0 F1 F2 F3 F4 F5 F6 F7 -------------------------------------------------------- Status LEDs: CapsLock +5V Pins: B6 5V与 teensy2pp/keyboard.json 中matrix_pins声明完全一致:列引脚依次为D2 D3 D4 D5 D6 D7 E0 E1 C0 C1 C2 C3 C4 C5 C6 C7,行引脚为F0~F7。
MiSS-1200(ATmega32u4)与 MiSTress-1200(ATmega16u4)
Columns: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Pins: D0 D1 C7 D6 B7 B6 B5 B4 E6 D7 C6 D4 B2 D5 D3 D2 -------------------------------------------------------- Rows: 1 2 3 4 5 6 7 8 Pins: F7 F6 F5 F4 F1 F0 B1 B3 -------------------------------------------------------- Status LEDs: CapsLock +5V Pins: B0 5V该方案对应 miss1200/keyboard.json 与 mistress1200/keyboard.json 中相同的matrix_pins配置。注意两款板虽然 MCU 型号不同(32u4 与 16u4),但矩阵与 LED 引脚布局完全一致,便于共用 PCB 设计。
二极管方向与指示灯极性
三个目标的keyboard.json均声明diode_direction: "ROW2COL",即二极管由行指向列,这与键盘薄膜走线方向相关,接线时必须严格遵循,否则矩阵扫描会失效。
指示灯差异值得留意:
- teensy2pp:
caps_lock: "B6",未声明on_state,采用默认的高电平点亮逻辑; - miss1200 / mistress1200:
caps_lock: "B0",且显式声明on_state: 0,即B0 低电平点亮,说明两款 FPGA 板的 LED 电路为灌电流接法,与 Teensy 方案相反。
布局定义与矩阵坐标
info.json 定义了名为LAYOUT的物理布局,它把 Amiga 键盘的每个物理键位映射为[row, col]矩阵坐标,并给出键帽在视觉上的x/y位置与宽度w、高度h。从坐标分布可以还原出 Amiga 键盘的特征结构:
- 上排 F1~F10 共 10 个功能键(矩阵第 6 行),右侧为独立的数字键盘区;
- 主键区为标准的 60%+ 配列,包含
KC_GRV、字母区、方向键与右侧数字键盘; - 底部一行中,
{"matrix": [5, 15], ..., "w": 2.75}是 2.75U 的空格键; {"matrix": [0, 13], "h": 2}与{"matrix": [3, 9], "h": 2}表示竖向 2U 高度的按键(回车/小键盘 + 键等)。
布局的坐标系布局与 QMK 可视化工具兼容,可用于在 QMK Configurator 中预览键位。
默认键位与 Help 键临时层
Amiga 键盘缺少 F11、F12 等标准 PC 键,因此 keymaps/default/keymap.c 实现了一个第二层(Layer 1),由键盘右上角的Help 键以MO(1)(临时层,按住触发)方式切换,原文档明确标注这是"work in progress"(仍在演进中)。
主层(Layer 0)
主层把 Amiga 键位映射为 PC 布局:
- 功能键区:
KC_ESC+KC_F1~KC_F10; - 主键区:
KC_GRV、KC_1~KC_0、KC_MINS、KC_EQL、KC_BSLS、KC_BSPC,以及字母、标点与KC_ENT; - 修饰键:
KC_LCTL、KC_LSFT、KC_LALT、KC_LGUI与右侧KC_RGUI、KC_RALT、KC_RSFT; - 方向键与编辑键:
KC_UP、KC_LEFT、KC_DOWN、KC_RGHT、KC_DEL; - 数字键盘区:
KC_P7~KC_P9、KC_P4~KC_P6、KC_P1~KC_P3、KC_P0、KC_PDOT、KC_PMNS、KC_PPLS、KC_PENT、KC_PSLS、KC_PAST; - Help 键位置(主层中
KC_DEL之后的MO(1))即触发第二层的入口。
第二层(Layer 1)
按住 Help 键进入的临时层补齐了缺失的按键:
KC_F11、KC_F12(对应主层 F9/F10 位置上方);KC_NUM、KC_SCRL、KC_PSCR(数字键盘区右侧);QK_BOOT:放置在 Q 键位置,功能是复位进入 bootloader,配合"HELP+R"刷写流程使用;- 其余位置均为
_______(透传)或KC_NO,保证按键在两层间行为清晰可控。
这种"临时层补键"的手法是 QMK 层机制的典型应用,参考 docs/feature_layers.md 可了解MO()与透传_______的语义。
特性配置差异
三个目标在 keyboard.json 等文件的features段中声明了功能差异,这直接影响固件体积与可用行为:
| 特性 | teensy2pp | miss1200 | mistress1200 |
|---|---|---|---|
bootmagic | true | true | true |
extrakey | true | true | false |
mousekey | false | false | false |
nkro | false | true | false |
magic | — | — | false |
space_cadet | — | — | false |
grave_esc | — | — | false |
| LTO 链接 | 未启用 | 未启用 | true(build.lto) |
tapping.toggle | 默认 | 默认 | 3 |
mistress1200对特性做了最多的裁剪并启用 LTO,用于在 ATmega16u4(比 32u4 更小的闪存/内存)上压缩固件体积;其 mistress1200/config.h 还定义了LAYER_STATE_8BIT,用 8 位变量记录层状态以节省 RAM。这些配置是 AVR 平台"内存与功能权衡"的直观案例,可参考 docs/squeezing_avr.md。
编译与刷写
构建命令
在完成 开发环境搭建 后,按目标板选择对应命令:
make converter/a1200/teensy2pp:default或
make converter/a1200/miss1200:default或
make converter/a1200/mistress1200:default三个命令分别编译对应子目录的默认键位(即上文 keymaps/default/keymap.c)。如需烧录,可将make换成qmk flash或使用make ...:default:flash的旧式语法。
进入 bootloader 的两种方式
- 首次刷写:使用板载复位按钮强制进入 bootloader 模式(teensy2pp 使用
halfkay引导,两款 FPGA 板使用atmel-dfu,见各 keyboard.json 的bootloader字段); - 后续重刷:固件刷入后,无需拆机按复位键——在 Amiga 键盘上同时按下HELP + R即可触发第二层中的
QK_BOOT键码复位进入刷写模式。这是本项目最具实用价值的日常操作:改装完成后键盘被装入机箱内,物理复位键难以触及,HELP+R 让重刷固件变得可及。
仓库结构速览
A1200 Converter 在仓库中的完整结构如下:
keyboards/converter/a1200/ ├── info.json # LAYOUT 布局与矩阵坐标定义 ├── readme.md # 项目说明、接线表与编译指引 ├── keymaps/ │ └── default/ │ └── keymap.c # 默认键位:主层 + Help 临时层 ├── miss1200/ │ └── keyboard.json # ATmega32u4 引脚与特性 ├── mistress1200/ │ ├── config.h # LAYER_STATE_8BIT 等编译期配置 │ └── keyboard.json # ATmega16u4 引脚与特性(含 LTO) └── teensy2pp/ └── keyboard.json # AT90USB1286 引脚与特性修改键位时,只需编辑 keymap.c(如为第二层增加KC_MUTE、KC_VOLU等多媒体键),或通过 docs/configurator_default_keymaps.md 描述的配置器流程可视化生成键位;调整接线则需同步修改对应 keyboard.json 中的matrix_pins声明,确保与物理接线一致。
总结
A1200 Converter 以最小的硬件改动(一块转接板或原生专用连接器)让 Amiga 1200 原装键盘在现代主机上重获新生,并借助 QMK 的层机制补齐了 PC 键盘缺失的按键。无论是改装情怀机、在 FPGA 主控内集成键盘,还是探索 AVR 平台下功能与体积的平衡艺术,keyboards/converter/a1200 都是一份完整、可复现的参考实现。
- 嵌入式
- 固件
- 驱动开发
- 硬件开发
【免费下载链接】qmk_firmware
Open-source keyboard firmware for Atmel AVR and Arm USB families
相关推荐
QMK 固件之 AMJ96:96 键键盘的硬件配置、矩阵扫描与刷写实战指南
QMK 固件之 AMJ96:96 键键盘的硬件配置、矩阵扫描与刷写实战指南 AMJ96 是一款 96 键(1800 紧凑全尺寸)客制化键盘,采用阳极氧化铝外壳、
嵌入式固件驱动开发硬件开发QMK 固件中的 ASH-1800 键盘支持:硬件配置、矩阵映射与固件构建实战
QMK 固件中的 ASH 1800 键盘支持:硬件配置、矩阵映射与固件构建实战 ASH 1800 是 QMK Firmware 仓库中一款以低成本 G80/G8
嵌入式固件驱动开发硬件开发QMK 固件中 CapsUnlocked CU65 键盘支持详解:硬件配置、布局矩阵与构建刷写指南
QMK 固件中 CapsUnlocked CU65 键盘支持详解:硬件配置、布局矩阵与构建刷写指南 CU65 是 CapsUnlocked 推出的一款可高度自定
嵌入式固件驱动开发硬件开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考