请教下如何提高SPIM的写入速度
本帖最后由 goodjob 于 2021-3-1 22:31 编辑小弟打算将SPIM的FLASH用于储存一些可变更的用户资料,用户可以使用U盘模式直接将文件复制进来,现在USB MSD+SPIM功能可以正常工作,写入程序是按SPIM例程的,先擦除一页,然后按word写入,速度只有88K每秒。请教下是否有提高写入速度的办法?平时操作QSPI FLASH都是按page(256字节)写入的,貌似SPIM没有按页写入的功能?uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
{
uint32_t i;
uint32_t addr=Memory_Offset+SPIM_TEST_ADDR;
u32 tmp;
switch (lun)
{
case 0:
FLASH_ErasePage(addr);
i=0;
while(i<SPIM_PAGE_SIZE)
{
FLASH_ProgramWord (addr+i,*(u32 *)(Writebuff+i/4));
i=i+4;
}
break;
case 1:
break;
default:
return MAL_FAIL;
}
return MAL_OK;
}
要看速度是卡在哪儿了。 没有看明白楼主问的问题了。卡在哪里了? 速度是卡在哪儿了? 名字是啥样 发表于 2021-3-4 12:19
速度是卡在哪儿了?
测试发现页擦除时间很长,4K要110ms左右,按flash手册应该是50ms,打算换wq25试试。另外FAT的格式化,是把flash格成0x00,导致每次写入都需要擦除一次,将读写数据都取反后,格式化后第一次写入很快,重复写入需要擦除页的话就还是慢。 SPIM和SPI有什么区别呢?
自己的灌饼 发表于 2021-3-9 08:47
SPIM和SPI有什么区别呢?
SPIM应该就是QSPI,比SPI多几条线通信速度快。在AT32的应用上,是直接硬件映射到内存地址上的,读取的时候直接访问地址就可以得到数据,和内部FLASH操作一样。 检查速度,需要一点点测试,要有耐心的。 本帖最后由 goodjob 于 2021-3-10 19:28 编辑
答案很长吧 发表于 2021-3-9 12:14
检查速度,需要一点点测试,要有耐心的。
额,测试了几天就是擦除这块耗时比预计长一倍,但这个操作全部是硬件的内部控制的,没办法优化了 会不会是FLASH有质量问题或坏区太多了?
不要循环调用FLASH_ProgramWord 函数,自己封装函数,循环用在往地址写值阶段
页:
[1]