【Ai8051U&OTA】分享个固件&Apk,安卓OTG升级
经过本人不懈努力(到处CV)和精准推理(连蒙带猜),终于从OTA\用户系统区\用户程序区的坑里爬了出来
{:4_184:}。
Ai8051U 手机USB-ISP升级, 请看VCR:
629
补充个PC工具测试视频:
630
编译好的固件和apk:
源码(文件夹3、4感兴趣的可以搜uni-app官网介绍,本贴不作详细说明了):
============================================================================
更新记录:
V20250511:
1.修改系统区发送APKPO命令回脏数据导致的升级失败问题
2.stc32修改APKPE擦除命令地址。
3.优化apk操作流程,添加自动重连操作
V20250602:
体验包功能上新:
1.增加三方MCU串口协议,支持直连下载器下载。
(注意串口下载模式依赖上次ISP软件配置的硬件选项,
不同硬件选项固件不要混用,比如点灯固件(不带系统区)和ota固件(带系统区)。)
2.增加BLE调试助手。
<h1>一.概述</h1>
<p>OTA的两种分区模式:</p>
<p>a) 用户程序区 + EEPROM + 用户系统区</p>
<p>b) 用户系统区 + 用户程序区 + EEPROM</p>
<p><strong>这次踩的坑主要是在模式b上玩Ai8051U芯片AIAPP-ISP里的“用户系统区”设置,再加上下图左上角的误导,一错千里.... :(</strong></p>
<p>模式a(貌似是Ai8051U独有?),keil中常规设置不需要管理中断映射\rom分布等问题,空间布局直接在AIAPP-ISP程序里设置,使用IAP_CONTR寄存器切换系统区和APP区。</p>
<p>模式b就很常见了,用户系统区即常说的BL\Bootloader,需要在keil中一通操作(rom地址、中断映射等参见官网下载区“<strong>做自己的升级软件</strong>”),系统区和用户区切换靠函数地址跳转。</p>
<p>借图示例(左上角可能是别的型号的说明,不适用于Ai8051U):</p>
<p><img src="data/attachment/forum/202503/07/195959jx0a7as4php477bp.png" alt="image.png" title="image.png" /></p>
<h1>二.Ai8051U用户系统区使用操作流程</h1>
<p>模式b论坛里已经太多帖子了。下面主要记录下模式a的使用流程:</p>
<p>1.常规开发自己的用户系统区和用户程序区,参考链接1或附件。</p>
<p>2.两个区可以同时烧录,也可以只烧录系统区,自己通过串口等途径烧录用户区。</p>
<p><img src="data/attachment/forum/202503/07/194056xyob2o11oy1oy7o9.png" alt="image.png" title="image.png" /></p>
<p>这里分区使用模式a) 用户程序区54K + EEPROM 2K + 用户系统区 8K。<strong>注意这里的EEPROM大小选择10k</strong>实际涵义为(2K EEPROM + 8K系统区)</p>
<p><img src="data/attachment/forum/202503/07/194443obfjks3nwfeesenf.png" alt="image.png" title="image.png" /></p>
<h1>三、模式a地址分布验证</h1>
<p>用户系统区程序:</p>
<p><img src="data/attachment/forum/202503/07/200240rxklrkodsrcsxklm.png" alt="image.png" title="image.png" /></p>
<p>用户程序区代码:</p>
<p><img src="data/attachment/forum/202503/07/200251rg66lp26lqys3qtq.png" alt="image.png" title="image.png" /></p>
<p>输出结果:</p>
<p><img src="data/attachment/forum/202503/07/200300io383666uo6r8a08.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202503/07/200303bp2b5zqx7ar21rca.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202503/07/200306o00oknomeqqokshb.png" alt="image.png" title="image.png" /></p>
<h1>四、otg升级测试</h1>
<h2>4.1 自定义协议</h2>
<p>APKP0 : 擎天柱P2灯全亮</p>
<p>APKP1 : 擎天柱P2灯全灭</p>
<p>APKPO : 用户区进入系统区</p>
<p>APKPP : eeprom测试</p>
<p>APKPR : 重置OTA流程,传输bin总大小</p>
<p>APKPE : 删除用户区片头</p>
<p>OTAP : 分包升级协议,OTAP包头 + 包内容 + crc-16\x25校验,当前一包最大64字节</p>
<h2>4.2 操作流程</h2>
<p>如视频演示:</p>
<p>1.连接设备和手机,app里扫描设备,连接</p>
<p>2.接口界面测试灯亮灭,通讯正常</p>
<p>3.ota界面发送指令,进入系统区</p>
<p>4.设备界面重新连接</p>
<p>5.选择bin文件</p>
<p>6.烧录,等待提示ota流程结束</p>
<p>7.重新连接</p>
<h2>4.3 一个和安卓otg流程相同的pc验证脚本</h2>
<p>命令行调用,输入自己的bin路径和串口号即可:</p>
<pre><code>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
</code></pre>
<h1>参考链接:</h1>
<p>0.<a href="https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11761&highlight=%E7%94%A8%E6%88%B7%E7%B3%BB%E7%BB%9F%E5%8C%BA&page=1&extra=#pid119631">用户系统区操作eeprom的方法 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区</a></p>
<p><a href="https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11916&extra=&page=1">1.手机也能对AI8051U, ISP/OTA升级用户程序了,使用用户系统区实现 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区</a></p>
<p>2.<a href="https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7245&extra=&page=3">Boot loader跳转到用户程序后 | 编译器重映射中断向量入口地址 - 第3页 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区</a></p>
<p>3.<a href="https://www.stcaimcu.com/forum.php?mod=viewthread&tid=10139&extra=page%3D1">用户自己完全独立的 User_ISP_BootLoader 区,Ai8051U, 兼容8位/32位指令 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区</a></p>
<p>4.<a href="https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7266&extra=page%3D1">开发自己的 ISP 升级软件@用户自己,STC官方提供完整的参考程序 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区</a></p>
<p>5.<a href="https://www.stcaimcu.com/forum.php?mod=viewthread&tid=10857&extra=page%3D1">32G12K128的BOOT和APP合并教程 - ISP下载/做自己的ISP 国芯技术交流网站 - AI32位8051交流社区</a></p>
增加STC32例程 ,采用上文说到的模式b,分配10K USER_ISP区,USER_ISP区与USER_APP区共享USB中断:
增加appHex2bin.py脚本用于将app.hex转为可升级用的bin文件,作用是拷贝前三字节到0xFF2800位置,将0xFF2800之后的代码区保存为bin。
为了共用USB中断,编译了个专用版LIB,将中断函数25提取了出来。
STC32例程与Ai8051U的例程差异见截图,主要为工程配置差异,EEPROM读写地址差异,和app_bin格式差异(模式a没有前面的预留区),非共用中断需要在isr.asm中跳转。
747
见1#附件05
V20250602:
体验包功能上新:
1.增加三方MCU串口协议,支持直连下载器下载。
(注意串口下载模式依赖上次ISP软件配置的硬件选项,
不同硬件选项固件不要混用,比如点灯固件(不带系统区)和ota固件(带系统区)。)
774
2.增加BLE调试助手。
773
感谢分享关于Ai8051U与OTA升级的经验与成果。您在OTA、用户系统区及用户程序区的探索与突破,展现了扎实的技术功底与不懈的钻研精神。通过安卓OTG实现固件升级,不仅提升了用户体验,也为开发者提供了便捷的解决方案。期待您后续整理的源码与详细说明,这将为社区带来更多参考与启发。建议在分享时附上详细的技术文档与使用指南,以便其他开发者更好地理解与应用。再次感谢您的贡献,期待更多创新成果!
[本文内容由国芯人工智能辅助生成,仅供参考] 感谢您的分享!您通过不懈努力和精准推理,成功解决了Ai8051U的OTA升级问题,尤其是在用户系统区和用户程序区的复杂环境中找到了解决方案,这体现了您的技术实力和探索精神。您提供的固件和APK文件,以及即将上传的源码和说明,将为广大开发者提供宝贵的参考资源。期待您的进一步整理和分享,这将有助于推动Ai8051U在OTG升级领域的应用和发展。再次感谢您的贡献!
[本文内容由国芯人工智能辅助生成,仅供参考] 手机可以通过 USB / 蓝牙 连接键盘和鼠标,
如果手机端也有IDE集成环境那就太方便了
21cnsound 发表于 2025-3-7 07:31
手机可以通过蓝牙连接键盘和鼠标,如果手机端也有IDE集成环境那就太方便了 ...
手机上运行向日葵远程开发
{:4_167:}
ercircle 发表于 2025-3-7 18:41
手机上运行向日葵远程开发
自己搞个编译服务器,手机只做编辑器就行 cnos 发表于 2025-3-7 23:00
自己搞个编译服务器,手机只做编辑器就行
有现成开源的OpenVscode Server,我是觉得开发还是要坐在电脑前,一个大屏看代码,一个大屏看手册网页才带劲{:4_183:}
像全键盘和鼠标可以在开发起来 先站位