介绍
在实际生产中,为了不断产品优化,厂家常常遇到升级设备固件程序的情况,如果对用户手中的大量设备进行现场 ISP 升级,则需要大量人力与时间。
在网络飞速发展的时代,将终端设备接入到网络中可以有效地解决上述问题,厂家只需要将最新的固件放到指定的服务器上,设备通过网络远程访问服务器,自动下载更新固件程序。方便快捷,稳定可靠,尤其是在大批量升级中,优点显著。
CH563是一款带网络接口的单片机,可以广泛应用于各种嵌入式产品的开发,使用CH563可以很好的实现该方案:CH563作为用户的终端设备,通过TCP协议访问厂家的服务器,服务器上保存有最新的固件,CH563可以下载该固件,并进行升级。
方案简介
具体的操作流程可以看“CH563IAP升级使用教程V1.1”;
详细要点:
1. CH563 FLASH 0-4KB地址存放IAP代码,这部分固定存放,在升级过程中不会被擦除。4-64KB地址存放APP用户代码,IAP代码最后会跳转到用户代码执行。64-128KB地址存放待升级的代码。EEPROM 20-24KB地址存放两个字节的IAP升级标志 0X57 0XAB。
2. 升级的代码BIN文件由主机服务器通过TCP传给CH563,经过TransHexToBin软件转换的Bin文件前面有固定16字节长度的信息:
0-1:固定0XAA 0XBB ;2-3:两个字节的bin文件版本号,可以在软件中设置。
4-7: 4个字节的BIN文件长度(字节数),由软件算出。
8-11:checksum校验和;12-15:保留
如何将两个代码分开放入FLASH ,FLASH划分操作:
1. CH563有一个SCF文件,这是一个ROM分配的文件。
2. CH563的IAP程序因为是放在0-4KB的,所以SCF不需要进行修改。用户代码因为是从4KB(0x1000H),所以需要将ROM_LOAD 和FLASH_CODE修改到0x00001000始。
3. 因为APP用户程序被整体偏移了4KB,所以为了能够跳转到IRQ_Handler和FIQ_Handler里面,跳转就得分两步。第一步,IAP的启动文件里面先跳转到跳转IRQ_Handler这个命令的地址,正常这个命令的地址0x0018,因为用户程序偏移了4KB,所以变为了0x1018。同理,跳转FIQ_Handler这个命令的地址变为了0x101c。所以IAP程序的启动文件里面,需要将这两个中断的跳转的命令地址偏移0x1000。这样才能跳到正确的中断里面。
4. IAP程序的最后会有一个jumptoapp函数,里面执行的内容就是跳转到0x1000这个地址区运行。这样就完成了IAP程序跳转到APP用户程序。
例程包下载: