我现在直接使用SNV读写函数可以实现,但是可转存的数据量比较小,函数osal_snv_write( osalSnvId_t id, osalSnvLen_t len, void *pBuf) 中的每个id中可以存储的数据为252个字节(不知道为什么,自己测试得出的结果,虽然该函数的len类型是uint8_t,这个类型可以修改么?),然后就是有0x80–0x8F共15个id可供使用,也就是3780个字节(约3KB),上述我的理解对么?(貌似SNV里面还有为bonding预留的存储空间)
但是假如我想读写的数据量比较大(比如10KB)如何实现呢?一个flash page 4KB,假如使用函数 FlashProgram(uint8_t *pui8DataBuffer, uint32_t ui32Address, uint32_t ui32Count),这个ui32Address的地址空间范围哪些可控用户使用呢?还是直接参考编译以后生成的map文件中所给出的哪部分flash空间没有使用的话,该部分就可以使用?
summer xu:
空中升级固件里边用的是HalFlashWrite这个函数,不过你是不是需要考虑在写入的时候不能覆盖现有程序?没弄过,仅供参考。
xianglin dong:
回复 summer xu:
对啊,肯定不能覆盖啊,覆盖以后代码就挂了哦。我是为了存储用户数据的,急等TI官方给个解决办法啊
cedar_xuesong:
1: 在链接脚本里面保留对应的FLASH地址空间,留作数据用
2: 直接操作寄存器来擦除,写入FLASH数据
3: 写FLASH时,注意地址的问题,最后两bit不用
4: 读FLASH时,注意页切换机制,先切换内存页,然后再读FLASH数据
用DMA来读就可以了