4148擦写Flash可以跨行操作吗
对于CY8C4148来说,OTA升级擦写Flash可以跨行操作吗?谢谢。 我的理解是升级部分的应用程序代码不能跨行写,不然PC的指针访问会出现问题。这个可以参考我们bootloader的底层代码库。对于CY8C4148微控制器,其OTP(One-Time Programmable)闪存可以进行跨行擦除和编程。这意味着在OTA(Over-The-Air)升级过程中,可以一次性擦除多个Flash行,而不仅仅是单个行。 PSOC4 对内部 flash 的操作是以 row 为单位进行的,具体擦除&烧录那个 row 是由固件层的 ProgramRow API 被调用的逻辑来决定的。默认的 bootloader 对 application 进行升级基本都是遵循逐行擦除&烧录的方式进行的,如果你需要不同的擦除烧录顺序,技术上是可行的,只是需要用户自己去对底层逻辑做调整, 操作Flash时可以调用如下函数来进行flash的擦除和写入:
uint32 CySysFlashWriteRow(uint32 rowNum, const uint8 rowData[])
其中rowNum是Flash Row number,是flash row size对齐的。rowData数组包含了要写入的数据,长度必须等于flash row size。
应用层可以实现所有地址的数据写入,需要按照上述API的要求对数据进行分包并逐个page写入即可。
你可以参考PSoC Creator中的Flash Example例子。
如下文档也给出了PSoC4系列的编程规范,供参考。
https://www.infineon.com/dgdl/Infineon-CY8C4xxx_CYBLxxxx_Programming_Specifications-Programming%20Specifications-v07_00-EN.pdf?fileId=8ac78c8c7d0d8da4017d0f66dca2562f
升级部分的应用程序代码不能跨行写 PSOC4 对内部 flash 的操作是以 row 为单位进行的 最好按照固有的层级进行编写下载 最好不要跨行进行擦写操作 OTA升级擦写Flash不要跨行操作 不可以的 在OTA(Over-the-Air)升级中,擦写Flash通常是一个关键的操作。对于大多数单片机和嵌入式系统,擦写Flash通常是以页(page)为单位进行的,而页通常是一个固定大小的内存块。因此,擦写Flash通常是不能跨页进行的 当进行OTA升级时,如果新固件的大小超过了一个Flash页的大小,那么擦写操作通常需要先擦除整个页,然后再将新的固件数据写入 如果整个页写,这可能会导致擦写操作的时间较长,同时也需要额外的空间来存储临时数据 在实际的OTA升级实现中,通常会考虑到擦写Flash的限制,采取一些策略来处理跨页擦写的情况,比如将固件分割成适当大小的块,或者使用双缓冲区技术来减少擦写操作的影响 我的理解是不能跨行操作,而且你说的跨行是啥操作啊? 不都是以页为单位吗?咋还跨行了呢? 不支持,这么做估计会乱的 你说的跨行没啥 意义吧,毕竟都被擦除了,之前的数据也没了,你夸行干啥啊 不建议这么弄,数据乱不说,而且你组成升级包也费劲啊
页:
[1]
2