一.概述
OTA的两种分区模式:
a) 用户程序区 + EEPROM + 用户系统区
b) 用户系统区 + 用户程序区 + EEPROM
这次踩的坑主要是在模式b上玩Ai8051U芯片AIAPP-ISP里的“用户系统区”设置,再加上下图左上角的误导,一错千里.... :(
模式a(貌似是Ai8051U独有?),keil中常规设置不需要管理中断映射\rom分布等问题,空间布局直接在AIAPP-ISP程序里设置,使用IAP_CONTR寄存器切换系统区和APP区。
模式b就很常见了,用户系统区即常说的BL\Bootloader,需要在keil中一通操作(rom地址、中断映射等参见官网下载区“做自己的升级软件”),系统区和用户区切换靠函数地址跳转。
借图示例(左上角可能是别的型号的说明,不适用于Ai8051U):

二.Ai8051U用户系统区使用操作流程
模式b论坛里已经太多帖子了。下面主要记录下模式a的使用流程:
1.常规开发自己的用户系统区和用户程序区,参考链接1或附件。
2.两个区可以同时烧录,也可以只烧录系统区,自己通过串口等途径烧录用户区。

这里分区使用模式a) 用户程序区54K + EEPROM 2K + 用户系统区 8K。注意这里的EEPROM大小选择10k实际涵义为(2K EEPROM + 8K系统区)

三、模式a地址分布验证
用户系统区程序:

用户程序区代码:

输出结果:



四、otg升级测试
4.1 自定义协议
APKP0 : 擎天柱P2灯全亮
APKP1 : 擎天柱P2灯全灭
APKPO : 用户区进入系统区
APKPP : eeprom测试
APKPR : 重置OTA流程,传输bin总大小
APKPE : 删除用户区片头
OTAP : 分包升级协议,OTAP包头 + 包内容 + crc-16\x25校验,当前一包最大64字节
4.2 操作流程
如视频演示:
1.连接设备和手机,app里扫描设备,连接
2.接口界面测试灯亮灭,通讯正常
3.ota界面发送指令,进入系统区
4.设备界面重新连接
5.选择bin文件
6.烧录,等待提示ota流程结束
7.重新连接
4.3 一个和安卓otg流程相同的pc验证脚本
命令行调用,输入自己的bin路径和串口号即可:
python .\main.py --bin_path .\Ai8051U-C251-APP-P27.bin --com_port COM36
python .\main.py --bin_path .\Ai8051U-C251-APP-P20.bin --com_port COM36
参考链接:
0.用户系统区操作eeprom的方法 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区
1.手机也能对AI8051U, ISP/OTA升级用户程序了,使用用户系统区实现 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区
2.Boot loader跳转到用户程序后 | 编译器重映射中断向量入口地址 - 第3页 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区
3.用户自己完全独立的 User_ISP_BootLoader 区,Ai8051U, 兼容8位/32位指令 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区
4.开发自己的 ISP 升级软件@用户自己,STC官方提供完整的参考程序 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区
5.32G12K128的BOOT和APP合并教程 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区