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和應用組成,完整列表(連結)。比較基本有下面幾個。
硬體:藍芽模組
手邊藍芽模組大多是純藍芽片,透過UART和主要MCU溝通:
不知哪來的開發板(連結)
搭配ARDUINO使用 |
小型化模組的開發板,透過JTAG線連結。
TI和NODIC都有類似產品,
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
功能順序分成四個步驟
- 收到MOBILE訊號
- 丟給MAIN MCU
- 收到MAIN MCU傳來的訊號
- 丟給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
參考(連結)
沒有留言:
張貼留言