NRF52832 nRF Toolbox DFU升级详细流程_蓝牙uuid 0xfe59-程序员宅基地

技术标签: java  NRF52832  单片机  

                                                        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: 复位,自然会断开连接

 

升级完成

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YYGY731793898/article/details/108888494

智能推荐

Mongodb 3.4.24 复制集构建_mongoversion v3.4.24 replication: master-程序员宅基地

文章浏览阅读522次。​​​​​​准备3个节点,我这里的IP及hostname分别是:192.168.31.164 mongodb-master192.168.31.165 mongodb-slave192.168.31.167 mongodb-arbiter版本:mongodb-linux-x86_64-rhel70-3.4.24.tgz同时节点需要完成:关闭防火墙、SSH..._mongoversion v3.4.24 replication: master

字符集ISO-8859-1_iso-8859-1字符-程序员宅基地

文章浏览阅读968次。Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。_iso-8859-1字符

CQRS思路-程序员宅基地

文章浏览阅读89次。[code="java"]http://www.cnblogs.com/netfocus/p/5184182.html[/code]_汤雪华 阿里巴巴

毫米波点云生成论文 阅读笔记 | 3D Point Cloud Generation with Millimeter-Wave Radar_xinyu zhang-程序员宅基地

文章浏览阅读1.6k次。Kun Qian, Zhaoyuan He, Xinyu ZhangUCSDProceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies (ACM IMWUT)内容在CSDN、知乎和微信公众号同步更新Extremely low resolution due to its small form factor only generates intensity maps with strong ref_xinyu zhang

负数取模为正数_负数对正数取模-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏5次。(a % b + b) % b_负数对正数取模

录制ios 命令行工具_录制音频的简单命令行工具-程序员宅基地

文章浏览阅读182次。录制ios 命令行工具 机器学习和自然语言处理通过给人以声音来改变我们与设备的关系。 视障人士尤其从这些技术中受益,但大多数语音银行都把那些像我的母语Odia这样说英语的人基本抛在了后面。 当泰米尔语 维基百科上的 T. Shrinivasan开创了录音机语音教学工具时 ,他可能没有意识到他的开源工具对像我这样的用户有多大用处。 我在寻找一个简单的工具,该工具可以让我在短时间内记录大量单词,..._ios语音控制录制命令

随便推点

Mxnet学习笔记(3)--自定义Op_mxnet customop 训练慢-程序员宅基地

文章浏览阅读4.6k次,点赞3次,收藏5次。Mxnet CustomOp_mxnet customop 训练慢

javac命令和java命令_javac 和java 执行的文件名可以不一样吗-程序员宅基地

文章浏览阅读1.1k次。1、两个命令可以大写,也可以小写,因为window平台不区分大小写。2、java源文件文件名需与public类名一致,如果文件中无public类,文件名可以是任意标识符3、javac命令编译生成的class文件,有几个类就会生成几个文件4、格式:“javac –d 生成文件的保存路径 源文件路径”,建议总是写-d后面语句,好处就是如果原文件有包,会在当前目录自动生成包文件夹,如果..._javac 和java 执行的文件名可以不一样吗

@resource、@Autowired、@Service在一个接口多个实现类中的应用_@resource 接口与service-程序员宅基地

文章浏览阅读1.8w次,点赞10次,收藏15次。Spring在没有引入注解之前,传统的Spring做法是使用.xml文件来对bean进行注入,所有的内容都需要配置在.xml文件中,使配置和编程分离,却增加了可读性和复杂度。 Spring注解将复杂的配置文件用简单@xxx代替,当出现一个接口多个实现类的时候,究竟是用的哪个实现类呢?示例代码:public interface DataDao{}_@resource 接口与service

NTP相关命令解析_ntpq -p详解-程序员宅基地

文章浏览阅读1.7w次。导读由于ntp服务器时间的设置,网上错综复杂,资料很多,大家随便找个资料,这个不行,找另外的资料,总之对这个不是太了解,这里找了份资料,详细介绍了ntp。万变不离其中,明白了原理,ntp的配置就不在困难了。这里面解决了一些疑问:1.如何查看ntp是否配置成功?2.如何了解ntp列出的参数的含义?3.restrict关键字的作用是什么?# watch ntpq -_ntpq -p详解

通信原理第五、六章_将基带信号转换成极性码,映射-程序员宅基地

文章浏览阅读1.8k次。写在前面:黄色部分,p是书上有公式的要动手写的部分及对应页码文章目录第五章:基带传输系统第六章二进制:M进制:第五章:基带传输系统:波形变换–>信道–>接受滤波器–>抽样判决数字基带信号:短距离有线传输,频谱范围WB 从直流或低频延伸至若干倍1/T数字载波调制信号:无线,光纤信道,经过调制实现信号频谱搬移基带信号码型的设计原则:1.不含直流分量2.高频分量少..._将基带信号转换成极性码,映射

疱疹性结膜炎_带状疱疹经历的四个阶段 知乎-程序员宅基地

文章浏览阅读404次。疱疹性结膜炎特征为角膜上皮呈树枝状病变,与树叶的叶脉相似,末端呈球形.早期症状为异物感,流泪,畏光和结膜充血,随着反复复发,角膜知觉减退或消失,结果可能引起角膜溃疡和永久性角膜瘢痕形成. 盘状角膜炎累及角膜基质,是角膜深层的盘状局限性水肿和混浊,伴有虹膜炎,常在上皮性角膜炎后发生.盘状角膜炎可能代表机体对病毒的免疫反应.不是由反复的单纯疱疹病毒引起的不愈合或愈合极慢的上皮性缺损,被称为无痛性溃疡._带状疱疹经历的四个阶段 知乎