关于CH32V307 IAP在线升级时Flash读写的问题咨询

从下图的datasheet上看,Code FLASH地址应该是从0x0800 0000开始的区间,但是从IAP的demo程序代码看,自己编写的Bootloader应该是向0x0000 3000跳转去运行固件,也就是Code FLASH地址好像是从0x0000 0000开始的区间。

void SW_handler(void)

{

    //jump  UserCode

    __asm("li  a6, 0x3000");

    __asm("jr  a6");

    while(1);

}


我的问题是:我在自己编写的Bootloader程序中,从外部SPI Flash读取的固件数据应该写在哪个地址区间(假设Bootloader占用0x3000也就是12K的空间)?是0x0800 3000开始还是0x0000 3000开始?我现在发现如果往0x0000 3000开始的地址去写,调用FLASHStatus = FLASH_ErasePage(0x0000 3000)函数根本就擦除不了,虽然获得的FLASHStatus值是等于FLASH_COMPLETE。而如果我换成FLASHStatus = FLASH_ErasePage(0x0800 3000),擦除完后我读数据发现都是0xE339……之类的值,并不是预期的0xFFFFFFFF,所以也不知道这种情况正不正常。还望指教,谢谢!


X97VH_%ZB$RWXX@FVFOXEYB.png

image.png

你好,如图,读擦除flash后的默认半字为0xe339是正常的,并不是0xFFFF。这一块说明有在CH32V307用户手册提出,近期内该手册会发布更新到官网。


请问下,这个CH32V307 IAP在线升级demo,哪里有?

我这也需要用这个功能,通过网口UDP在线升级


您好,附件为一份网络IAP例程,可以参考一下。

icon_rar.gifCH32V307EHT IAP.zip



你好?非常感谢你的例程,我在操作TCP/IP创建服务器时,按教程操作,服务器IP显示0000,不知道为何?

image.png


您好,新建服务器之后,会自动生成网卡IP,此时才有效,如下图,如未生成,请刷新再尝试。

image.png

image.png


多谢你的帮助!

请问这个TCPIPDebug工具,可以公开源码吗?


您好,该软件目前不开源。


好吧,谢谢!

还有个问题请教?

这个IAP例程,是先把bin文件下载写入到网络下载的flash区0x18000,再从网络下载的FLASH区读取,写入APP区

为什么不直接把bin写入APP区,直接写入有什么风险?


您好,可以直接将bin文件写入到APP区,不会有风险


请教一下

  1. 通过 WCH-LINK 下载 IAP程序  (ip为 192.168.100.200)

  2. 通过IAP 升级用户程序 用户程序中也存在网络配置ip为 192.168.1.30

  3. 这样的话 上述两个ip会有影响吗?芯片有做区分的?


您好,您可以理解为IAP程序与用户程序是两个代码,运行IAP程序时的IP与用户程序的IP可以不一致。从IAP跳转到用户程序后,芯片使用的IP就是用户程序上面定义的IP。


image.png


新建tcp服务器的时候 我输入的是  192.168.100.115 最后生成的还是我本机的ip 192.168.1.216  这个还需要哪里配置一下?

如果,我把本机地址改成 192.168.100.115  并且启动服务,也连接不上客户端

image.png


您好,TCPIP_DEBUG工具,里面作为服务器的IP是您电脑网卡的IP。您如果连不上,可以使用wireshark抓包看一下,CH32V307的目的IP与端口号是否正确,CH32V307的IP是否与您的服务器在同一网段。


请教一下?

今天编译APP程序时,出现报错riscv-none-embed-objcopy:UdpClient.bin: Permission denied

不知道什么原因?改为hex正常,生成bin就报这个,不知道哪里问题?


您好,目前没有遇到过类似的反馈或者问题,方便的话,您可以将工程发送至yangy@wch.cn,我这边查找下原因


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