自定义更新DFU文档分享

yangzh · 735次点击 · 2023-05-26

在一些应用中,客户端可能不会使用 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();//重启固件,更新新固件

详细可参考附件。


用户自定义DFU同步说明1.6-202406143831.pdf
被收藏 2  ∙  0 赞  
加入收藏
点赞
2 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站