微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于大数据量转存至内部FLASH的问题

关于大数据量转存至内部FLASH的问题

时间:10-02 整理:3721RD 点击:

    我现在直接使用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空间没有使用的话,该部分就可以使用?

空中升级固件里边用的是HalFlashWrite这个函数,不过你是不是需要考虑在写入的时候不能覆盖现有程序?没弄过,仅供参考。

对啊,肯定不能覆盖啊,覆盖以后代码就挂了哦。我是为了存储用户数据的,急等TI官方给个解决办法啊

1: 在链接脚本里面保留对应的FLASH地址空间,留作数据用

2: 直接操作寄存器来擦除,写入FLASH数据

3: 写FLASH时,注意地址的问题,最后两bit不用

4: 读FLASH时,注意页切换机制,先切换内存页,然后再读FLASH数据

用DMA来读就可以了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top