打印
[AT32F403/403A]

请教下如何提高SPIM的写入速度

[复制链接]
2218|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没有按页写入的功能?
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;
}


使用特权

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

使用特权

评论回复
板凳
里面有晴雨| | 2021-3-3 15:08 | 只看该作者
没有看明白楼主问的问题了。卡在哪里了?

使用特权

评论回复
地板
名字是啥样| | 2021-3-4 12:19 | 只看该作者
速度是卡在哪儿了?

使用特权

评论回复
5
goodjob|  楼主 | 2021-3-8 22:15 | 只看该作者
名字是啥样 发表于 2021-3-4 12:19
速度是卡在哪儿了?

测试发现页擦除时间很长,4K要110ms左右,按flash手册应该是50ms,打算换wq25试试。另外FAT的格式化,是把flash格成0x00,导致每次写入都需要擦除一次,将读写数据都取反后,格式化后第一次写入很快,重复写入需要擦除页的话就还是慢。

使用特权

评论回复
6
自己的灌饼| | 2021-3-9 08:47 | 只看该作者
SPIM和SPI有什么区别呢?

使用特权

评论回复
7
goodjob|  楼主 | 2021-3-9 09:57 | 只看该作者
自己的灌饼 发表于 2021-3-9 08:47
SPIM和SPI有什么区别呢?

SPIM应该就是QSPI,比SPI多几条线通信速度快。在AT32的应用上,是直接硬件映射到内存地址上的,读取的时候直接访问地址就可以得到数据,和内部FLASH操作一样。

使用特权

评论回复
8
答案很长吧| | 2021-3-9 12:14 | 只看该作者
检查速度,需要一点点测试,要有耐心的。

使用特权

评论回复
9
goodjob|  楼主 | 2021-3-10 17:48 | 只看该作者
本帖最后由 goodjob 于 2021-3-10 19:28 编辑
答案很长吧 发表于 2021-3-9 12:14
检查速度,需要一点点测试,要有耐心的。

额,测试了几天就是擦除这块耗时比预计长一倍,但这个操作全部是硬件的内部控制的,没办法优化了

使用特权

评论回复
10
zpwang| | 2021-8-24 13:47 | 只看该作者
会不会是FLASH有质量问题或坏区太多了?

使用特权

评论回复
11
084425| | 2021-8-29 20:29 | 只看该作者
不要循环调用FLASH_ProgramWord 函数,自己封装函数,循环用在往地址写值阶段

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

54

帖子

0

粉丝