T1-CHL 3.11.11的flash擦除、读写问题
目的:对保留扇区的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文件中声明这几个外部函数)