以下是测试ISP/OTA的流程,试验环境:AI8051U试验箱、手机、OTG转接头
首先是第一次下载准备:
选择STC-ISP为如下选项:
勾选用户系统区功能,设置为4K或以上,EEPROM需要大于等于用户系统区域大小
然后点击打开用户程序,载入”P0全亮.hex“文件,这个是初始文件,一会ISP/OTA需要覆盖掉这个文件
点击打开用户系统程序,载入”UART1.hex“文件,这个是ISP/OTA的程序,使用试验箱DMA串口1传输程序改的。
完成操作后通过正常串口或者USB下载到单片机内。
并且重新上电一次。
此时,P0的LED应该是全亮切没有变化的。
将TyepC接口的USB通过OTG转接头连接到手机(板子丝印J20)
手机打开USB串口调试助手APP。
从底部的设置tab页中,将波特率设置为115200(OTA程序设置,可以通过更改ISP/OTA程序实现其他波特率或者通讯方式)
然后插入OTG转接头到试验箱,此时使用的USB转双串口的AI8H2K12U,所以有俩串口,选CDC1即可
然后将通讯的协议改成ascii码格式,方便下载的时候查看日志输出
在这个界面按下试验箱的P33按键,即可触发进入ISP/OTA程序,表现为P0灯全灭,并且串口助手显示ready。
此时表示已经准备好了
通过发送文件选项,将bin文件”P0左右亮灭交替@22.1184.bin“进行载入
此时,下面进度条会显示此次发送的数据大小。此时需要将文件大小填入一次发送的字节数。
(因为并没有传输文件大小,全靠传输字节数量作为大小依据,填大了会空余补0,程序可能验证就不通过了)
点击发送,然后再返回。
此时,在对话框输入bin文件的24位累加和验证码,”add24:0027A3H“,log会自动打印比较结果,如果比较正确则会自动进行刷写和重启。
这个累加和,可以通过stc-isp的校验和显示进行查看
同时,hex文件也可以通过导入后保存数据为bin文件方便下载。
用户程序中,只需要添加一下代码即可进入ISP/OTA程序,可以随意选择触发情况,例如串口触发,其他的外设触发进入。
- void main(void)
- {
- P_SW2 = 0x80; // 使能访问外部XFR
- P0M1 = 0x00; // P00:双向 P01:双向 P02:双向 P03:双向
- P0M0 = 0x00; // P04:双向 P05:双向 P06:双向 P07:双向
- P4M1 = 0xbe; // P40:双向 P41:高阻 P42:高阻 P43:高阻
- P4M0 = 0x40; // P44:高阻 P45:高阻 P46:推挽 P47:高阻
- P40 = 0;
- P0 = 0x00;
- RSTFLAG |= 0x04;//必须添加,开启OTA就需要关闭复位引脚自动跳转
- while(1)
- {
- if(P33==0)IAP_CONTR = 0x28;//到用户系统区域
- }
- }
复制代码
其中,必须要添加的是
- RSTFLAG |= 0x04;//必须添加,开启OTA就需要关闭复位引脚自动跳转
复制代码
否则会导致正常启动的时候进入ISP/OTA程序而无法退出。
而
- IAP_CONTR = 0x28;//到用户系统区域
复制代码
则是复位到用户系统区域的指令,可以通过使用其他方式进行自由触发来实现ISP/OTA时机选择,例如做主机验证,密码验证等
|