基于CH554G的HID键盘转串口模块
引言
WCH旗下有很多串口转HID芯片,比如CH9329(串口转HID键盘/鼠标/自定义HID芯片)、CH9328(串口转HID键盘芯片)、CH9326(串口转HID芯片)。但是,这些芯片的USB都是Device,也就是说,是将外设模拟成鼠标/键盘和电脑进行通讯。而我需要的功能其实是让不支持USB-Host的单片机,以串口方式读取USB HID键盘回传的数据。
物料介绍
本作品使用了一颗CH554G芯片作为主控,而板上的CH340C是便于调试的,可以根据自己的需求更改板子原理图,或者简单摘掉这颗CH340C,飞线连接(没有预留飞线口是我的失误,但是打了不少就没改)。
USB口与烧录方法说明
Type-C口连接的是CH340C。
USB-A口连接的是CH554G。
按住BOOT,使用USBA公对A公线连接A口与电脑,然后使用WCHISPStudio烧录附件中的固件。拔插之后可自动运行主程序。
CH554G的USB除了烧录,只能用来插入USB键盘!插入其他设备可能导致意想不到的错误!切勿插入HID混合设备(如部分2.4G键鼠套装),可能导致CH554G卡死、无法按预期工作!
LED灯指示
竖着拿板子,SERIAL左侧的LED2为电源/HID数据包指示灯;SERIAL右侧的LED1为USB状态指示灯。
LED2上电后即亮;
LED1上电后熄灭;在上电后,USB设备插入时LED1灯会亮起(无论是否为HID设备),USB设备退出时LED1灯会熄灭,LED2灯会重新亮起(无论之前是否亮灭);
在有USB设备插入的时候,每传输1个数据包,LED2会转换一次亮灭状态。
注意:在正常运行、无USB设备插入且LED1灯熄灭时,按下BOOT键,LED1灯会点亮,这是正常现象,因为BOOT键会上拉CH554G的DP接口,刚好是USB设备握手的步骤。
串口数据格式
波特率115200,所有的包均以"N+"开头,以"\n"结尾,详细的格式如下:
包头
数据
含义
备注
N+SYSTEM_UP\n
无
CH554上电
是上电后发送的第一个包。
N+CHIP_ID=%02X\n
芯片ID
回报芯片ID
对于CH554,此处芯片ID为固定的0x54,即"N+CHIP_ID=54\n"。
N+WAITING\n
无
CH554就绪
是上电后发送的第三个包。发送此包代表着CH554已经打开了USB Host准备握手。
N+DEVICE_IN\n
无
CH554检测到USB设备插入
注意,插入不代表HID握手成功。
N+DEVICE_OUT\n
无
CH554检测到USB设备拔出
N+DAT: %c%c%c%c%c%c%c%c\n
8字节HID数据包
CH554回传HID数据包
此处若为键盘,需要另外参考键盘的HID数据包格式。
N+KBD_ERR_%02x\n
报错代码
CH554在与键盘通讯途中报错
可能是通讯途中USB键盘断开。
N+KBD_ERR_NO_ENDP\n
无
CH554找不到键盘的有效端点
N+ENUM_ROOT_ERR_%02X\n
报错代码
CH554枚举设备失败
通常是插入的设备不受支持。
N+ENUM_HUB_ERR_%02X\n
报错代码
CH554枚举HUB失败
可能是插入了空HUB,或HUB不受支持,或HUB供电不足。
后记、目前发现的BUG
①目前版本若USB供电不足,插入USB设备时容易导致全系统重启,下一版将添加一个大电容。
②目前版本USB公口未做保护,容易被击穿,下一版将添加USB-LC6。
③目前版本没有专门的串口测试点,下一版本将添加飞线点。
④目前版本不能更改CH554G波特率,下一版考虑添加GPIO控制波特率的功能,做的更像是一个键盘转串口芯片。
⑤目前版本只能单向回传HID的数据,下一版考虑添加通过串口接收数据控制芯片的功能。
⑥别在意工程名的CH554T,那是历史遗留问题。