在一些应用中,客户端可能不会使用 Onmicro提供的基于BLE DFU 服务进行固件升级。 而希望通过自已的其它方式实现BIN文件下载(或者加密下载),如其它标准外围接口,UART,I2C,SPI,或者 Nb等模块传输入数据,等接收新固件保存到内部FLASH,启动自动更新固件的方式。 主要涉及4个步骤 1-【应用实现】待升级bin文件下载至缓冲区并校验完整性 (用户自己实现) 2-【应用实现】对缓冲区的bin文件,计算指定长度的CRC16值,并把 缓冲区地址,BIN文件长度,CRC16值 写入MBR区域。 3-【应用实现】产生复位 4-【Bootloader】复位后Bootloader将检查 MBR数据并校验指定缓冲的数据CRC16,如果通过,开始搬移数据至3000H位置。成功后,更新MBR记录。 1)接收存储新固件 2)校验新固件的CRC值,固件长度 uint8_t rd_data=0; uint16_t crc_val=0; uint32_t length = 0x22280;//固件长度,这里是通过HEX文件查看器查看到值 uint32_t i; for(i=0;i<length;i++) { sfs_enable(); sf_read(HS_SF,0,0x35000+i,&rd_data,1); crc_val = co_crc16_ccitt(crc_val,rd_data,1);//CRC值计算 } 3)通过接口函数写新固件到起始运行地址 // mbr sfs_enable(); // 96 固定标识 // 0x35000 新固件存放地址 // 26800 新固件长度 // 0x8a38 新固件CRC16校验码 mbr_write_part(96, 0x35000, 0x22280, crc_val/*0x7d6f*/); log_debug("REBOOT !!\n"); pmu_force_reboot();//重启固件,更新新固件 详细可参考附件。 |