[AT32F403/403A] 请教下如何提高SPIM的写入速度

[复制链接]
2901|15
 楼主| goodjob 发表于 2021-3-1 22:17 | 显示全部楼层 |阅读模式
spi, ui, se, ADDR, TE
本帖最后由 goodjob 于 2021-3-1 22:31 编辑

小弟打算将SPIM的FLASH用于储存一些可变更的用户资料,用户可以使用U盘模式直接将文件复制进来,现在USB MSD+SPIM功能可以正常工作,写入程序是按SPIM例程的,先擦除一页,然后按word写入,速度只有88K每秒。请教下是否有提高写入速度的办法?平时操作QSPI FLASH都是按page(256字节)写入的,貌似SPIM没有按页写入的功能?
  1. uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
  2. {
  3.         uint32_t i;
  4.         uint32_t addr=Memory_Offset+SPIM_TEST_ADDR;
  5.         u32 tmp;
  6.   switch (lun)
  7.   {
  8.     case 0:
  9.                         FLASH_ErasePage(addr);
  10.                         i=0;
  11.                         while(i<SPIM_PAGE_SIZE)
  12.                         {
  13.                                 FLASH_ProgramWord (addr+i,*(u32 *)(Writebuff+i/4));
  14.                                 i=i+4;  
  15.                         }
  16.       break;
  17.     case 1:
  18.       break;  
  19.     default:
  20.       return MAL_FAIL;
  21.   }
  22.   return MAL_OK;
  23. }


评论

@muyichuan2012 :测试发现页擦除时间很长,4K要110ms左右,按flash手册应该是50ms,打算换wq25试试。另外FAT的格式化,是把flash格成0x00,导致每次写入都需要擦除一次,将读写数据都取反后,格式化后第一次写入很快,重复写入需要擦除页的话就还是慢。  发表于 2021-3-8 22:15
@goodjob :可以把这个函数精简一下,FLASH_ProgramWord ();  发表于 2021-3-2 11:01
@muyichuan2012 :目前这个写入速度主频没关系,我使用HSI48Mhz的时候,速度也是88K/s,不知道是哪里的问题限制了速度  发表于 2021-3-2 09:52
@muyichuan2012 :主频设置了192  发表于 2021-3-2 09:44
主频是多少呢  发表于 2021-3-2 09:20
huangcunxiake 发表于 2021-3-3 13:25 | 显示全部楼层
要看速度是卡在哪儿了。
里面有晴雨 发表于 2021-3-3 15:08 | 显示全部楼层
没有看明白楼主问的问题了。卡在哪里了?
名字是啥样 发表于 2021-3-4 12:19 | 显示全部楼层
速度是卡在哪儿了?
 楼主| goodjob 发表于 2021-3-8 22:15 | 显示全部楼层
名字是啥样 发表于 2021-3-4 12:19
速度是卡在哪儿了?

测试发现页擦除时间很长,4K要110ms左右,按flash手册应该是50ms,打算换wq25试试。另外FAT的格式化,是把flash格成0x00,导致每次写入都需要擦除一次,将读写数据都取反后,格式化后第一次写入很快,重复写入需要擦除页的话就还是慢。
自己的灌饼 发表于 2021-3-9 08:47 | 显示全部楼层
SPIM和SPI有什么区别呢?
 楼主| goodjob 发表于 2021-3-9 09:57 | 显示全部楼层
自己的灌饼 发表于 2021-3-9 08:47
SPIM和SPI有什么区别呢?

SPIM应该就是QSPI,比SPI多几条线通信速度快。在AT32的应用上,是直接硬件映射到内存地址上的,读取的时候直接访问地址就可以得到数据,和内部FLASH操作一样。
答案很长吧 发表于 2021-3-9 12:14 | 显示全部楼层
检查速度,需要一点点测试,要有耐心的。
 楼主| goodjob 发表于 2021-3-10 17:48 | 显示全部楼层
本帖最后由 goodjob 于 2021-3-10 19:28 编辑
答案很长吧 发表于 2021-3-9 12:14
检查速度,需要一点点测试,要有耐心的。

额,测试了几天就是擦除这块耗时比预计长一倍,但这个操作全部是硬件的内部控制的,没办法优化了
zpwang 发表于 2021-8-24 13:47 | 显示全部楼层
会不会是FLASH有质量问题或坏区太多了?
084425 发表于 2021-8-29 20:29 | 显示全部楼层
不要循环调用FLASH_ProgramWord 函数,自己封装函数,循环用在往地址写值阶段
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部