Xbox-HID-串口-U盘 四合一模块 XPLUG-CH
简介
CH549模拟Xbox、HID手柄、模拟CH340、U盘,四合一Demo工程,含2.4G收发和FLASH存储
简介:CH549模拟Xbox、HID手柄、模拟CH340、U盘,四合一Demo工程,含2.4G收发和FLASH存储开源协议
:GPL 3.0
描述
基本信息
本模块通过USB实现了4种工作模式,分别为:
1、模拟Xbox手柄,将2.4G接收到的数据转为Xbox手柄数据包传给电脑。
2、HID复合设备,包含键盘、鼠标、触控、媒体控制、HID手柄(PS4),以及自定义HID通信。代码默认将2.4G接到的数据转为HID手柄数据传给电脑。
3、模拟CH340,可以使用CH340/341的驱动让电脑识别到串口,支持波特率设置命令和RTS、DTR流控命令。
4、模拟U盘,使用外部FLASH作为存储介质。
本项目主要用于展示这4种设备在USB是如何实现的,供学习参考,硬件电路仅作最基本的支持,重要的是软件实现。
实际使用可自行修改,比如对于模拟Xbox和HID功能,可以不用2.4G而是直接在板上加按键和摇杆直接让主控读取并传给电脑,做成小手柄;
对于模拟CH340功能,可以和其他MCU如ESP32组成双主控系统,让CH549做低级工作,ESP32做高级的,且当ESP32需要烧录时,
CH549可以直接充当转串口芯片,而CH549本身又是USB直接烧录的,因此实现一个USB接口烧录两个(甚至更多)芯片且无需外加转串口芯片。
硬件
主控 CH549G,SOP16封装,支持USB直接烧录(该芯片作为51机,性能较佳且常用外设都有,使用方便,此外还有更多引脚的封装)。
5V转3.3V的LDO使用 662K. 芯片,为主控、无线模块和FLASH供电。
FLASH使用 W25Q128,SOP8封装,16M字节空间。若改用更小的需要修改代码宏定义。
无线模块使用基于 Si24R1 的2.4G模块(基本兼容NRF24L01),某宝优信电子搜Si24R1可找到。
一个无声按键,优信搜6*6*5按键可找到。
两个LED,在程序注释中认为LED1为绿,LED2为蓝,不过实际可自选颜色。
软件
0、模式切换
代码默认由按键控制模式切换,若按住按键上电,则为模式2;直接上电为模式1。可在代码中修改。
在工作状态下长按按键达到约1s,主控会关闭USB并反转LED1状态以提示,当松开按键,则触发软件复位,复位后切换模式。
默认的模式切换逻辑(复位前模式->复位后模式):1->3,2->4,3->2,4->1。模式切换逻辑可在代码中修改。4种模式如下:
1、模拟Xbox手柄
模拟了Xbox手柄的USB实现,具体可以参考这篇文章:Xbox控制器USB实现与数据格式
代码默认将2.4G接收到的数据转为Xbox手柄数据包传给电脑,2.4G数据包的组织格式见附件资料。
2、HID复合设备
HID设备:键盘、鼠标、触控、媒体控制、HID手柄(PS4),使用端点1上传,均以HID报文的形式上传数据,具体格式参考HID报文描述符。
自定义HID通信:使用端点2上下传,可在PC端以HID方式进行自定义通信。
代码默认将2.4G接到的数据转为HID手柄数据传给电脑。
3、模拟CH340
当电脑有CH340/341驱动时即能识别到串口,枚举和波特率、流控命令使用端点0,串口数据使用端点1上下传,端点2用于输入型流控信号上传(不过未实现)。
本demo板没有使能硬件串口,因为串口TX引脚与FLASH冲突,若不用FLASH则可以用串口引脚,使之成为真正的USB转串口芯片。
也可以尝试将串口数据传到2.4G模块上去,变成一个无线串口模块(代码只做了把2.4G接收数据用模拟串口上传的示例,而且没用缓冲区,很原始的示例)。
支持波特率设置命令,不过仅接收上位机设置的波特率数值,不会实际使用,这也是因为未使用硬件串口。
支持RTS、DTR流控命令,可在宏定义中修改RTS、DTR的引脚和极性。代码默认RTS对应LED1,DTR对应LED2,反极性。
4、模拟U盘
对U盘常用的BOT通信和SCSI(UFI)命令做了简单的支持,具体可参考这些内容:USB大容量存储BOT,或USB相关规范文档。
由于NOR FLASH的特性,以及主控的性能限制等,模拟U盘速度较慢,尤其写入非常慢。
代码默认读取时LED1闪烁,写入时LED2闪烁。
首次接入模拟U盘时PC会提示格式化,之后即可使用,而文件系统也在此过程由PC建立。
由于文件系统是PC建立的,因此主控只能得到原始数据流而不能解析文件,若需要让主控能读写文件则主控端需要挂载文件系统。
烧录
烧录软件为 WCHISPTool,可到沁恒官网搜索下载。烧录方式为CH549的USB直接烧录。
下载配置务必按照下图设置(尤其是最后一项下载配置脚必须为P51):
对于未烧过序的新CH549芯片,一般上电会自动进入下载模式,在烧录软件中能检测到设备。
若不是,则需要先用电阻上拉P51引脚(即USB DP线)到3.3V,再上电,触发烧录模式。
若不便完成上拉操作,或作为开发者需要不断修改程序,可考虑使用下载触发模块:CH5x下载器或USB开关
烧录后初次进入U盘模式时,由于FLASH没有数据,电脑会提示需要格式化,完成后即可正常使用。
其他
本项目主要展示各功能的USB基本实现,不太能保证完美模拟,不过在我自己的Win10上测试各功能均正常。
附件里有一些在研究这些USB实现时的相关资料或笔记,供参考。
展示视频:https://www.bilibili.com/video/BV1uH4y1W7fT
2024.7.12更新
提供了一套外壳3D设计,分上下两部分,因空间较小未使用螺丝或卡扣结构,合起来后直接在接缝处点胶粘住即可。
没有给LED开通光孔,因为外壳比较薄,一般来说光完全可以透过。
评论