引言

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,那是历史遗留问题。