上述是借助官方提供的ISP工具跳转BOOT区实现目标程序下载,下面介绍一下通过IAP实现定制“BOOT”,然后通过任意接口下载。 方式2:定制“BOOT”,任意接口完成下载 上述是通过CH559单片机自带的BOOT程序完成下载,下面介绍一下通过IAP实现定制“BOOT”,然后通过任意接口实现程序升级。真正达到接口自由、触发方式自由、协议自由。 首先编译目标程序,根据编译生产的hex文件大小,具体大小如图2.1.1所示,设置IAP在FLASH中存储的位置 file:/// 设置如下图2.1.2所示,“Start”起始地址到0xF000之间的存储空间不能小于图2.1.1中的code大小,为了便于操作起始地址最好设置成1K的整数倍,“Size”可以不设置,Keil会自动设置文件大小。如IAP的Code大小是1861B,所以设置IAP程序空间最小为(2+N)KB(N=0,1…..)。所以由0xF000地址(Data Flash起始地址)递减(2+N)KB(N=0,1……),即 0xF000-0x400*(1+N)(N=0,1..)=0xE800, 因为 BIN文件开头需要预留一个至少 4 字节空间给跳转指令,所以 IAP 程序设置地址为(0xE800+4); IAP 程序里面定义的起始存放地址依然是 0xE800,如: 地址设置如图所示: 编写用户程序时,我们需要在用户程序中实现跳转升级,同样需要定义函数指针类型变量,将改指针指向设置的起始地址。
下载 IAP 的程序的时候需要指定下载地址,下载地址跟程序中的跳转地址一致,如本例子用0xE800。第一次下载还是需要通过ISP工具,这里需要勾选启用IAP功能,设置起始地址。注意,设置的起始地址与 2.2 中描述相同,这里设置的是0xE804,与 IAP 工程设置的地址相同。在下面两个程序文件栏分别选择 IAP 程序 CH55IAP 和用户程序CH559User,点击下载。如图 所示: 打开 CH559IAPDemo 程序包,双击运行 WCHMCUIAP_WinAPP.exe。选择 USB 下载,选择程序文件CH559User。本例程中是用 Demo 板上按键 K4 进入 IAP 程序(按下 K4 键相当于 P1.3 接地),用户可根据需要自己修改别的方式。按下按键 K4 松开,LED5 熄灭,LED6 闪烁,并且频率较快,表示进入IAP 程序,应用程序 CH559WINUser 的设备列表中出现设备,如图 2.4.1 所示,点击下载,下载完成后自动复位执行用户程序。
3、程序源码