whatcanitbe 发表于 2023-10-31 22:26:56

怎样才能使得stm32F103VC读写片内FLASH速度更快磨损更平衡?

如题,主芯片是STM32F103VC,读写一个结构体,大概50个字节,有个文件大概由70个结构体组成。
//结构体,大概50字节
struct
{

}ABC;


//文件,70个结构体
struct ABC   file_Rec;

//VCT6 FLASH页是2048个字节
//声明结构体
u8 Flash_m_pBuffer;


现在读结构体的函数是
//PageNum当前页
//StartPos    结构体开始位置
//DataNum结构体长度
//pData       从FLASH读出来结构体待存入区域的指针
void Flash_ReadPage(uint16 PageNum,uint16 StartPos,uint16 DataNum,void* pData)
{
    直接读;
}

现在写结构体的函数是
//PageNum当前页
//StartPos    结构体开始位置
//DataNum结构体长度
//pData       指向待写入FLASH数据区域的指针
void Flash_WritePage(uint16 PageNum,uint16 StartPos,uint16 DataNum,void* pData)
{
       直接读一整页到Flash_m_pBuffer;
       待写入FLASH数据填充到Flash_m_pBuffer对应位置;
      擦除整页Flash;
      将填充好的Flash_m_pBuffer回写到对应页;
}

如果仅限于读和写一个结构体没有问题
当读文件也没什么问题

问题出现再写文件的时候
我目前是这么写文件的
void writefile()
{
    int i;
    for(i=0; i<70; i++)
    {
      Flash_WritePage(page,start+i*50,50,&file_Rec);
    }
         
}
现在问题是写入70个结构,前50个结构就需要读一个页50次,擦除一个页50次,写入50次,再加上后面20个结构需要的读一个页20次,擦除一个页20次,写入20次
写一次文件不光费时,还需要对一页擦除写入50次,这显然缩减芯片使用寿命

有没有更好的实现可以大大减少擦除次数,加快写入速度

Himem 发表于 2023-10-31 22:33:07

直接用flashdb吧

https://www.amobbs.com/thread-5756553-1-1.html

kebaojun305 发表于 2023-11-1 09:03:41

stm 官方就有例子
页: [1]
查看完整版本: 怎样才能使得stm32F103VC读写片内FLASH速度更快磨损更平衡?