请选择 进入手机版 | 继续访问电脑版
查看: 2523|回复: 4

[原创] [OKdo E1 - LPC55S69板子] 第三波:SPI flash 提速

[复制链接]
  • TA的每日心情
    开心
    2019-10-28 09:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    4

    主题

    35

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    357
    最后登录
    2022-9-29
    发表于 2020-12-1 10:52:49 | 显示全部楼层 |阅读模式
    本帖最后由 realjace 于 2020-12-1 11:01 编辑

    继上一篇:[OKdo E1 - LPC55S69板子] 第二波:外接SPI flash




          SPI Flash在使用时,往往是读写速度超高越好。SPI0-SPI7时钟速度只能达到37.5Mhz,即flash的理论读写速度是 4.6875MB/S 。
        实际操作中是不可能达到理论值的,所以只能想办法接近。下面列出几种SPI操作方式下的flash读写速度。



    1、Polling方式单字节读写512Bytes
    写:
    花费时间:7.326ms – 1.681ms = 5.6ms,可得写速度为:512bytes/ 5.6ms= 89.28 KB/S
    1.png


    读:
    花费时间:4.433ms,速度:512bytes/ 4.433ms = 112.79 KB/S
    2.png






    2、Polling方式连续读写512Bytes
    写:
    花费时间:3.477ms – 1.676ms = 1.801ms
    可得写速度为:512bytes/ 1.801ms = 277KB/S(相比polling单字提升3倍)
    3.png


    细看每写,有3/4时间被浪费了!即读速度还可提升4倍至 1108 KB/S
    4.png



    读:
    花费时间:839.51us,速度:512bytes/ 839.51us = 595.58 KB/S (相比polling单字提速5.2)

    5.png



    细看每次读取,有4/5时间被浪费了!即读速度还可提升5倍至 2977.9KB/S
    6.png


    3、DMA方式读写512Bytes
    写:
    花费时间:4.349ms – 1.676ms = 2.673ms
    可得写速度为:512bytes/ 2.673ms = 187KB/S(相比Polling连续写速度还低!)
    7.png


    细看每次写,数据是连续的!所以写的耗时原因是在于指令操作部分,而非定数据部分!
    8.png



    读:
    花费时间:377.8875us,速度:512bytes/ 377.8875us = 1323.145KB/S (相比polling单字提速11.7)
    9.png


    观察到,写地址部分占用了260ua,那么读取部分实际只用117.8875us
    得出DMA连续读取数据的速度是512bytes/ 117.8875us = 4241.331KB/S (相比polling单字提速38.5)
    10.png


    DMA连续读取数据时 时序:
    11.png




    4、DMA方式读写2510字节
    写:速度46KB/S
    12.png

    读:速度2639.48 KB/S
    13.png


    5、结论
        使用DMA连续读写flash速度是最快的,读速度可达到2MB/S以上,但写速度是比较慢的。


    附:flash测试程序

    1. void ext_flash_self_test()
    2. {
    3.     ext_flash_init();

    4.     #define __SIZE (2510)
    5.     uint32_t addr=0;
    6.    
    7.     ext_flash_erase(FLASH_CMD_SECTOR_ERASE_4K,addr);
    8.    
    9.     static uint8_t wbuf[__SIZE];
    10.     static uint8_t rbuf[__SIZE];
    11.    
    12.     memset(wbuf,0x15,sizeof(wbuf));
    13.    
    14.     addr=addr+100;
    15.     ext_flash_write(addr,sizeof(wbuf),wbuf);
    16.    
    17.     ext_flash_read(addr,sizeof(rbuf),rbuf);
    18.    
    19.     uint8_t check_ok=1;
    20.     for(int i=0;i<sizeof(rbuf);i++)
    21.     {
    22.         if(rbuf[i]!=wbuf[i])
    23.         {
    24.             check_ok=0;
    25.             PRINTF("err r=%x,w=%x,i=%d\r\n",rbuf[i],wbuf[i],i);
    26.         }
    27.     }
    28.     PRINTF("result : %s \r\n\r\n",check_ok? "check_ok":"check err");
    29. }
    复制代码


    更多代码: source-dma-spi.zip (5.2 KB, 下载次数: 10)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7089
    最后登录
    2023-4-20
    发表于 2020-12-1 11:19:24 | 显示全部楼层
    感谢分享!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2020-12-1 11:47:25 | 显示全部楼层
    DMA写入还有这个梗呢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3963
    最后登录
    2024-4-15
    发表于 2020-12-7 21:09:31 | 显示全部楼层
    结论不合理,DMA不是最快的,最快的是Polling + FIFO。DMA有仲裁机制的问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-28 09:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    4

    主题

    35

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    357
    最后登录
    2022-9-29
     楼主| 发表于 2020-12-10 22:56:35 | 显示全部楼层
    mgn 发表于 2020-12-7 21:09
    结论不合理,DMA不是最快的,最快的是Polling + FIFO。DMA有仲裁机制的问题

    哈哈,笔误。应该是DMA读是最快的,写我还没有研究出怎么搞最快。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-16 12:20 , Processed in 0.121005 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表