uint8_t sys_cfg_write(SystemConfigType *data)
{
uint8_t i = 0;
if(chip_flash_get_lock()== TRUE )
{
for(i=0;i<5;i++)
{
if(chip_flash_write( DSYS_CFG_ADDR , (uint8_t *)data , sizeof(SystemConfigType) ) == TRUE)
{
//log(INFO,"sys_cfg_write 第%d次写入成功\n",i+1);
chip_flash_release_lock();
return TRUE;
}
}
chip_flash_release_lock();
}
log(INFO,"内部FLASH 配置文件 写入失败\n");
return FALSE;
}
DSYS_CFG_ADDR是内部的地址0X0808E800
解锁(失败就返回)--写入(写成立刻返回)
看到是一个结构体指针,强转成u8*。
看看写入函数
uint32_t chip_flash_write( uint32_t addr , uint8_t* data , uint16_t len)
{
uint32_t ramsource = 0;
uint8_t buff[2048];
uint8_t rt = 0;
memset(buff , 0x00 , 2048);
memcpy(buff , data , len);
if( chip_flash_earse(addr) != FLASHIF_OK)
{
log(WARN,"FLASH 擦写失败\n");
return FALSE;
}
ramsource = (uint32_t)&buff;
if( ( rt = FLASH_Write(addr , (uint32_t*) ramsource , 512)) != FLASHIF_OK)
{
log(WARN,"内部FLASH写入失败 ,err = %d\n" , rt);
return FALSE;
}
return TRUE;
}
先把这个2048的页全部擦掉 在一次写入 再次使用了强转技巧
ramsource = (uint32_t)&buff;
FLASH_Write(addr , (uint32_t*) ramsource ---后面就是2048要/4了 u8--u32 是512!
所以用的时候就是:准备好全部数据,全部clear
一次写入