单片机/MCU论坛
直播中

h1654155275.5669

7年用户 1028经验值
私信 关注
[问答]

IAP读取与CODE区域读取有什么区别?

使用N76E003单片机因为RAM区域不够用,然后把常量存在FLASH中,为什么不用IAP在线编程也可以读取它?想知道CPU是如何读取它的,读取FLASH不是需要IAP操作吗(APROMRead),存在code 区域,程序调用时并没有执行IAP操作啊,这样会不会出问题

回帖(6)

张勇

2018-11-30 10:13:22
IAP操作,只是在需要读取特定区域的时候,或者进行自编程,才是必须的,其余的FLASH,包括我们的代码,都是常规存储器操作就可以读取的。
比如我们编辑了一个表格数据,存储于CODE区域,对应的操作就是常规的间址读指令。
如果我们需要对一个特定的CODE区域进行数据改写,也就是所谓自编程,这才会用到IAP。但只要编程后,数据读操作就又是常规的了。
也有特定的读操作必须用IAP实现,那只是内部特定的单元,比如UID,这个就不在这里讨论了。
举报

h1654155275.5669

2018-11-30 10:13:40
修改FLASH数据通常需要很长时间,不像RAM那样可以实时操作。而且擦除、编程或读取FLASH数据需要遵循
相当复杂的时序步骤 read_APROM_BYTE(Address+i); 我看芯片手册上读取flash 也是有特定规则的啊,不按照这种方法使用常规方法读取也是可以的,但会不会不过用户必须遵循一定规则,以确保IAP正确执行,否则可能引起不确定的
结果,甚至损坏器件。
举报

张勇

2018-11-30 10:13:56
你必须明确,这里读操作是指在进入IAP模式后,比如编程后的校验,而不是常规程序运行段的CODE数据读操作。
所以,在完成IAP后,退出IAP模式,对已经编程过的部分,除了特定区域,完全不必考虑。
ISP就是这么做的。
举报

h1654155275.5916

2018-11-30 10:14:07
楼上大神说的有道理啊。code是编程烧录时候写入进去的。
IAP是程序自操作的。
code的代码只进行一次初始化,然后就是只读取操作,所以不是一回事了。
举报

王飞云

2018-11-30 10:15:03
貌似还真这样
举报

贾虎世

2018-11-30 10:15:11
IAP是写入,code是纯读取,两码事
举报

更多回帖

发帖
×
20
完善资料,
赚取积分