RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)藍(lán)牙實(shí)戰(zhàn)項(xiàng)目USB藍(lán)牙接收器的解析總結(jié)

Q4MP_gh_c472c21 ? 來源:TopSemic嵌入式 wuyage ? 作者:TopSemic嵌入式 wu ? 2022-10-28 15:43 ? 次閱讀

前不久,一名在深圳的大學(xué)好友聯(lián)系到我,他們公司需要做一個(gè)USB藍(lán)牙接收器,功能大體如下:

USB藍(lán)牙接收器插在電腦上使用,被識(shí)別為鍵盤;

手機(jī)程序連接該USB藍(lán)牙接收器;

手機(jī)程序向電腦發(fā)送鍵盤輸入指令。

整體來說,他這個(gè)需求多少有點(diǎn)非主流,看著像是藍(lán)牙鍵盤,但物理上卻是USB接口的HID設(shè)備,并不是BLE的HID,BLE在這里只是用來接收手機(jī)發(fā)送的數(shù)據(jù)。

起初我也沒太認(rèn)真想如何實(shí)現(xiàn),就隨手發(fā)到了交流群里,于是各路高手們紛紛提出了自己的方案:

群友“喵了個(gè)咪”的方案是:單片機(jī)模擬USB鍵盤+藍(lán)牙串口透傳,可以用CH551+KT6368A,KT6368A可以參考之前的文章《成本不足2元的藍(lán)牙芯片,你能想得到嗎?》。

群友“heibus”的方案是:串口轉(zhuǎn)USB HID芯片+藍(lán)牙串口透傳,可以用CH9328+KT6368A。

群友“oxlm”、“Pengfei”的方案是:使用單顆藍(lán)牙SOC,可以用Nordic的NRF52840、NXP的QN9080等,藍(lán)牙芯片自帶USB接口,一顆芯片搞定。

群友“baolei”的方案是:CH340+KT6368A,通過Device Simulation Framework在PC端寫個(gè)上位機(jī)軟件,將串口收到的數(shù)據(jù)轉(zhuǎn)換成虛擬HID。

從原理上來說,以上4種方案都可以實(shí)現(xiàn)我這位同學(xué)的需求(說到我這個(gè)大學(xué)同學(xué),請(qǐng)?jiān)试S我臨時(shí)跑個(gè)題,當(dāng)年上學(xué)時(shí),他住我宿舍正對(duì)面,是個(gè)不折不扣的單片機(jī)迷,最初玩51單片機(jī),后來搗鼓AVR單片機(jī),然后自學(xué)uCosII操作系統(tǒng),后來不知道怎么又自學(xué)了Java,技術(shù)上特別愛專研。大學(xué)畢業(yè)后,我們就一南一北各自闖天涯了,他南下深圳直接工作了,從事安卓相關(guān)研發(fā)工作。這么多年一直在這個(gè)領(lǐng)域,在深圳也是純憑個(gè)人能力攢錢買了房子。不得不感慨,干移動(dòng)互聯(lián)網(wǎng)的就是比干嵌入式的更容易搞錢)。

那他為什么要整這個(gè)USB藍(lán)牙接收器呢?因?yàn)樗麄冃麻_發(fā)的這款A(yù)PP用在國外,而這個(gè)藍(lán)牙接收器是用來控制彩票機(jī)的。大概意思就是,在手機(jī)點(diǎn)一點(diǎn),實(shí)現(xiàn)在彩票機(jī)購買彩票的功能。

至于為什么不直接在彩票機(jī)上購買,他給我解釋了所謂智能的概念,聽的我一頭懵.

神奇了,最近老和BLE打交道,前段時(shí)間才研究了那個(gè)超便宜的BLE芯片KT6368A,這又來了一個(gè)BLE的相關(guān)需求,索性就考慮用群友“heibus”提出的CH9328+KT6368A方案來實(shí)現(xiàn)看看。

不過,隨著后來進(jìn)一步的需求溝通,發(fā)現(xiàn)用CH9328+KT6368A還不行,原因是它手機(jī)端發(fā)送的指令并不是原封不動(dòng)的透傳過去就行了,實(shí)際上需要做轉(zhuǎn)換,比如說手機(jī)端發(fā)送十進(jìn)制1,對(duì)應(yīng)到USB HID 的是兩組8字節(jié)的16進(jìn)制數(shù)據(jù):00 00 08 00 00 00 00 00和00 00 00 00 00 00 00 00,這樣單純靠硬件就完成不了了,需要涉及到軟件開發(fā)。

關(guān)于00 00 08 00 00 00 00 00和00 00 00 00 00 00 00 00這兩組數(shù)據(jù)的含義,那就得簡單補(bǔ)習(xí)點(diǎn)USB HID的基礎(chǔ)知識(shí)了。

鍵盤發(fā)送給PC的數(shù)據(jù)每次是8個(gè)字節(jié):

BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8

定義分別是:

BYTE1 :特殊按鍵,具體各位含義如下:

|--bit0: Left Control是否按下,按下為1 |--bit1: Left Shift 是否按下,按下為1|--bit2: Left Alt 是否按下,按下為1 |--bit3: Left GUI 是否按下,按下為1 |--bit4: Right Control是否按下,按下為1 |--bit5: Right Shift 是否按下,按下為1|--bit6: Right Alt 是否按下,按下為1 |--bit7: Right GUI 是否按下,按下為1

BYTE2:保留

BYTE3-BYTE8 :這六個(gè)為普通按鍵,鍵值可以參考USB HID to PS/2 Scan Code Translation Table。

舉個(gè)例子,比如按鍵a對(duì)應(yīng)的一幀數(shù)據(jù)是:00 00 0x04 0x00 00 00 00 00,第3字節(jié)04就是由下面這個(gè)表定義的:

fbfa9f1c-47bc-11ed-a3b6-dac502259ad0.png

這么說還是有點(diǎn)抽象,得來點(diǎn)更直觀的,電腦端我們可以用Bushound等USB分析軟件,我這里用的是Free USB Analyzer :

我用的是筆記本電腦,先外接一個(gè)USB鍵盤

在軟件左側(cè)找到USB鍵盤對(duì)應(yīng)的設(shè)備,開始監(jiān)控,這里只選擇Raw Data View

fc29c4c2-47bc-11ed-a3b6-dac502259ad0.png

按一下按鍵a并松開,這時(shí)軟件界面就會(huì)顯示收到了一串?dāng)?shù)據(jù),它其實(shí)是對(duì)應(yīng)了兩組8字節(jié)數(shù)據(jù),可以看到a確實(shí)對(duì)應(yīng)04,另外00 00 00 00 00 00 00 00表示的是按鍵彈起

fcde8e98-47bc-11ed-a3b6-dac502259ad0.png

如果一直按住a不松手,那么顯示的就會(huì)是如下信息

fcf93522-47bc-11ed-a3b6-dac502259ad0.png

只有當(dāng)你彈起按鍵a時(shí)才會(huì)顯示00 00 00 00 00 00 00 00

如果你要同時(shí)按下SHIFT+a組合按鍵再同時(shí)松開,那么對(duì)應(yīng)的數(shù)據(jù)就如下:

fd0e9e9e-47bc-11ed-a3b6-dac502259ad0.png

第一個(gè)字節(jié)就表示左側(cè)的Shift鍵。

當(dāng)然,如果是你先按下Shift鍵,再按下a鍵,再松開a鍵,最后松開Shift鍵,那么就對(duì)應(yīng)4組數(shù)據(jù),其分別為:

fd293ec0-47bc-11ed-a3b6-dac502259ad0.png

為了搞清楚這個(gè),我就花了好久的時(shí)間,畢竟以前也沒有怎么實(shí)際用過USB。再次回到他的藍(lán)牙接收器需求,手機(jī)端輸入的范圍是數(shù)字1-83,有的數(shù)字是對(duì)應(yīng)2個(gè)8字節(jié)數(shù)據(jù),表示的是一個(gè)按鍵的按下和松開,有的數(shù)字是對(duì)應(yīng)4個(gè)字節(jié),表示的是Shift+按鍵的組合按下與松開,并且每8個(gè)字節(jié)數(shù)據(jù)之間的時(shí)間間隔是200ms。

既然KT6368A不行,那就換一個(gè)可以編程的藍(lán)牙模塊,比如TI的CC2541模塊、Nordic NRF51822模塊都可以,因?yàn)槲以瓉碇С诌^NXP的QN9021芯片,對(duì)它相對(duì)熟一點(diǎn),所以就用QN9021來實(shí)現(xiàn)了。

用QN9021來實(shí)現(xiàn)上述軟件功能(藍(lán)牙接收手機(jī)發(fā)送過來的一串?dāng)?shù)據(jù),然后轉(zhuǎn)碼輸出)我本來以為分分鐘就搞定了,結(jié)果實(shí)際調(diào)試起來并不是想象的那么簡單。因?yàn)槌R?guī)的藍(lán)牙透傳使用方式是串口接收數(shù)據(jù)然后藍(lán)牙發(fā)送,這個(gè)需求正好是一個(gè)反向的操作。其中涉及到幾個(gè)關(guān)鍵的問題:

手機(jī)端發(fā)送過來的是一串長度可能長、可能短的數(shù)據(jù)。因?yàn)镼N9021是BLE 4.0芯片,一次發(fā)送字節(jié)最多是20個(gè)字節(jié),所以要考慮超過20字節(jié)的情況。

藍(lán)牙芯片一邊藍(lán)牙接收數(shù)據(jù),一邊串口發(fā)送數(shù)據(jù),要考慮串口沒有發(fā)送完,藍(lán)牙又來數(shù)據(jù)的的情況。

手機(jī)發(fā)送的不同鍵值,程序里要實(shí)現(xiàn)轉(zhuǎn)碼(有的是對(duì)應(yīng)發(fā)送2個(gè)8字節(jié)數(shù)據(jù),有的是對(duì)應(yīng)4個(gè)8字節(jié)數(shù)據(jù),每個(gè)8字節(jié)數(shù)據(jù)中間都是200ms)的代碼實(shí)現(xiàn)問題。

有經(jīng)驗(yàn)的程序高手可能不覺得是什么問題,但對(duì)我這樣好久沒實(shí)際寫代碼的人,還是折騰了不少時(shí)間.

上述問題1可以通過手機(jī)端分包來解決;

問題2的解決辦法是加一個(gè)隊(duì)列,把藍(lán)牙接收的數(shù)據(jù)放到隊(duì)列里緩存起來,另外一個(gè)地方從隊(duì)列取數(shù)串口發(fā)送。隊(duì)列如何用C語言實(shí)現(xiàn),讓我直接寫我肯定寫不出來,我用了github上的一個(gè)開源代碼:https://github.com/kuaileguyue/Ring-Buffer

問題3我是在200ms定時(shí)器函數(shù)里做了一個(gè)小狀態(tài)機(jī)來解決的,狀態(tài)機(jī)通過switch/case和標(biāo)志位就可以實(shí)現(xiàn)。

最后,我們?cè)賮砜偨Y(jié)一下這幾種方案:

方案 特點(diǎn) 價(jià)格(元器件)
CH551+KT6368A CH551可編程,藍(lán)牙只透傳不編程 幾元錢
CH9328+BLE (NRF51822/CC2541/QN9021等) BLE 可編程,CH9328硬件實(shí)現(xiàn)串口轉(zhuǎn)USB HID 數(shù)十元
單BLE(NRF52840/QN9080等) SOC可編程 數(shù)十元
CH340+KT6368A 硬件不編程,PC上編程 幾元錢

從硬件角度來看,這幾種方案都具備BLE和USB功能,只不過軟件部分跑的地方不同,最終都可以實(shí)現(xiàn)所需要的功能。

至于在實(shí)際項(xiàng)目或產(chǎn)品中,到底選取哪一種方案,實(shí)際上是需要綜合考慮多方面的因素的,比如開發(fā)周期、成本、軟件開發(fā)難易,甚至芯片是否好買等。

下一步我會(huì)再研究第一個(gè)方案的實(shí)現(xiàn),即CH551+KT6368A,后面大概率會(huì)用這個(gè)方案,原因大家應(yīng)該都明白。

作者:wuyage 來源:TopSemic嵌入式 在此特別鳴謝

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接收器
    +關(guān)注

    關(guān)注

    14

    文章

    2468

    瀏覽量

    71871
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264473
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    114

    文章

    5809

    瀏覽量

    170188
  • Switch
    +關(guān)注

    關(guān)注

    1

    文章

    533

    瀏覽量

    58221
  • HID
    HID
    +關(guān)注

    關(guān)注

    2

    文章

    130

    瀏覽量

    46606

原文標(biāo)題:一個(gè)藍(lán)牙實(shí)戰(zhàn)項(xiàng)目的掏肺總結(jié)

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于藍(lán)牙的便攜式GPS接收器模塊電路設(shè)計(jì)

    GPS藍(lán)牙接收器種便攜式、電池供電的手持設(shè)備,采用藍(lán)牙接口,通過無線技術(shù)將GPS 信號(hào)提供給具有藍(lán)牙接口的顯示裝置,能夠?yàn)橛脩籼峁┒ㄎ缓?/div>
    發(fā)表于 09-29 11:45 ?6087次閱讀
    基于<b class='flag-5'>藍(lán)牙</b>的便攜式GPS<b class='flag-5'>接收器</b>模塊電路設(shè)計(jì)

    基于BTM334的藍(lán)牙接收器設(shè)計(jì)

    藍(lán)牙模塊采用的芯片是高通(Qualcomm)的QCC3034,支持普通的SBC,AAC編碼,還支持高通自家的aptX,aptX-HD,aptX-LL編碼,保證了藍(lán)牙音頻的品質(zhì);亦可以通過USB連接電腦作為
    的頭像 發(fā)表于 02-02 10:08 ?3367次閱讀
    基于BTM334的<b class='flag-5'>藍(lán)牙</b><b class='flag-5'>接收器</b>設(shè)計(jì)

    #硬聲創(chuàng)作季 直插式藍(lán)牙接收器

    藍(lán)牙
    jf_27932003
    發(fā)布于 :2023年01月10日 20:48:11

    藍(lán)牙基礎(chǔ)應(yīng)用

    在下有個(gè)問題,向各位大咖請(qǐng)教!問題描述如下:我準(zhǔn)備做一個(gè)關(guān)于藍(lán)牙的應(yīng)用,設(shè)計(jì)個(gè)藍(lán)牙
    發(fā)表于 06-09 23:32

    自制有線音響藍(lán)牙無線接收器

    做了個(gè)藍(lán)牙接收器,全是廢物利用,藍(lán)牙模塊是以前DIY用過的,按鍵鼠標(biāo)鋰電池是廢舊POS機(jī)拆下來的,3.5音頻接口電腦主板拆的電源管理手機(jī)拆
    發(fā)表于 03-04 21:39

    設(shè)計(jì)用于DollaTek藍(lán)牙接收器的AS1711BT

    描述適用于 ReVox B760 和 B780 的藍(lán)牙適配器插入 Revox B780 或 B760 的 DolbyNR 插槽。設(shè)計(jì)用于 DollaTek 藍(lán)牙接收器 AS1711BT。它也可能適用于類似的模塊。要啟用它,請(qǐng)打開
    發(fā)表于 08-05 06:51

    藍(lán)牙耳機(jī)的接收器敏感度

     藍(lán)牙耳機(jī)的接收器敏感度 在保證達(dá)到所要求的誤比特率的條件下,接收所需要的最小輸入功率。接收靈敏度般用dBm來表示,它是以lm
    發(fā)表于 12-31 13:27 ?1254次閱讀

    小米藍(lán)牙音頻99元接收器發(fā)布 有線秒變無線

    這次發(fā)布的藍(lán)牙音頻接收器就是款將有線設(shè)備變?yōu)闊o線的藍(lán)牙設(shè)備,支持藍(lán)牙4.2技術(shù),最高傳輸距離為10米。
    發(fā)表于 07-07 14:36 ?1286次閱讀

    邏輯分析儀在USB藍(lán)牙接收器上的實(shí)際應(yīng)用分析

    孕龍邏輯分析儀在數(shù)字訊號(hào)中提供了多種串行總線譯碼模塊,本篇文章將針對(duì)USB藍(lán)牙接收器(Blue tooth dongle )進(jìn)行訊號(hào)實(shí)際測量。 USB測量治具 首先,先把邏輯分析儀的測
    發(fā)表于 10-20 11:33 ?0次下載

    簡單自制藍(lán)牙接收器

    本文主要介紹了種簡單自制藍(lán)牙接收器。藍(lán)牙接收器是指能接受傳輸方式為藍(lán)牙
    發(fā)表于 01-12 14:57 ?5.4w次閱讀

    小米藍(lán)牙接收器評(píng)測 同價(jià)位無敵手

    近日,小米科技發(fā)布了款名為“小米藍(lán)牙音頻接收器”的智能設(shè)備,采用藍(lán)牙4.2高速傳輸標(biāo)準(zhǔn),機(jī)身只有個(gè)
    的頭像 發(fā)表于 08-29 08:54 ?6.9w次閱讀

    魅族藍(lán)牙音頻接收器體驗(yàn) 有線耳機(jī)秒變藍(lán)牙耳機(jī)

    在前不久,魅族官方商城上線了款售價(jià)僅需0.5元的神秘新品,雖然不知道具體是什么產(chǎn)品,但還是有近千名網(wǎng)友購買。這之后這款新品也得到了曝光,它就是魅族藍(lán)牙音頻接收器,售價(jià)為89元。提前購買的網(wǎng)友也直呼真香。
    的頭像 發(fā)表于 05-29 10:16 ?5636次閱讀

    如何使用廉價(jià)的破損藍(lán)牙耳機(jī)制作藍(lán)牙接收器

    我現(xiàn)在有了個(gè)完全由重新設(shè)計(jì)而成的藍(lán)牙適配器否則會(huì)丟掉的耳機(jī)零件。您可能會(huì)說我為此項(xiàng)目花費(fèi)了$ 0,因?yàn)槲乙呀?jīng)擁有的切東西,否則將成為垃圾
    的頭像 發(fā)表于 11-11 11:19 ?1.9w次閱讀

    藍(lán)牙發(fā)射有什么作用,藍(lán)牙發(fā)射接收器的區(qū)別

    藍(lán)牙發(fā)射種能夠?qū)⒁纛l信號(hào)通過藍(lán)牙信號(hào)進(jìn)行無線傳輸?shù)脑O(shè)備。其主要作用是將電視、電腦、音響等設(shè)備的音頻信號(hào)傳輸?shù)蕉鷻C(jī)、音響等藍(lán)牙
    的頭像 發(fā)表于 02-10 14:41 ?6920次閱讀

    藍(lán)牙適配器、藍(lán)牙接收器藍(lán)牙發(fā)射傻傻分不清?

    藍(lán)牙接收器種設(shè)備,通常用于將非藍(lán)牙設(shè)備轉(zhuǎn)換為藍(lán)牙設(shè)備。藍(lán)牙
    發(fā)表于 02-02 10:23 ?8447次閱讀
    <b class='flag-5'>藍(lán)牙</b>適配器、<b class='flag-5'>藍(lán)牙</b><b class='flag-5'>接收器</b>和<b class='flag-5'>藍(lán)牙</b>發(fā)射<b class='flag-5'>器</b>傻傻分不清?
    RM新时代网站-首页