Page 1 of 1

T1-CHL 3.11.11的flash擦除、读写问题

Posted: 2025年 May 22日 16:23
by feige2023

目的:对保留扇区的flash通过flash擦除、写入、读取、flash上锁、解锁接口,适配我们已有的KV管理模块
前提:
1.通过跟技术支持了解到,T1-CHL的保留扇区为:0X1EF0000X1F4000,4KB/扇区,且这部分允许通过原厂接口读写。
2.在写数据之前,我们KV模块都会先检查该地址内容是否为0xffffffff,如果不是,都会做其他相关处理,确保数据可写。
3.之所以没用官方DB模块,是基于2.3.3 CBU固件开发的时候,由于当时启用DB模块后,启动速度变慢,所以就用我们自己的KV库,在保留扇区中适配。
问题:
1.引用tkl_flash.h的API进行操作,写数据后,通过memcmp对写入地址进行校验,数据不匹配。参考如下代码

Code: Select all

/// @brief 写flash
/// @param addr 
/// @param pdata 
/// @param len 
static void fn_write  (uint32_t addr,void*pdata,int len)
{
  OPERATE_RET ret;
  ret = tkl_flash_unlock(addr,len);
  if(ret!= OPRT_OK){
    ELOG("unlock flash fail,ret:%d",ret);
  }
  ret = tkl_flash_write(addr,pdata,len);
  if(ret!= OPRT_OK){
    ELOG("write flash fail,ret:%d",ret);
  }
  ret = tkl_flash_lock(addr,len);
  if(ret!= OPRT_OK){
    ELOG("lock flash fail,ret:%d",ret);
  }
  if(memcmp((void*)addr,pdata,len)!=0){
    ELOG("write flash fail,data not equal,addr:%x,len:%d",addr,len);
  }
  
} /** 打印的日志如下:*/ [ E ]: unlock flash fail,ret:-4 [ E ]: lock flash fail,ret:-4 [ E ]: write flash fail,data not equal,addr:1f0000,len:16 [ E ]: unlock flash fail,ret:-4 [ E ]: lock flash fail,ret:-4 [ E ]: write flash fail,data not equal,addr:1f0010,len:20 [ E ]: unlock flash fail,ret:-4 [ E ]: lock flash fail,ret:-4 [ E ]: write flash fail,data not equal,addr:1f0008,len:4

2.通过T1/driver/flash/flash.h的API,进行读写,同样也是无法读写成功。(无法直接引入该头文件,需要如何引用哈?我直接通过extern 在C文件中声明这几个外部函数)


Re: T1-CHL 3.11.11的flash擦除、读写问题

Posted: 2025年 May 22日 17:43
by feige2023

经过测试发现,通过tkl_flash_write的,需要通过tkl_flash_read进行读取,用指针直接访问,读取的结果始终是0xFFFFFFFF。
是否是因为该地址空间的flash属于外部flash,非片内?


Re: T1-CHL 3.11.11的flash擦除、读写问题

Posted: 2025年 May 23日 10:45
by JSHANG
  1. tkl_flash_lock 和 tkl_flash_unlock 函数未实现,使用函数tkl_flash_set_protect关闭/打开保护, 如:
    tkl_flash_set_protect(FALSE);
    tkl_flash_write(addr, buf, len);
    tkl_flash_set_protect(TRUE);

    tkl_flash_set_protect(FALSE);
    tkl_flash_erase(address, real_size);
    tkl_flash_set_protect(TRUE);

  2. 擦写flash的地址和长度4K对齐