Firefly开源社区

标题: flash擦除 [打印本页]

作者: thong    时间: 2015-6-5 09:25
标题: flash擦除
我只想存一个字节的数据,不想擦除太多,所以想问问这个函数擦除的最小单位是什么,最小可以擦除多少?block_erase_flash(uint32_t addr, uint32_t block_size, uint32_t n)
作者: FireBLE_blue    时间: 2015-6-5 11:33
QN902x 中的Flash  类似 W25X10 可以参考该ic datasheet
Sector Erase (4K-bytes)
就算你只改一个bit,为保证正确,也需要擦除一个扇区再写入,

建议使用nvds
作者: thong    时间: 2015-6-5 11:47
FireBLE_blue 发表于 2015-6-5 11:33
QN902x 中的Flash  类似 W25X10 可以参考该ic datasheet
Sector Erase (4K-bytes)
就算你只改一个bit, ...

NVDS有没有读写的方法,以下方法写一个字节不成功,读出来的为0,256字节又可以,不知道为什么?
uint8_t buffer[256];
uint8_t rxbuffer[256];
for (j = 1; j < 256; j++) {
        rxbuffer[j] = 0;
        buffer[j] = j;
    }
sector_erase_flash(0x4000, 1);
write_flash(0x4000, (uint32_t *)buffer, 1);
read_flash(0x4000, (uint32_t *)rxbuffer, 1);

作者: FireBLE_blue    时间: 2015-6-5 11:56
thong 发表于 2015-6-5 11:47
NVDS有没有读写的方法,以下方法写一个字节不成功,读出来的为0,256字节又可以,不知道为什么?
uint8 ...

看一下nvds 的 的api ,论坛上有个帖子也讲了,可以看一下,有读写接口
作者: thong    时间: 2015-6-5 16:20
FireBLE_blue 发表于 2015-6-5 11:56
看一下nvds 的 的api ,论坛上有个帖子也讲了,可以看一下,有读写接口

这个nvds的方法要怎么用,下面的方法无法正常写入?
uint8_t test1 = 0xf1,test2;
       
        nvds_tag_len_t len = 1;
         
        if(retu==nvds_put(NVDS_END_MARKER_TAG,1,&test1))
        {
       
          nvds_get(NVDS_END_MARKER_TAG,&len,&test2);
       
        }
       
作者: FireBLE_blue    时间: 2015-6-8 10:02
本帖最后由 FireBLE_blue 于 2015-6-8 10:56 编辑

方法一:
1->在“usr_config.h ”头文件打开宏定义
  1. #define CFG_NVDS_WRITE
复制代码
2->在enum NVDS_TAG 枚举中增加TAG ,如下所示:
  1. NVDS_TAG_WR_TESET         = 0x14,
复制代码
3->在enum NVDS_LEN 枚举中增加TAG的长度,如下所示:
  1. NVDS_LEN_WR_TESET         = 5,//这里看要求,并不是一定要这个数
复制代码
4->测试代码如下:
  1. uint8_t* test1="Helon",test2[5]={0};
  2. nvds_tag_len_t length=strlen(test1);
  3. if (NVDS_OK==nvds_put(NVDS_TAG_WR_TESET,length,test1))
  4. {
  5.         nvds_get(NVDS_TAG_WR_TESET,&length,test2);
  6. }
复制代码
5->测试结果:


方法二:
使用QBlue里的Quintic NVDS Configurator软件








欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1