通过非接外设实现IAP升级
非接无线升级功能开发
非接升级基于的是IAP的功能,IAP在这里不赘述,网上资料很多。
开发流程:
1. 原理验证 2. 流程设计 3. 程序编写 4. 问题分析 5. 总结输出
一、原理验证
这是一个无线升级的功能,所以需要用到上位机,通过上位机向读卡器发送命令,读卡器通过非接发送升级数据,设备通过接受非接数据升级自身程序。
需要验证设备的TAG外设是否可以接受非接数据,我这里在实现这个功的时候没有按照IS014443A/B的协议取实现,自定义了通讯协议。但是由于升级使用的读卡器(也就是上位机控制的上位机)不是我开发的,这个上位机是按照ISO14443A协议写的,在回复读卡器的时候,为了要让读卡器可以识别我设备回复的数据,
- PCB字节要能保证,就是非接数据的第一个字节。
具体实现其实是第一个字节的最低位每次都要取反再回复,我是讲读卡器下行数据的第一个字节直接作为我设备回复的第一分字节。
2)上位机需要有一个激活流程,激活后才可以通信。
二、流程设计
1. IAP跳转
IAP介绍:
在嵌入式开发中或单片机开发中,为了实现离线升级(不是通过ISP和JTAG/SWD直接烧录程序,大多通过这个功能实现无线升级程序),一般程序都分为IAP+APP,APP中实现了主业务流程,IAP是用来给APP进行升级更新使用,两个程序都写在单片机的FLASH中。
IAP跳转APP可以通过程序掉电复位实现,IAP跳转APP需要设置特定的寄存器,选择好跳转地址,相关的中断向量表要进行重映射,对于APP的A段跳转B段(双份应用程序)的情况,也可以通过配置跳转寄存器实现。
程序下载过程涉及多个程序下载,需要将不同程序放置到设计好的地址,可以通过更改分散加载文件实现。
2. 升级流程
第一步:APP跳转IAP
设置升级请求标志位到Flash中,跳转至IAP后清除升级请求标志位。
第二步:开始升级
收到升级信号后,清除Flash中程序存在标志位。
第三步:擦除Flash
收到擦除指令后,按照擦除指令中要求的FLASH进行一次性擦除
第四步:写入新程序
根据上位机下发的指令,在指定地址写入新的程序
第五步:校验
将写入的程序读出算出CRC值和上位机下发的CRC进行比对,比对成功,更新程序存在标志位,允许跳转回APP。
补充说明
无论通过什么外设升级,只要调通了基本通讯,都可以按照以上升级流程实现,但是如果是蓝牙升级,为了保证连接不到断开,可以采用AB块的方式,先在A块程序中将B块程序写入FLASH中,跳转至B块中运行,对于特殊的芯片,无法任意设置跳转地址的话,可以通过IAP搬运B块程序至A块,在A块重新运行新程序。