2023年9月26日 星期二

藍芽開發與PIXART

BT版本與各階層功能

藍芽產品大量用於消費性產品,例如心律手環、鍵盤、滑鼠、遙控器、遊戲手柄、具語音輸入等應用。依照時間進程可區分為。

  • BT < 4.0:經典BT(Bluetooth)。
  • 2012:BT 4.0:開始稱為BLE(Bluetooth Low Energy)所以,現在稱BT,就是BLE了。省電、3毫秒低延遲、AES-128加密,運用於計步器、心律監視器、智能儀表、傳感器物聯網。
  • 2013 BT 4.1:與LTE自動協調、提升設備連接速度、支持多設備同時連接。
  • 2014 BT 4.2:速度提升2.5倍、數據量於10倍、安全性提升。
  • 2016 BT 5.0:低功耗、速度提升X倍、室內定位輔助結合Wi-Fi精度小於1米的室內定位。
下圖是BLE與OSI相互對應。

從應用層面來說,只要照顧最上面幾層即可。藍芽ARM開發 連結  連結

  • Attribute Protocol (ATT):所有資料傳輸經過這層實現,定義了Client和Server屬性;Client就傳Request,Server傳response。每個屬性都有一個唯一的UUID,屬性將以characteristics and services的形式傳輸。
  • Generic Access Profile(GAP):設備搜尋、連接建立,定義了Role、Modes、Procedures及Security。
  • Generic Attribute Profile (GATT):GATT中定義ATT層的Service (服務)與Characteristics (特徵)兩個屬性。
  • App:由PROFILE和應用組成,完整列表(連結)。比較基本有下面幾個。

    • General Access Profile(GAP)
    • Service Discovery Application Profile(SDAP)
    • Serial Port Profile(SPP)連結,PIXART有範例。但IOS不支援。
    • General Object Exchange Profile(GOEP)
    • Human Interface Device Profile (HID) 連結

硬體:藍芽模組

手邊藍芽模組大多是純藍芽片,透過UART和主要MCU溝通:
搭配ARDUINO使用
不知哪來的開發板(連結)
小型化模組的開發板,透過JTAG線連結。

TI和NODIC都有類似產品,
AdaFruit:(連結 連結)。架構上,分別是Arduino和單獨的BLE晶片,兩邊用SPI溝通。
高通:QCA402X。

PIXART(原相)

PAR28XX系列(連結)。例如PAR2802QN,是基於Arm® Cortex® M0 核、512KB Flash、176KB SRAM以及10bits ADC、IR transceiver、Voice/Audio、7816 Interface、Cap Detector。藍牙低功耗5.2的SoC。

PIXART套件開發

工具:客製化GATT,確認專案的GATT是否需要修改,若有需要可透過下面AP進行修改,透過軟體可以快速生成C code,再導入至FW中。

點開profile左邊的箭頭,並找到 HID Service,展開 HID Service後修改或增加 characteristic、report descriptor、Report Value等等,完成後,直接產生對應的head file。

修改廣播的內容&裝置名稱

PXI_LINK Tool,EVBUtility.exe可透過UART 進行FW燒錄、規劃Flash空間、GPADC及RF相關測試以及各類參數設定。

PixArt OTA Utility,可透過BLE OTA更新FW。

量產燒錄器FWDLB,將PCBA與FWDLB連接上,按Reset(Start Button),即進行燒錄。


PIXART程式設計

開發環境為Keil uVision 5.38,安裝檔案MDK538a。安裝完畢後安裝PAR2860補丁,將PAR2860_Flash_V01.FLM 複製至C:\Keil_v5\ARM\Flash內(將之前PAR2860_Flash_Vxx.FLM舊版本移除)。設定ICE內容,共有三項。



Keil若製做的檔案超過限制,必須連結license server,設定位置在file->license management->flexnet license 下面,按EDIT,加入8224@Server07!  (因為要特殊IP才能執行,不怕,DINO維護)前面自然會打勾。

如果沒有連結FlexNet會有錯誤訊息

Keil自帶範例程式:

目前程式位置
C:\Users\KayjeanKu\Documents\will\PAR2860_SPP_20230928\PAR2860\ble_uart_service\Keil
專案檔案par2860_uart_service.uvoptx
程式位置在 PAR2860\ble_uart_service\main.c
功能順序分成四個步驟
  1. 收到MOBILE訊號
  2. 丟給MAIN MCU
  3. 收到MAIN MCU傳來的訊號
  4. 丟給MOBILE
    ble_init
        GAP_Evt_Callback
            //在螢幕上顯示PIN號碼,是個很特別的需求
            CommMgr_MCU_Command_Display_PIN

    ble_att_cb_set(&ble_att_read_cb, &ble_att_write_cb);     類似callback概念
        ble_att_read_cb
            //回饋BLE訊息
            pxi_gap_XXX
        ble_att_write_cb
            if(evt.hdl == VENDOR_DATA_WRITE_VALUE_HANDLE)
                //Receive LFSSPP frames from BLE
                //1 收到BLE傳來的訊息,解封包後,放入QUEUE
                ProLFSSPP_BLE_Rx_Process(evt.data, evt.sz);
                    ProLFSSPP_BLE_Ack_Process
                    //看起來,只要ProLFSSPP_BLE_Ack_Process
                    //就會在網路層次先終止這次對話
                        ProLFSSPP_BLE_Ack_Send
                    ProLFSSPP_Frame_Check
                    //把資料丟進QUEUE中,若要修改程式,不丟入QUEUE
                    //換成重新發起新內容
                        CommMgr_SPP_Request_Process
                            CommMgr_Command_Push_Queue
                                CommMgr_Command_Pop_Queue_By_Owner
                                CommMgr_IS_Owner_PROCESSING

設定command處理
    ProLFSSPP_Init();
    CommDisp_Init();
    CommMgr_Init();

進入大loop
    _sys_evt_task();
        CommMgr_IS_Owner_CMD_SEND
        CommMgr_Execute_Mode_Control_done
            CommMgr_MCU_Command_Mode_Control_Send
    _ble_evt_task();
    vendor_io_ctrl_task();
        //3 從MCU收到資料,確認要填滿
        CommDisp_UART_Rx_Process
            CommDisp_Frame_Check
                CommDisp_Data_Shift_Forward
                //Receive response message from main MCU
                // and pass the message to each module according
                // to previous send out command owner.
                CommMgr_Command_Rx_Response
                    CommMgr_SPP_Response_Process
                        ProLFSSPP_BLE_Response
                        //這邊將資料準備好了
                            //封裝好準備要送出的資料
                            Common_Build_Frame
                            //4 將資料送給BLE
                            ProLFSSPP_BLE_Response_Send
                                ble_tx_data
                    CommMgr_MCU_Response_Process
                    CommMgr_Command_Pop_Queue

        // Process UART TX 準備寫資料給MCU
        //2 將資料送給MCU
        CommMgr_Command_Tx_Process
            CommDisp_UART_Tx_Process

    pxi_ble_sched_execute();

BUILD
執行的位置Project->Build Target

DOWNLOAD
執行的位置,DOWNLOAD和BUILD是兩回事,並不會驅動BUILD,所以是分開來運作。

下面狀態列會顯示下載和驗證進度,(看不出來燒錄成功會有什麼訊息)


計畫是,能讓手機APP和BLE溝通
所以要改程式,收到之後立刻就傳出去

未來MCU只管對BLE發出訊息,不管接收
就沒有MCU被卡住睡覺的問題
那是另外的事情

把MCU的TX RX拉出來,單獨和目前這塊版子合在一起


藍芽開發板
1.接入USB電源,兩個燈閃爍。
2.接入ICE。(蝦皮買的ULINK2 realview)燒錄,對應的ICE設定如上。

移動裝置APP

Android

參考(連結)

IOS

參考(連結)

沒有留言:

張貼留言