求教,有关CH582F的OTA BLE升级的几个小问题

芯片:CH582F,参考文档:芯片资料包中的《WCH蓝牙空中升级(OTA BLE)》


【问题1】

参考文档中的方式一(备份升级方式),使用AssemblingFileTool工具生成了bin文件。这个文件需要使用什么工具烧写到片子上去?文档中说使用ISP工具进行下载,但是ISP工具不是只能下载hex文件吗?


【问题2】

按照文档说明,使用官网提供的安卓OTA APP进行升级,点击下载之后,片子log提示擦除失败。原因是因为在擦除之前会计算IMAGE_A、IMAGE_B、IAP等的理论地址,然后进行地址校验,结果校验失败了。这个地址的划分有文档说明吗?


望大拿指教,谢谢。

问题1:

isp烧录工具是可以烧录bin文件的https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html

问题2:

OTA的升级固件应该放入APP部分,也就是例程BackupUpgrade_OTA编译生成的hex,

emobile_2023-03-27_10-37-58.png



我之前用ISP工具升级过BIN文件,但是升级进去之后片子的状态是不正常的,但是只升级hex文件是工作正常的。


这个是我生成BIN文件的截图:

image.png


然后这个是生成BIN文件时的信息:

0000#11:28:41:718>> 开始将E:\code\rs_fashion\round_screen\CH583EVT\EVT\EXAM\BLE\BackupUpgrade_IAP\obj\BackupUpgrade_IAP.hex文件转成BIN格式

0001#11:28:41:751>> HEX已成功转成BIN格式(22246B=>454344B).

,BIN数据并保存在E:\CODE\RS_FASHION\ROUND_SCREEN\CH583EVT\EVT\EXAM\BLE\BACKUPUPGRADE_IAP\OBJ\BACKUPUPGRADE_IAP.BIN

0002#11:28:41:761>> 开始将E:\code\rs_fashion\round_screen\CH583EVT\EVT\EXAM\BLE\BackupUpgrade_JumpIAP\obj\BackupUpgrade_JumpIAP.hex文件转成BIN格式

0003#11:28:41:764>> HEX已成功转成BIN格式(34B=>4B).

,BIN数据并保存在E:\CODE\RS_FASHION\ROUND_SCREEN\CH583EVT\EVT\EXAM\BLE\BACKUPUPGRADE_JUMPIAP\OBJ\BACKUPUPGRADE_JUMPIAP.BIN

0004#11:28:41:768>> 开始将E:\code\rs_fashion\round_screen\CH583EVT\EVT\EXAM\BLE\Peripheral\obj\Peripheral.hex文件转成BIN格式

0005#11:28:41:798>> HEX已成功转成BIN格式(442243B=>157216B).

,BIN数据并保存在E:\CODE\RS_FASHION\ROUND_SCREEN\CH583EVT\EVT\EXAM\BLE\PERIPHERAL\OBJ\PERIPHERAL.BIN

0006#11:28:48:940>> 合并文件成功,文件另存为C:\Users\Administrator\Desktop\582.bin.bin(454344Bytes)


ISP(V3.4)升级的时候就是这样勾选的,然后下载:

image.png


我这个操作过程有错误的地方吗?还是说BackupUpgrade_IAP和BackupUpgrade_JumpIAP工程有需要配置的地方?


BackupUpgrade_IAP和BackupUpgrade_JumpIAP是没有问题的,你的第三个hex不对,你应该烧录我们的BackupUpgrade_OTA生成的hex,而不是peripheral例程,peripheral例程是一个单独跑的例程。


1111111


"你的第三个hex不对,你应该烧录我们的BackupUpgrade_OTA生成的hex,而不是peripheral例程,peripheral例程是一个单独跑的例程"

peripheral例程是我的项目,我把BackupUpgrade_OTA中有关OTA BLE的代码移植了过来。


从你的合成hex截图来看,你的地址并没有分配正确,是有冲突的,有两个文件的起始地址都是0,正确的方法是将你的功能移植到BackupUpgrade_OTA中来,当然,如果你就想要移植到peripheral例程,那么可参考此链接移植:https://www.cnblogs.com/debugdabiaoge/p/15975537.html


我严格按照链接中的文档进行操作,但是在合并文件的时候仍然出现APP起始地址为0的情况,如下图:

image.png


APP的Link.ld文件部分内容如下(我进行了扩容,APP区增大到了236K):

MEMORY

{

    FLASH (rx) : ORIGIN = 0x00001000, LENGTH = 236K /* 44K */

    RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K

}


APP的startup_CH583.S文件最后跳转的内容如下:

    la t0, main

    csrw mepc, t0


    j 0x40000 /* 0x10000 */

请问下,工具里面的“StartAddr”是由什么决定的?是从hex包里读出来的吗?那hex包里的起始地址又是根据哪个文件生成的呢?


起始地址就是根据LD文件来的,

emobile_2023-03-29_15-38-59.png

如果用方式一升级,只需要将OTA部分的代码移植过来,然后copy LD文件和启动文件就可以了,

如果是使用方式二升级:之前提供的链接没有涉及到扩容,可参考https://www.cnblogs.com/risc5-ble/p/16986897.html

也可以将整个EVT包发送至hy@wch.cn,我们帮忙看下。


手机升级HEX可以,BIN文件不行不知道什么原因!


蓝牙OTA升级HEX和BIN文件 - 沁恒微电子社区 (wch.cn)参考本帖


只有登录才能回复,可以选择微信账号登录