日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NRF52832 nRF Toolbox DFU升级详细流程

發布時間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NRF52832 nRF Toolbox DFU升级详细流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NRF52832 nRF Toolbox DFU升級詳細流程

?

升級前的流程:(此處待完善)

1、從機廣播

廣播數據包長度31, 藍牙MAC地址(e5:f6:b1:61:f8:04), BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE,服務UUID(0xfe59)

藍牙名稱:DFU-A01-00000000

?

2、主機掃描請求

3、從機應答主機掃描 數據為從機的MAC地址

4、主機請求連接

數據有:主機MAC, 從機MAC,訪問地址, CRC init, Window Size, Window Offset, Interval, Latency, Timeout, 睡眠時鐘精度

?

5、主機查找服務

?

?

?

開始升級

?

1、首選需要建立連接,且找到相應的服務,才能啟動升級流程。

?

2、APP按下升級鍵,onUploadClicked->start->onHandleIntent->performDfu ?啟動升級

?

3、主機根據情況請求MTU參數

APP: requestMtu(requiredMtu);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST

?

4、主機使能從機通知功能。

APP: enableCCCD ->onDescriptorWrite

NRF52832: GAP自動應答

?

5、主機選擇命令對象并讀取其數據,對象信息包含最大對象大小、偏移量和到目前為止整個對象的CRC32

APP: selectObject(OBJECT_COMMAND);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_command_req->on_cmd_obj_select_request

通知方式應答命令區的現有參數:大小、偏移、CRC

?

6、主機告知從機已發送數據包數,默認為0

APP: writeOpCode(mControlPointCharacteristic, OP_CODE_PACKET_RECEIPT_NOTIF_REQ);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

on_prn_set_request

?

7、主機創建一個數據包傳輸,包大小為0X87。

APP: writeCreateRequest(OBJECT_COMMAND, mInitPacketSizeInBytes);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_command_req->on_cmd_obj_create_request

GAP自動應答,通知方式應答成功

?

8、主機發送初始化數據包 Handle: 0x000d ?Handle: 0x000d 命令 嘗試3次

APP: writeInitData(mPacketCharacteristic, crc32);無應答寫

NRF52832: ble_evt_handler:BLE_GATTS_EVT_WRITE, on_write->nrf_dfu_req_handler_req_process->nrf_dfu_obj_op->

nrf_dfu_command_req->on_cmd_obj_write_request->nrf_dfu_validation_init_cmd_append

?

9、 主機發送寫請求 獲取剛發送數據的CRC值 Handle: 0x000f Value: 03 ?NRF_DFU_OP_CRC_GET-3

APP: checksum = readChecksum();

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_crc_request

GAP自動應答,通知方式應答偏移值,CRC值。

?

10、主機發送寫請求 執行 ?CRC校驗正確,則發的數據沒問題,可以執行。NRF_DFU_OP_OBJECT_EXECUTE-4

APP: writeExecute();

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_command_req->on_cmd_obj_execute_request->nrf_dfu_validation_init_cmd_execute

簽名認證

GAP自動應答,通知方式應答執行成功。

?

11、主機選擇數據對象 從機返回 數據包一包最大尺寸4k,偏移,CRC

APP: selectObject(OBJECT_DATA);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_select_request

GAP自動應答,通知方式應答包最大尺寸、偏移值,CRC值。

?

12、主機創建一個數據包傳輸,只有最后一包可能不是4k,其它包大小為4K。

APP: writeCreateRequest(OBJECT_DATA, availableObjectSizeInBytes);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_create_request->nrf_dfu_flash_erase

GAP自動應答,通知方式應答成功

?

13、主機發送升級數據包,前面每包為4K,每小包244字節 Handle: 0x000d ?Handle: 0x000d 命令 嘗試3次 無應答寫

APP: writePacket(mGatt, packetCharacteristic, buffer, size);//發送升級包數據,第一小包244字節

發送完后觸發onCharacteristicWrite,如果當前包未發送完,writePacket(gatt, characteristic, buffer, size);//繼續發送下一小包

NRF52832: ble_evt_handler:BLE_GATTS_EVT_WRITE, on_write->nrf_dfu_req_handler_req_process->nrf_dfu_obj_op->

nrf_dfu_data_req->on_data_obj_write_request->nrf_dfu_flash_store

?

14、主機發送寫請求 獲取剛發送數據的CRC值 Handle: 0x000f Value: 03 ?NRF_DFU_OP_CRC_GET-3

APP: checksum = readChecksum();

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_crc_request

GAP自動應答,通知方式應答偏移值,CRC值。

?

15、主機發送寫請求 執行 ?CRC校驗正確,則發的數據沒問題,可以繼續傳輸。NRF_DFU_OP_OBJECT_EXECUTE-4

APP: writeExecute(mProgressInfo.isComplete());

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_execute_request->on_data_obj_execute_request_sched

GAP自動應答,通知方式應答執行成功。

......

......

......

?

重復12-15傳輸數據包,直到剩下最后一包

?

16、主機創建一個數據包傳輸,最后一包2776字節

APP: writeCreateRequest(OBJECT_DATA, availableObjectSizeInBytes);

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_create_request->nrf_dfu_flash_erase

GAP自動應答,通知方式應答成功

?

13、主機發送升級數據包,最后一包2776字節,每小包244字節 Handle: 0x000d ?Handle: 0x000d 命令 嘗試3次 無應答寫

APP: writePacket(mGatt, packetCharacteristic, buffer, size);//發送升級包數據,第一小包244字節

發送完后觸發onCharacteristicWrite,如果當前包未發送完,writePacket(gatt, characteristic, buffer, size);//繼續發送下一小包

NRF52832: ble_evt_handler:BLE_GATTS_EVT_WRITE, on_write->nrf_dfu_req_handler_req_process->nrf_dfu_obj_op->

nrf_dfu_data_req->on_data_obj_write_request->nrf_dfu_flash_store

?

14、主機發送寫請求 獲取剛發送數據的CRC值 Handle: 0x000f Value: 03 ?NRF_DFU_OP_CRC_GET-3

APP: checksum = readChecksum();

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_crc_request

GAP自動應答,通知方式應答偏移值,CRC值。

?

15、主機發送寫請求 執行 ?CRC校驗正確,則發的數據沒問題,可以繼續傳輸。NRF_DFU_OP_OBJECT_EXECUTE-4

APP: writeExecute(mProgressInfo.isComplete());

NRF52832: ble_evt_handler:BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,on_ctrl_pt_write->nrf_dfu_req_handler_req_process->

nrf_dfu_obj_op->nrf_dfu_data_req->on_data_obj_execute_request->on_data_obj_execute_request_sched->

nrf_dfu_validation_post_data_execute->on_dfu_complete->nrf_dfu.c::dfu_observer(關閉連接)->

nrf_bootloader::dfu_observer(重啟)

GAP自動應答,通知方式應答執行成功。

?

16、遠程用戶(從機)終止連接

APP: 等待遠程用戶(從機)終止連接

NRF52832: 復位,自然會斷開連接

?

升級完成

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的NRF52832 nRF Toolbox DFU升级详细流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。