SPI读写SD卡速度有多快?
创始人
2024-05-31 20:52:55
0

SD卡是一个嵌入式中非常常用的外设,可以用于存储一些大容量的数据。但用单片机读写SD卡速度一般都有限(对于高速SD卡,主要是受限于单片机本身的接口速度),在高速、实时数据存储时可能会有影响。但具体速度可以达到多少呢,今天就来实际测试一下。

SD卡一般有两种常用的接口SPI和SDIO,SDIO又有1线和4线之分。很多单片机没有SDIO接口,但SPI接口就比较常用,今天主要来测试一下SPI接口读写SD卡的速度,主要是写入速度。

测试条件:

单片机:STM32L433CCT6

编译环境:MDK 5.30+HAL库

SD卡:32Gbit SDNAND,型号:米客方德MKDV32GCL-STH

文件系统:FatFS R0.12c

1.单纯SPI接口测试(非DMA)

我们知道,想SD卡之类的Flash存储器,一般都是按扇区擦除整块数据。因此每次写入字节数是扇区整数倍时,效率会比较高。同时,每次写入数据时,都需要先发送一些SD卡的指令,所以单次写入数据量越大,平均速度也就越快。了解了这些,我们就知道如何进行测试了。

首先,SD卡底层驱动使用的是HAL库函数,单字节读写,没有任何改动和优化:

uint8_tSPI_ReadWriteByte(uint8_t TxData)
{ uint8_t RxData = 0;HAL_SPI_TransmitReceive(&hspi3,&TxData,&RxData,1,100);return RxData;
}

接下来,我们先确定SPI和时钟频率多少合适,经过测试,发现20MHz的时钟频率比较合适,10MHz时读写速度会降低,再高的时钟频率对速度的提升也很小。因此我们这里用20MHz的时钟。

然后我们分别测试单次写入4KB、8KB、16KB时的速度为多少,测试结果如下:

可以看到,单次写入数据量越大,平均速度就越快。当单次写入数据达到32KB时,速度提升不明显。而且一般单片机内部RAM缓存也有限,单次写入16KB是一个比较合适的选择。

看到这个不到100KB/S速度,我还是有的不敢相信的,毕竟20MHz的时钟,理论上速度可以达到2MB/S左右,考虑到一些文件系统等协议的消耗,能到1/3差不多,那也得600多KB,现在的速度差距有点大。

当然,这个使用的HAL库函数有关,HAL_SPI_TransmitReceive函数效率比较低,内部做了大量的判断等操作,而且单字节传输也严重影响效率。如果自己优化一下,相信效率会有很大的提升。有兴趣的小伙伴可以试试。我们这次其实主要是测试SPI+DMA的速度,所以就不在这里纠结了。

2.SPI+DMA接口测试

DMA可以在外设和内存之间搬运数据,而不需要CPU的参与。其优势在于大量数据传输时,比如SD卡读写、SPI接口的液晶屏刷屏等。如果只是读写几个字节的数据,比如一些SPI接口的AD、DA等,DMA的优势就不明显。

因为SPI接口的设备一般都不是纯数据传输,都要配合一些指令等。所以即使使用DMA,也是要等待DMA传输完成再进行其它操作。当然这期间CPU可以通过中断方式去处理一些其它事情。

SPI+DMA写数据函数如下,使用的也是HAL库,没有进行优化。


int8_t SD_WriteBuffer_DMA(const uint8_t *TxData, uint16_t Size)
{uint32_t i = 0;          // 循环变量SPI3_DMA_Flag = 0;SPI_TransmitReceive_DMA(&HSPI_TF, (uint8_t*)TxData, txrxdata, Size); /* 等待DMA传输完成 */while (1){if(SPI3_DMA_Flag == 1)break;i++;if (i > 0xFFFFFF){return 1;  /* 超时退出 */}}return 0;
}

以向SD卡写数据为例,需要改为DMA的地方有2处:写命令和写扇区数据,因为这两处发送的字节数比较多。一些SD卡的起始、结束、应答等单字节的数据传输使用的还是非DMA方式传输。下面是部分程序:

我们进行了两种测试:只使能DMA写扇区数据,以及使能DMA写扇区数据和发送指令。都是按照单次写入16KB进行测试,测试结果如下:

可以看到,速度提升非常明显。数据和指令都用DMA传输时,速度最快。如果再进行一些底层函数的优化,速度还会有提升。

最后我们对读取速度也进行了测试,使用DMA方式,使能DMA读扇区数据和发送指令,测试结果如下,读取速度可以达到1.1MB~1.2MB/S。

3.总结

SPI+DMA的方式读写SD卡速度优势明显,推荐使用。当然,这跟非DMA方式的底层函数效率低下有很大的关系。

但DMA的另一个更重要的优势在于,读写数据时可以大部分释放CPU资源。比如我之前的一个应用,需要以1KHz的频率在外部中断中去读取一些数据,每次大约需要几十uS。如果使用非DMA方式,频繁的中断,且几十uS时间也不短,会导致SD卡写入出错。而使用DMA方式则不会有这个问题。

驱动程序:

https://download.csdn.net/download/zhang062061/87554323

上一篇:MyBatis学习

下一篇:MySQL 事务隔离

相关内容

热门资讯

中自科技携手天津大学、王成山院... 5月8日,在成都举办的“青城论道低碳能源共生发展”大会上,中自科技股份有限公司与天津大学、中国工程院...
鲁慕迅逝世,享年98岁 湖北省文联鲁慕迅同志治丧小组5月9日发布讣告,湖北省文联离休干部、省美术家协会原副主席、一级美术师鲁...
听·见|“被名言”借助网络泛滥... ——莫言说:“我不够成熟,不够圆滑,不够老练。没关系,我只不过是一个晚熟的人。”原来莫爷爷是我的同类...
曝光AL保险资管公司领导 (转自:五道口江湖)近日网传的一份文件,吐槽AL保险资管公司领导,对实习生不尊重,缺乏专业能力,人际...
成都蓉城客场4-0横扫梅州客家... 封面新闻记者 陈羽啸北京时间5月10日晚,2025赛季中超联赛第12轮在五华奥体中心展开争夺,成都蓉...
中俄关于全球战略稳定的联合声明 新华社中华人民共和国和俄罗斯联邦关于全球战略稳定的联合声明在第二次世界大战胜利和联合国成立80周年之...
苹果宣布降价 转自:扬子晚报《科创板日报》5月10日讯,苹果今日向渠道商下发了调价通知,这也是苹果首次在周六宣布调...
川渝签订合作协议共建跨界幸福河... 转自:中国环境网四川省人民政府新闻办公室近日举行川渝河长制五周年合作成效新闻发布会。会上,系统总结了...
C视频·唐探丨5G-A热的冷思... 转自:四川在线 这两天5.5G,也就是5G-A的话题在网...
巴总理表示已强力回应印度挑衅 转自:千龙网当地时间5月10日,巴基斯坦总理夏巴兹·谢里夫在同各政党领导人通话时表示,巴基斯坦武装部...
近千名选手同台竞技 成都金堂铁... 封面新闻记者 杨澜5月10日,“东锦杯”2025年成都·金堂铁人三项世界杯赛暨成渝双城铁人三项公开赛...
“行为不检”,英国海军参谋长被... 当地时间9日,据英国国防部消息人士向英国广播公司(BBC)证实,英国海军参谋长本·凯上将因“行为不检...
特朗普“邀功”后,印方迅速放出... 针对特朗普所谓美国促成印巴停火的说法,印度政府消息人士表示,印度和巴基斯坦停火“由两国直接协商”。据...
常熟经开区:水电气阶梯价申请“... 转自:扬子晚报近日,居民顾女士在常熟经开区(碧溪街道)不动产综合窗口一次性办理了水、电、气的阶梯价申...
巴基斯坦全面恢复领空开放,“印... 当地时间5月10日,总台记者获悉,巴基斯坦机场管理局宣布,巴全国领空已全面恢复开放,适用于所有类型航...
特朗普签署公告,启动“返乡计划... 当地时间5月9日,白宫发表声明称,美国总统特朗普当日签署了一份公告,宣布启动“返乡计划”,鼓励非法移...
多次向未成年人贩卖“加料”电子... 转自:千龙网一些不法分子为非法牟利在电子烟中加入异丙帕酯等物质让人一吸就上头这种“加料”后的电子烟可...
“爱在北疆 见证幸福”公益示范... 转自:草原云婚礼现场。5月10日,“爱在北疆 见证幸福”公益示范性集体婚礼在呼和浩特举行。活动旨在通...
中国铁建全资子公司新增一项11... (转自:快查一企业中标了)快查APP显示,中国铁建相关公司中国铁建大桥工程局集团有限公司于2025年...
俄称孤立俄罗斯很困难,俄愿与任... 转自:央视新闻客户端总台记者当地时间5月10日获悉,俄罗斯总统新闻秘书佩斯科夫表示,俄罗斯正在积极发...