RL78 flash代码区最后一块能否操作

我目前使用的是R5F100LG芯片,实现了boot + app + app升级区。

boot在  0x0 - 0x7FFF

app 在 0x8000-0x13FFF

app 升级区在 0x14000-0x1FFFF

第一阶段,我验证成功的流程是:

1. boot下载数据到APP区

2. boot 跳转到APP

3. APP跳转回boot

能正常实现boot到APP的互相跳转,并且在APP端的中断响应都是OK的(串口收发,定时器),也就是中断向量表的映射是OK的。

第二阶段,实际我的程序目标流程是: APP检测到升级,会将数据下载到APP升级区,并设置相应标识。 然后跳回到boot,boot会判断标识,将APP升级区的数据拷贝到APP区,再重新跳转到APP,实现升级。

暂时为了方便验证,我就先在boot实现这个流程。 

1. boot将APP数据先下载到APP升级区

2. boot再将APP升级区的数据拷贝到APP区

3. boot跳转到APP

以上流程还是能正常跑通(也就是此时boot跳转APP是成功的,并且APP运行没有问题)。  但是这个时候,我让APP再跳转会boot就不行了, 并且我将机器断电后,重新上电,boot也无法执行。 就感觉boot区数据被改动了。

我一开始怀疑是flash地址溢出了,也就是我写APP升级区的时候(毕竟是擦除了flash的最后所有数据),程序弄错了,溢出后擦除了boot区,但是我查看了代码,并且打印了信息,确定只操作到了0x1FC00 -- 0x1FC7F。  也就是只操作了最后一块flash的前128字节数据。

后面我还是尝试了缩小APP来进行操作,如下分配

boot在  0x0 - 0x7FFF

app 在 0x8000-0x13BFF

app 升级区在 0x14000-0x1FBFF

此时再进行跳转,就全都正常了。  所以目前还是怀疑是代码区的最后一块flash不能操作。 但是我文档里没看到相应的说明,虽然在片上调试里,貌似代码区最后512字节好像不能操作。 但是我这个普通运行时,也不行,就不太理解。麻烦请您这边解惑下,我怕还是我的程序问题。

Parents
  • 多谢回复! 那再确认下,这部分就是完全不能提供给程序使用,并且在用户程序运行期间,也不能对最后一块进行擦除等操作,是吗。  因为我之前的理解是,在debug时才不能操作这部分空间,以为在不使用debug时,是不影响的, 所以才有此疑问。在datasheet里也没有明确表示,最后一块是禁止操作的,只是说debug时不行。

Reply
  • 多谢回复! 那再确认下,这部分就是完全不能提供给程序使用,并且在用户程序运行期间,也不能对最后一块进行擦除等操作,是吗。  因为我之前的理解是,在debug时才不能操作这部分空间,以为在不使用debug时,是不影响的, 所以才有此疑问。在datasheet里也没有明确表示,最后一块是禁止操作的,只是说debug时不行。

Children
No Data