2011年8月28日 星期日

BlueTooth要怎麼進測試模式要怎麼搞-2

  • 3. 找新方向想想可樂果 K個data sheet先

Vendor給的文件 建議最好是照順序看  前兩份需要好好理解後面才可以知道怎麼下
1.) 這個在介紹HCI command的格式 是怎麼做的 然後最主要是介紹怎麼加入自訂格式
HCI Extensions (bcore-an-009Pb).pdf
2.) CSR他們家自己自訂的格式 該格式叫做BCCMD
BCCMD Protocol (bcore-sp-002Pc).pdf
3.) 介紹CSR他們家所有的BCCMD指令集 這份是工具書所以大概知道可以查到什麼就好了
BCCMD Commands (bcore-sp-005Pe).pdf

此外還建議可以看看以下這幾個參考


不知道什麼叫做HCI可以看看人家寫的說明
http://www.palowireless.com/infotooth/tutorial/hci.asp#Bluetooth-defined Host Controller Transport Layers

初步介紹BT跟HCI的關係
http://blog.csdn.net/evilcode/article/details/5713847

可以初步理解一下HCI command的格式
http://kunyichen.wordpress.com/2006/11/28/bluetooth-hci-data-format/

HCI command的指令集
http://www.lisha.ufsc.br/teaching/ish/ine5346-2003-1/work/bluetooth/hci_commands.html




  • 4. 直接動手玩玩看

看完了相關介紹 + BT是ok的 + hcitool也有了
這時候可以來玩玩看了


可以直接複製貼上試試看
hcitool cmd 0x3f 0x00 0xc2 0x00 0x00 0x09 0x00 0x34 0x12 0x1a 0x28 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00



如果有看完之前的資料大概就知道 這個要幹嘛了
為了讓希望快速上手的人明白 稍微解釋一下好了
第一行是 HCI extensions的格式說明 其實HCI ext.的格式裡面還有一個欄位是長度 不過我試過了hcitool自己計算這個長度所以並不需要
第二行是說明 BCCMD的格式說明 因為BCCMD每一家廠商都會不一樣 所以格式也不一定就長降子
真的必須在console下的指令式第三行
OGF = 0x3f 這個值是HCI command保留給各家廠商使用自己的格是用的 所以後面如果要加上vendor-spec.的格式就要用這個值
OCF = 0 ; Payload description (PLD) = 0xc2 快速路門不需要懂這個寫降子就對了
接下來的BCD.TYP 就定義在CSR的"BCCMD Protocol (bcore-sp-002Pc).pdf"裡面
BCD.LNG 是指BCCMD的長度 BCCMD的格是很多樣有8-bit 16-bit 32-bit這裡的是16-bit所以 長度是9 (header=5 PL=4)
BCD.SN 是package的流水號 流水號只是要check用的所以只要不重複就沒問題了
BCD.VID 是command set的ID 這個去查BCCMD的data sheet就知道是要做什麼了 0x281a請參考一下這張圖
BCD.STS 是下了command之後的狀態 只要是零就是很滴
BCD.PLx 是各command的參數 根據command的需求而帶進去的參數




由這張圖看來就知道 事情很順利的弄好了 HCI Event有回覆了
0x00 0x03









  • 5. 看一下別人的心路歷程


此外還有些參考到的資料
Nelson研究BT的心路歷程 (公司內部的wiki 外人應該是看不到才對)
http://wiki.royaltek.com/index.php/Verify_bt

Nelson之前研究BT的心路歷程 (Nelson個人的部落格)
http://nelsonchunglife.blogspot.com/search/label/bluetooth

BlueTooth要怎麼進測試模式要怎麼搞-1


  • 0. 故事是醬子滴 

根據CSR的說法要進test mode本來是可以用SPI << 這個最值觀
很可惜我們HW並沒有預留SPI所以沒搞頭
再根據CSR的說法用UART也可以 << 這個他們自己也沒試過
很可惜我們HW也沒預留 所以只能用USB直接來了

對於USB不熟 + HCI不熟 + BlueTooth不熟的人來說很適合玩玩看

對於怎麼對USB直接下command其實我也不太了解
不過好像已經有人訂出醬子的規格了
所以也不需要知道人家怎麼做只要找到對的工具應該就可以直接來了
查來查去好像似乎有個工具叫做"hcitool"的東西
前情提要到此 故事本文要開始囉




  • 1. hcitool

從Nelson的wiki裡 找到了些資料
原來android已經把hcitool包進去了

hcitool的指令集
Commands:
        dev     Display local devices
        inq     Inquire remote devices
        scan    Scan for remote devices
        name    Get name from remote device
        info    Get information from remote
        spinq   Start periodic inquiry
        epinq   Exit periodic inquiry
        cmd     Submit arbitrary HCI comman
        con     Display active connections
        cc      Create connection to remote
        dc      Disconnect from remote devi
        sr      Switch master/slave role
        cpt     Change connection packet ty
        rssi    Display connection RSSI
        lq      Display link quality
        tpl     Display transmit power leve
        afh     Display AFH channel map
        lp      Set/display link policy set
        lst     Set/display link supervisio
        auth    Request authentication
        enc     Set connection encryption
        key     Change connection link key
        clkoff  Read clock offset
        clock   Read local or remote clock
        lescan  Start LE scan
        lecc    Create a LE Connection
        ledc    Disconnect a LE Connection



  • 2. 先來試試看有什麼裝置


# hcitool inq
hcitool inq
Inquiring ...
        E0:F8:47:1E:4D:77       clock offset: 0x25f7    class: 0x3a010c
        00:10:60:E2:A6:29       clock offset: 0x2dae    class: 0x020104
        24:21:AB:9A:61:1B       clock offset: 0x48ad    class: 0x5a0204
        00:16:CF:E3:8D:94       clock offset: 0x6b24    class: 0x00010c
        00:1C:A4:7F:F8:0F       clock offset: 0x49ae    class: 0x520204
        74:F0:6D:C4:81:88       clock offset: 0x34db    class: 0x3e010c
        00:16:CE:DC:DB:1D       clock offset: 0x2f3a    class: 0x3e010c
        00:1D:60:3B:81:79       clock offset: 0x4407    class: 0x1c010c
我的還蠻順利的HCI似乎是通的裝置都找得到
不過由wilki裡面看來Nelson似乎一直找不到device
去問了一下Charles 他提到之前Nelson遇到的情況是USB沒透過Hub直接拉到BT
這跟公板的作法不一樣 所以driver一直起不來 現在起得來的原因是我們的版子也上了Hub
故事看到這裡Nelson似乎跟的我情況不一樣 他在wiki上面的紀錄幾乎都是在處理找不到裝置這件事