CH552G USB HID 键盘固件 —— 上电延时后自动发送 F1 按键,用于远程/无头电脑跳过 BIOS 自检时卡住的 "Press F1 to continue" 提示。
服务器或工控机在断电恢复、BIOS 配置变更后,常卡在如下提示等待人工确认:
Press F1 to continue, DEL to enter setup
对于远程机房或无显示器的设备,这意味着一趟现场跑腿。AutoKeyboard 是一个即插即用的硬件方案——插在 USB 口上,等待预设时间(默认 10 秒)后自动按下 F1,系统即可正常启动。
- MCU:CH552G(WCH,增强型 E8051,USB 2.0 设备)
- 最小系统板:USB-A 公头直插型
- LED 指示:P1.5(板上自带)
- 尺寸:约 25mm × 15mm,直插 USB 口,无需外部供电
# 安装依赖
sudo apt install sdcc
# 编译
make
# 输出文件
# build/autokeyboard.bin — 裸二进制(wchisp 烧录用)
# build/autokeyboard.hex — Intel HEX(WCHISPTool 烧录用)
# build/autokeyboard.ihx — SDCC 中间格式
# 清理编译产物
make clean修改 src/main.c 顶部宏后重新编译即可:
#define DELAY_SECONDS 10 /* 上电到按下F1的延时,单位:秒 */# 安装 wchisp
# cargo install wchisp
make flash下载 WCH 官方烧录工具,载入 build/autokeyboard.hex 烧录。
- 按住板子 BOOT 键不放(或短接 BOOT 引脚到 GND)
- 插入电脑 USB 口
- 执行烧录命令
- 拔掉 USB 重新插入,设备开始工作
| 阶段 | LED 状态 | 说明 |
|---|---|---|
| ① USB 枚举 | 🔴 快闪 (~200ms) | 设备注册为 HID 键盘 |
| ② 延时等待 | 🔴 慢闪 (~500ms) | 等待 DELAY_SECONDS 秒 |
| ③ 发送 F1 | 🔴 常亮 | 自动按下并释放 F1 键 |
| ④ 休眠 | 🔴 常亮 | 进入省电模式,不再操作 |
很多电脑主板支持 断电后自动开机(BIOS → Power Management → Restore on AC Power Loss 设为 Power On)。AutoKeyboard 搭配一个米家智能插座之类的远程开关,就能实现完整的远程开机方案:
- 电脑接在智能插座上,主板设好断电自动开机
- AutoKeyboard 插在电脑 USB 口上
- 需要远程开机时 → 手机 App 关闭插座 → 等待 10 秒 → 打开插座
- 电脑通电自启,进入 BIOS → AutoKeyboard 自动按 F1 → 系统正常启动
优势:整套成本不到 50 元(智能插座 30-40 + 开发板 5-10),比 IPMI / 远程管理卡便宜两个数量级,且不挑主板。
AutoKeyboard 的核心是「上电后自动按一个键」。稍作修改,它能做的事远不止按 F1:
- 自动登录 — 发送用户名 + 密码组合,实现无人值守开机登录
- 一键恢复 — 上电后执行一系列按键操作,进入指定系统或恢复模式
- 定时触发 — 配合智能插座通断,实现定时按键操作(如每天凌晨自动重启)
- 按键精灵 — 修改固件逻辑,实现更复杂的按键序列(菜单导航、组合键等)
只需修改 src/main.c 中的按键发送逻辑,烧录即可。芯片本身成本极低,适合批量部署。
| 文件 | 说明 |
|---|---|
src/main.c |
主固件 — USB 设备配置、中断处理、Timer0 计时、LED 控制、F1 按键发送 |
src/debug.c |
时钟配置(CfgFsys)、微秒/毫秒延时、UART 调试 I/O |
src/debug.h |
UART、延时、看门狗函数声明 |
src/compiler.h |
SDCC 编译器适配宏(SFR / SBIT) |
src/ch554.h |
CH554 MCU 全部特殊功能寄存器定义(WCH SDK) |
src/ch554_usb.h |
USB 协议常量与数据结构定义(WCH SDK) |
Makefile |
SDCC 构建脚本,支持 make / make flash / make clean |
src/ 目录下还包含以下实验性版本,供参考:
| 文件 | 用途 |
|---|---|
main_minimal.c |
最小 USB HID 键盘枚举测试(不发送按键) |
main_blink.c |
LED 闪烁测试(Timer0 中断方式) |
main_blink2.c |
LED 闪烁测试(纯软件延时) |
main_v3.c |
自动键盘较早版本(不同 USB 中断处理模式) |
wow哇呜怪
📺 抖音 · B站 · 小红书
本项目采用 MIT 许可证。
包含的 WCH SDK 头文件(ch554.h、ch554_usb.h)版权归 WCH(南京沁恒微电子股份有限公司)所有,以 MIT 许可证发布。
关键词:CH552G · USB HID · 键盘固件 · 远程 BIOS 应答 · SDCC · E8051