打印
[技术问答]

关于HC32F4A0 flash 引导交换

[复制链接]
1265|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luoshiping|  楼主 | 2022-8-30 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   个人应用背景,实现以太网升级固件,

     按照HC32F4A0 手册 把flash 分为 2块,

      首先 第一次运行在第一块0x0000_0000h 地址,程序里面的创建 TCP 更新FLASH块 1,然后启动引导交换,重新启动,按照规格书,重启 FLASH 块 0 和 FLASH块 1 地址全部交换(OTP 功能未启用)

     第二次升级固件同理 用FLASH块 1 内的程序创建 TCP 更新去升级 FLASH块 0 的程序,关闭引导交换

   后面循环判断启动标志,升级对应的FLASH 块,这样可以实现不需要另外的bootload 实现固件更新,方便,

问题:

  手册里面没有说明2个问题,

1   引导交换后 ,flash控制寄存器操作是否需要交换?

2   在引导交换后  ,程序里面对flash读写的地址是否交换

比如 :引导交换后写 第一块flash地址 是0x0000_0000h 还是  0x0010_0000h?

经过多次实验测试的结果:(不一定完全对,但是确实实现了以上的功能)

    (1)   引导交换后 ,flash控制寄存器操作是不需要交换的,

                      比如引导交换后 擦除FLASH 块 0与解除FLASH 块 0 写保护的地址要用
                        (void)EFM_SectorCmd_Single(EFM_SECTOR_0, Enable);
                        (void)EFM_SectorErase(EFM_ADDR_SECTOR0);

                           同样获取状态寄存器一样的要用FLASH 块 0的

      (2) 但是引导交换后 ,在程序中读写操作是要交换的,FLASH 块 0  程序里面的操作地址需要用0x0010_0000h

                问题就在这里:如果在FLASH 块 1 中启动程序,更新FLASH 块 0的程序 ,

  寄存器控制状态要使用FLASH 块 0的,实际读写操作地址是0x0010_0000h;导致官方提供的库EFM_SingleProgram 根本不能使用,


使用特权

评论回复
沙发
毛大人跟班| | 2022-8-30 15:03 | 只看该作者
联系我帮您解决 XV  877378012

使用特权

评论回复
板凳
littlelida| | 2022-9-3 14:27 | 只看该作者
这是大神的节奏啊

使用特权

评论回复
地板
foxsbig| | 2022-9-13 21:18 | 只看该作者
这是玩出花了

使用特权

评论回复
5
软核硬核| | 2022-9-14 16:38 | 只看该作者
没玩过引导交互,感觉是大佬!

使用特权

评论回复
6
两只袜子| | 2022-9-15 11:32 | 只看该作者
会玩,佩服大佬

使用特权

评论回复
7
Bowclad| | 2022-9-16 19:00 | 只看该作者
玩出花了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

1

粉丝