概述
CH9329是一款串口轉(zhuǎn)USB HID設(shè)備功能芯片,根據(jù)不同的工作模式,HID設(shè)備可以識(shí)別為:USB鍵盤設(shè)備、USB鼠標(biāo)設(shè)備或者自定義HID類設(shè)備。接收串口數(shù)據(jù),并自動(dòng)根據(jù)串口工作模式進(jìn)行數(shù)據(jù)解析,解析完成后按照HID類設(shè)備規(guī)范,將數(shù)據(jù)打包通過USB口上傳給計(jì)算機(jī)。
特點(diǎn)
1、芯片出廠內(nèi)置固件程序,無需進(jìn)行二次開發(fā)。
2、支持Windows/Linux/安卓/macOS等操作系統(tǒng),使用系統(tǒng)內(nèi)置的鍵盤、鼠標(biāo)、HID設(shè)備驅(qū)動(dòng)程序,無需額外安裝。
3、提供4種工作模式(單一鍵盤/鼠標(biāo)/自定義HID功能,或幾個(gè)功能的復(fù)合)。
4、提供3種串口通信模式(協(xié)議傳輸模式/ASCII模式/透?jìng)髂J剑?/p>
5、支持USB設(shè)備信息、串口通信地址、鍵盤回車符等信息的配置。
工作模式
串口通信模式
USB鍵盤功能
芯片可以實(shí)現(xiàn)標(biāo)準(zhǔn)USB鍵盤功能,USB鍵盤包含普通按鍵和多媒體按鍵。通過接收串口數(shù)據(jù)實(shí)現(xiàn)模擬鍵盤按鍵的效果。
該功能常用于:掃碼槍、收銀機(jī)、小鍵盤、遠(yuǎn)程控制等。
USB鼠標(biāo)功能
芯片可以實(shí)現(xiàn)標(biāo)準(zhǔn)USB鼠標(biāo)功能,USB鼠標(biāo)包含相對(duì)鼠標(biāo)和絕對(duì)鼠標(biāo)。通過接收串口數(shù)據(jù)實(shí)現(xiàn)模擬鼠標(biāo)的效果。
該功能常用于:硬件版按鍵精靈、遠(yuǎn)程控制等。
自定義HID功能
此自定義非彼自定義,這里的自定義實(shí)際上是指HID的subclass和protocol均為0的設(shè)備類型,并非是指用戶可以自定義類別或HID報(bào)表格式等,把它比作一個(gè)不需要使用COM口的USB轉(zhuǎn)串口設(shè)備功能更形象些。
該功能常用于:USB轉(zhuǎn)串口雙向數(shù)據(jù)透?jìng)鳎怛?qū)HID方式),配合鍵鼠功能使用提供計(jì)算機(jī)的數(shù)據(jù)下傳通道。
常見Q&A
Q:如何選擇芯片工作模式?
A:各工作模式的適用場(chǎng)景:
模式0:多功能同時(shí)應(yīng)用的場(chǎng)景(如使用鍵鼠功能時(shí)需要和計(jì)算機(jī)之前收發(fā)自定義數(shù)據(jù))、需要多媒體鍵盤的場(chǎng)景、需要通過USB通道獲取/配置芯片參數(shù)的場(chǎng)景。
模式1:使用單一USB鍵盤功能,并且不使用多媒體鍵盤,適用于不支持復(fù)合設(shè)備的老式計(jì)算機(jī)。
模式2:同時(shí)使用鍵盤和鼠標(biāo)功能,且對(duì)Linux/Android/蘋果等操作系統(tǒng)的鼠標(biāo)兼容性更好。
模式3:使用單一USB自定義HID功能,配合計(jì)算機(jī)軟件實(shí)現(xiàn)串口設(shè)備和計(jì)算機(jī)的雙向數(shù)據(jù)收發(fā),類似于USB虛擬串口(COM口)應(yīng)用,區(qū)別是看不到COM虛擬端口,而是直接用系統(tǒng)HID API和設(shè)備完成交互。
Q:如何選擇串口通信模式?
A:各串口通信模式的適用場(chǎng)景:
模式0:協(xié)議傳輸模式,此模式適用于至少2個(gè)功能同時(shí)應(yīng)用的場(chǎng)景、需要通過串口通道獲取/配置芯片參數(shù)的場(chǎng)景。該模式功能最齊全,在不完全確定產(chǎn)品功能的前提下,建議優(yōu)先選用此模式作為默認(rèn)模式。
模式1:ASCII碼模式,為USB鍵盤功能量身定做的簡(jiǎn)版按鍵傳輸模式,該模式會(huì)將通常的可見ASCII字符直接轉(zhuǎn)成按鍵的HID報(bào)表以及按鍵釋放的HID報(bào)表,轉(zhuǎn)換的字符主要包含:數(shù)字0~9,字母A~Z,空格和回車等。注:
不能轉(zhuǎn)換特殊按鍵,如:F1~F12,方向鍵,Shift和Ctrl按鍵等。
模式2:透?jìng)髂J?,是指串口?shù)據(jù)原封不動(dòng)的通過USB打包上傳給計(jì)算機(jī),該模式適用于自定義HID模式,實(shí)現(xiàn)類似USB轉(zhuǎn)虛擬串口的應(yīng)用效果。
Q:協(xié)議傳輸模式鍵盤包怎么填充?
A:需要使用的命令碼:
這里以USB鍵盤普通數(shù)據(jù)為例:
串口報(bào)文的核心數(shù)據(jù)就是中間的8個(gè)字節(jié)的內(nèi)容,這8個(gè)數(shù)據(jù)芯片提取后會(huì)直接通過USB打包上傳給計(jì)算機(jī),內(nèi)容格式:
對(duì)于字節(jié)3~字節(jié)8的對(duì)應(yīng)鍵值,可查看文檔附錄的“CH9329 鍵碼表”
如:數(shù)字1~0對(duì)應(yīng)HID Code:0x1E~0x27,如果需要模擬按鍵1,則8字節(jié)內(nèi)容為:
鍵1按下:{0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00}
按鍵釋放:{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
確認(rèn)了中間的8字節(jié)包,傳輸?shù)臅r(shí)候再按照協(xié)議要求,添加包頭,命令碼,地址碼和自動(dòng)計(jì)算得到的累加和等就可以實(shí)現(xiàn)鍵盤控制了。
舉例1:模擬"A"鍵先按下,再釋放
串口下傳: 57 AB 00 02 08 00 00 04 00 00 00 00 00 10
芯片上傳: 57 AB 00 82 01 00 85
串口下傳: 57 AB 00 02 08 00 00 00 00 00 00 00 00 0C
芯片上傳: 57 AB 00 82 01 00 85
舉例2:模擬先同時(shí)按下“左Shift”+“A”鍵,再釋放:
串口下傳: 57 AB 00 02 08 02 00 04 00 00 00 00 00 12
芯片上傳: 57 AB 00 82 01 00 85
串口下傳: 57 AB 00 02 08 00 00 00 00 00 00 00 00 0C
芯片上傳: 57 AB 00 82 01 00 85
除以上方法外,開發(fā)時(shí)還可以用其他方式便捷確定需要的鍵盤包內(nèi)容,使用USB分析儀軟件(USB2.0 Monitor或者BusHound等工具)抓取計(jì)算機(jī)上的USB鍵盤相應(yīng)按鍵按下時(shí)的USB包,然后復(fù)制下來使用即可。
Q:協(xié)議傳輸模式鼠標(biāo)包怎么填充?
A:需要使用的命令碼:
這里以USB相對(duì)鼠標(biāo)為例:
協(xié)議文檔介紹比較全面,可直接參考,此外開發(fā)時(shí)同樣可以使用USB分析儀軟件(USB2.0 Monitor或者BusHound等工具)抓取計(jì)算機(jī)上的USB鼠標(biāo)操作時(shí)的USB包,然后復(fù)制下來使用即可。
Q:使用鍵盤功能遇到部分機(jī)器鍵碼上傳不正確?
A:如果遇到傳多個(gè)鍵盤碼有碼丟失、重復(fù)或干脆不響應(yīng)的問題,可從以下幾個(gè)方面排查:
1、上傳時(shí)USB鍵盤設(shè)備是否在線,可通過設(shè)備管理器的“USB鍵盤”列表查看是否有CH9329對(duì)應(yīng)的KeyBoard,右擊“屬性”->“詳細(xì)信息”-》“硬件ID”,芯片默認(rèn)VID是:0x1A86。
2、檢查串口數(shù)據(jù)和USB數(shù)據(jù)是否符合設(shè)計(jì)預(yù)期,如果是協(xié)議傳輸模式,檢查每個(gè)串口數(shù)據(jù)包的回復(fù)內(nèi)容是否正確。
3、若串口數(shù)據(jù)和USB數(shù)據(jù)均未報(bào)錯(cuò),嘗試放慢上傳間隔。
(1)、在ASCII碼模式下,控制串口字符間的發(fā)送間隔,建議區(qū)間為5~50ms
(2)、在協(xié)議傳輸或透?jìng)髂J较?,控制每個(gè)鍵盤包的包間隔,建議區(qū)間為10~100ms
4、若主機(jī)端收不到任何數(shù)據(jù),則原因可能為:部分主機(jī)只能使用固定VID和PID的鍵盤,此時(shí)要用配置工具修改CH9329的USB ID信息和原有設(shè)備相同。
5、若遇到上傳的鍵盤數(shù)據(jù)中若存在連續(xù)相同鍵值,只顯示第一個(gè)數(shù)據(jù),后面重復(fù)的不顯示。比如:123444567778,只顯示:12345678,此時(shí)原因?yàn)椋?/p>
該部分機(jī)器對(duì)于連續(xù)鍵值上傳時(shí)的釋放包有特殊要求,此時(shí)ASCII模式(一個(gè)串口對(duì)應(yīng)2個(gè)鍵盤包:一個(gè)按鍵包和一個(gè)釋放包)無法適用,需要使用協(xié)議傳輸模式,在此模式下發(fā)包更改為:連續(xù)上傳鍵值按鍵包,上傳完成后最后再傳一個(gè)釋放包。
6、一個(gè)定位問題的便捷方式:出現(xiàn)兼容性問題后,若機(jī)器有正??捎玫膾叽a槍等設(shè)備,可以使用USB總線分析儀或其他USB抓包軟件抓取掃碼槍和電腦之間的通訊數(shù)據(jù)包,然后使用CH9329模擬該設(shè)備發(fā)包規(guī)律上傳。