IAP_03_ISP工程中操作用户APFlash地址问题
继IAP功能成功移植到AI8H1K17后,我开始在例程的基础上写自己的代码。官方手册中的描述:
我已经在我的用户AP代码设置为
我的疑问
在我的被升级设备的ISP工程中,需要对写入Flash的地址是否越界做判断:
我对Flash地址的操作,这样判断对吗?
还是说,主机要操作设备地址(读写擦除),要发送的地址是从0开始,而不是从0x1003 ?
在AI8H1K17的IAP功能移植成功后,针对用户AP Flash地址操作的问题,以下是专业的分析与建议:
1. Flash地址映射与用户AP代码的起始地址
在AI8H1K17的架构中,Flash地址空间通常分为Bootloader区域和用户AP区域。Bootloader区域通常位于Flash的低地址部分(例如0x0000到0x1000),而用户AP代码则从Bootloader区域之后开始(例如0x1000或更高地址)。根据您的描述,用户AP代码的起始地址设置为0x1003,这意味着用户AP代码从0x1003开始存储。
2. ISP工程中的地址操作
在ISP(In-System Programming)工程中,主机对设备进行Flash操作(如读写擦除)时,地址的发送需要根据实际Flash地址空间进行映射。以下是关键点:
地址的起始点:主机发送的地址应基于Flash的物理地址空间。如果用户AP代码从0x1003开始,那么主机在操作用户AP区域时,发送的地址应从0x1003开始,而不是从0x0000开始。这是因为0x0000到0x1002的地址空间可能属于Bootloader区域,直接操作这些地址可能导致Bootloader代码被破坏。
地址越界判断:在ISP工程中,对写入Flash的地址进行越界判断是必要的。判断逻辑应基于用户AP代码的实际存储范围。例如,如果用户AP代码存储在0x1003到0xFFFF的地址范围内,那么主机发送的地址应在0x1003到0xFFFF之间。如果地址超出此范围,应视为越界并拒绝操作。
3. 具体实现建议
在您的ISP工程中,可以按照以下步骤实现地址操作与越界判断:
1. 定义用户AP地址范围:明确用户AP代码的起始地址(如0x1003)和结束地址(如0xFFFF)。
2. 地址映射:主机发送的地址应基于用户AP的起始地址进行偏移。例如,如果主机希望操作用户AP区域的第一个字节,应发送地址0x1003,而不是0x0000。
3. 越界判断:在接收到主机发送的地址后,首先检查该地址是否在用户AP地址范围内。如果地址小于0x1003或大于0xFFFF,应返回错误并拒绝操作。
4. 示例代码
以下是一个简单的地址越界判断示例:
```c
define USERAPSTARTADDR 0x1003
define USERAPENDADDR 0xFFFF
bool isaddressvalid(uint32t address) {
return (address >= USERAPSTARTADDR && address
[本文内容由国芯人工智能辅助生成,仅供参考] 应该从1000H开始擦除,前4K是用户ISP(bootloader)区,不应在用户ISP程序中擦除(不能自己擦除自己)
如需更新用户ISP程序,需要按照官方下载方式重新下载(使用系统ISP区更新用户ISP区和用户AP区,系统ISP区用户无法访问,所以不会变黑砖)
DebugLab 发表于 2025-4-14 18:35
应该从1000H开始擦除,前4K是用户ISP(bootloader)区,不应在用户ISP程序中擦除(不能自己擦除自己)
如需 ...
好的,这个我清楚了,擦除从1000H开始擦,那么写入Flash也是从1000H开始写入吗?还是从1003H开始写入? zhouq 发表于 2025-4-14 18:43
好的,这个我清楚了,擦除从1000H开始擦,那么写入Flash也是从1000H开始写入吗?还是从1003H开始写入? ...
擦除以扇区为单位,如1000H~1002H不需要改变,也要先擦除再写回去
页:
[1]