本感覺(jué)一個(gè)鍵鼠復(fù)合設(shè)備沒(méi)啥好講的,但是應(yīng)不住日天兄再三之邀,寫下此文。
首先簡(jiǎn)單科普一下USB的速度,對(duì)于USB2.0來(lái)說(shuō),一共有3種速度
低速(USB1.0):1.5Mbit/s
全速(USB1.1):12Mbit/s
高速(USB2.0):480Mbit/s
對(duì)于大部分支持USB2.0的單片機(jī)來(lái)說(shuō),一般都是支持的全速模式,高速模式是比較少見(jiàn)的,而這次使用的LPC5516是全速模式與高速模式都支持的。
我們先看一下手臺(tái)的USB類型。
可以看到,識(shí)別出來(lái)的是高速USB,但是事實(shí)上對(duì)于鍵盤鼠標(biāo)這種低速設(shè)備來(lái)說(shuō),完全是大才小用了,這里我就是屬于弄著玩玩,看起來(lái)比較酷炫。
手臺(tái)本身由兩部分組成,鍵盤與鼠標(biāo),可以看到配置描述符里面有兩個(gè)接口
分別就是鼠標(biāo)跟鍵盤了
USB鼠標(biāo)部分:
鼠標(biāo)發(fā)送給PC的數(shù)據(jù)每次4字節(jié)
BYTE1 --
|--bit7~3: 無(wú)意義
|--bit2: 中鍵,1按下 0抬起
|--bit1: 右鍵
|--bit0: 左鍵
BYTE2 -- X坐標(biāo)變化量,負(fù)數(shù)表示向左移,正數(shù)表右移。用補(bǔ)碼表示變化量
BYTE3 -- Y坐標(biāo)變化量,負(fù)數(shù)表示向下移,正數(shù)表上移。用補(bǔ)碼表示變化量
BYTE4 -- 滾輪變化,0x01表示滾輪向前滾動(dòng)一格;0xFF表示滾輪向后滾動(dòng)一格;0x80是個(gè)中間值,不滾動(dòng)。
USB是一個(gè)主機(jī)向從機(jī)查詢的協(xié)議,對(duì)于鼠標(biāo)來(lái)說(shuō),查詢的速度越快,連續(xù)性越好,這里我程序設(shè)置的主機(jī)輪詢速度為2ms,也就是鼠標(biāo)部分1S通信500次。
這個(gè)參數(shù)在鼠標(biāo)上叫回報(bào)率,也叫刷新率,簡(jiǎn)單理解就是1S能上傳多少次數(shù)據(jù)到電腦,一般鼠標(biāo)是125Hz。我的鼠標(biāo)測(cè)試(羅技 M90)
手臺(tái)數(shù)據(jù)測(cè)試
500Hz的回報(bào)率對(duì)手臺(tái)來(lái)說(shuō)完全足夠。
USB鍵盤部分:
鍵盤發(fā)送給PC的數(shù)據(jù)每次8個(gè)字節(jié)
定義分別是:
BYTE1 --
|--bit0: 左Ctrl,1為按下 0為抬起
|--bit1: 左Shift
|--bit2: 左Alt
|--bit3: 左GUI
|--bit4: 右Ctrl
|--bit5: 右Shift
|--bit6: 右Alt
|--bit7: 右GUI
BYTE2 -- 保留
BYTE3--BYTE8 -- 普通按鍵
所以說(shuō)一般的USB鍵盤只考慮軟件的話只能做到6鍵無(wú)沖,如果需要更多,那只能加點(diǎn)接口,也就是那些支持多鍵無(wú)沖的鍵盤(需要硬件支持)。
對(duì)于手臺(tái)來(lái)說(shuō),上面只有7個(gè)按鍵,這7個(gè)按鍵是直接接到IO上的。硬件完全支持無(wú)沖。而且其中一個(gè)按鍵還是確定鍵,平時(shí)使用中軟件只要保證6鍵無(wú)沖即可。
同時(shí)按下6鍵,可正常識(shí)別。
鍵盤另一個(gè)比較重要的就是反應(yīng)速度了,也就是按下按鍵到電腦反應(yīng)的時(shí)間(其實(shí)我覺(jué)得完全不重要,因?yàn)殒I盤又不像鼠標(biāo)一樣是個(gè)連續(xù)的過(guò)程,人的反應(yīng)速度才多少)。
軟件上配置的主機(jī)輪詢速度就是4ms,也就是理論上,按下按鍵到電腦有反應(yīng),最長(zhǎng)要4ms。
這個(gè)只能說(shuō),主觀感受是完全沒(méi)問(wèn)題的。
對(duì)于LPC5516來(lái)說(shuō)這種應(yīng)用只能說(shuō)是毛毛雨了,150MHz的主頻,完全輕輕松松。
按鍵與編碼器:
按鍵、編碼器通通外部上拉加電容消抖,軟件部分沒(méi)添加消抖,使用中未出現(xiàn)按鍵抖動(dòng)的問(wèn)題。
編碼器代碼采用外部中斷的方式寫的,穩(wěn)定性還可以,就是買的編碼器分辨率太低了,效果不太理想。
WS2812:
代碼上使用了SPI去模擬,沒(méi)有做按鍵與燈的綁定代碼,目前只支持全彩漸變呼吸燈的效果。目前板子硬件上有11個(gè)燈,驅(qū)動(dòng)毫無(wú)壓力。
代碼是用了mgn的程序改巴改巴搞出來(lái)的,原地址: https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=620562
程序開(kāi)發(fā)上,NXP官方提供了很詳細(xì)的例程,很方便就能上手,手臺(tái)的軟件部分的開(kāi)發(fā)時(shí)間加起來(lái)不超過(guò)2小時(shí)。MCUXpresso Config Tools確實(shí)好用,配IO配時(shí)鐘不要太簡(jiǎn)單,
最后總結(jié)一下:對(duì)于鍵鼠設(shè)備來(lái)說(shuō),全速USB就完全足夠,因?yàn)殒I鼠是走中斷傳輸模式的,速度的提升到了1ms之后的意義就不大了,太快反而給主機(jī)帶來(lái)了負(fù)擔(dān)。比如現(xiàn)在我在使用的鍵盤就是全速USB的,能查到的鼠標(biāo)信息,好的游戲鼠標(biāo)的回報(bào)率就是500Hz或者1000Hz了,換算到USB速度上,差不多也就是全速USB的水平吧(手上沒(méi)有這么高級(jí)的玩意,猜的速度,歡迎有大佬在帖子留下自己鼠標(biāo)的測(cè)試記錄)。
對(duì)于我這個(gè)手臺(tái)來(lái)說(shuō)LPC5516可以說(shuō)性能嚴(yán)重過(guò)剩。還是得想個(gè)辦法逼出極限性能來(lái)啊。