一. 先说说个人理解。
1.这个其实和其他MCU升级的方式类似。基本上都是把flash分为3个部分 bootloader,旧APP,新APP。
2.bootloader 其实也是向外发广播包,等待主机连接,带着DFU服务。它的作用就是把主机发过来的固件进行接收和校验。然后跳转执行。(这里说的可能不太准确)
3.在APP中加入DFU服务,这个就是和我们平时添加的服务一样,就是为了在APP中控制 设备跳转到bootloader中进行数据的接收和校验。
二。疑问
1.如果执行到第三步也跳转到了boot 中了,但是这个时候其实bootloader就是向外发广播包等待连接的状态。和主机是没有连接成功的啊。怎么会给从机传输新的固件呢?
- err_code = ble_dfu_buttonless_async_svci_init(); 这个函数在SDK手册里也没有找到解释。
- 还有在调试的时候
这个到底是什么!提示内存不对了?
4.一直以来的疑问!!!!!!!就是NORDIC的协议栈还有app程序还有bootloader程序这些在内存里面是怎么分的区? 程序是怎么检测出来的我设置的flash 起始地址 和 大小设置的不对的?我理解的是协议栈应该是固定的大小。既然下载到Flash中了怎么还会给APP程序发事件呢?