王昱顺 发表于 2024-11-19 16:27:34

手机也能对AI8051U, ISP/OTA升级用户程序了,使用用户系统区实现

手机也能对单片机下载程序了?
当然可以,AI8051U新推出的用户系统区功能使得 ISP/OTA 的编写变得无比简单。
内部通过软复位切换用户ISP/OTA程序和用户APP程序,逻辑地址被自动映射为实际地址,
无需担心地址偏移和中断跳转问题。两个程序相互独立。
先来看看视频演示效果,手机通过“USB串口调试助手”APP实现串口通讯,
和单片机的ISP/OTA程序进行通讯,并完成程序的刷写。
程序初始烧录为LED全亮,手机烧录的程序为高四位和低四位的灯间隔1S切换亮灭。


用户系统区功能介绍:用户自己完全独立的 User_ISP_BootLoader 区,Ai8051U, 兼容8位/32位指令 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区

ISP/OTA程序开源,并且楼下补充程序的详细解释,大家可以先试试。
手机APP官网链接:像素灵动
直接下载链接:


程序文件:
目前程序还拥有一点没完善的地方(比如说太大的文件还没写文件分割,暂时只能下小于缓冲区(1024byte)大小的程序),后面完善后进行更新

不过,程序通用性很强,只要是个串口都能更新。蓝牙串口,4G模块串口,433Mhz模块串口都可以使用,只需要适当调长串口超时中断时间即可。
目前超时时间设定为0.5S
并且还带有文件校验功能,保证万一bin文件传错了也不会进行下载,而是重新进入文件传输流程。

王昱顺 发表于 2024-11-23 22:03:18

追加测试:通过4G模块进行串口透传,实现远程ISP/OTA静默升级测试


王昱顺 发表于 2024-11-19 16:28:18

以下是测试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时机选择,例如做主机验证,密码验证等

小坤 发表于 2024-11-19 17:18:20

利害

邮箱 发表于 2024-11-19 18:46:58

{:4_250:}

soma 发表于 2024-11-19 19:32:46

这个实际上还是UART升级吧。

haiger 发表于 2024-11-19 19:58:07

{:4_250:}

王昱顺 发表于 2024-11-19 20:28:11

soma 发表于 2024-11-19 19:32
这个实际上还是UART升级吧。
是的,但是可以不需要STC-ISP进行下载,本示例是基于 UART,USB转串口。
通过更改ISP/OTA程序可以实现:
IIC升级、SPI升级、CAN升级、甚至是私有协议升级,十分灵活。

jwd 发表于 2024-11-19 20:55:15

{:4_250:}

王昱顺 发表于 2024-11-19 21:56:23

wnagming 发表于 2024-11-19 21:09
厉害厉害,期待蓝牙功能上马,这样连OTG都省了
这个只是一个演示,直接给串口接上蓝牙模块就可以下载了,程序都不用改的
因为这里面是单向传输(回传log并不影响下载),只要把文件信息发过去,
然后等一会再发个校验码就可以下载了。
本质是对传输没有任何要求的

autopccopy 发表于 2024-11-19 22:02:08

wnagming 发表于 2024-11-19 21:09
厉害厉害,期待蓝牙功能上马,这样连OTG都省了

支持。能无线升级就很方便!

110
页: [1] 2 3
查看完整版本: 手机也能对AI8051U, ISP/OTA升级用户程序了,使用用户系统区实现