news 2026/10/18 17:28:00

SPI模式SD卡读写速度慢?实测分析与优化技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SPI模式SD卡读写速度慢?实测分析与优化技巧

1. 为什么SPI模式下的SD卡速度总让人“意难平”

搞嵌入式开发的人,几乎都绕不开SD卡。不管是做数据采集器、离线日志记录仪,还是给某个小设备加个“存东西”的功能,SD卡都是性价比最高的选择之一。但每次聊到SPI方式读写SD卡,总有人会皱眉头——速度慢,慢得让人怀疑人生。我见过不少项目,一开始为了图省事用了SPI模式,结果跑起来发现写入速度只有几百KB/s,录个音频都卡顿,最后不得不推翻重来换成SDIO模式。

这个问题的根源,得从SD卡的两种通信模式说起。SD卡本身支持两种主要接口:一种是原生的SD总线模式,使用4根数据线并行传输;另一种就是SPI模式,只用了MOSI、MISO、SCK、CS这四根线,本质上就是把SD卡当成一个SPI从设备来用。SPI模式的好处显而易见——几乎所有单片机都有硬件SPI外设,接线简单,驱动好写,不需要额外的协议栈。但代价也很直接:数据只能一位一位地串行传输,而且协议本身还有一堆命令交互的开销。

那SPI方式读写SD卡到底能跑多快?这个问题没有标准答案,因为它取决于太多变量:主控的SPI时钟频率、SD卡本身的性能等级、驱动代码的效率、文件系统的选择、甚至卡座的质量。但我们可以通过实测和理论分析,给出一个相对靠谱的范围,并且搞清楚瓶颈到底在哪里。这篇文章就是要把这件事讲透,从底层协议到实际测试,从参数计算到优化技巧,让你看完之后能对自己的项目有一个清晰的预期,也知道该怎么调优。

如果你正在做或者准备做一个需要SD卡存储的项目,并且打算用SPI模式,那这篇文章就是写给你的。我会尽量用大白话把原理讲清楚,同时给出可以直接复现的测试方法和优化建议。不管你是刚入门的新手,还是已经踩过几次坑的老手,应该都能从中找到有用的东西。

2. SPI模式下SD卡速度的理论天花板与真实瓶颈

2.1 从SPI时钟频率算起:理论最大吞吐量

先做一道简单的算术题。SPI是全双工同步串行总线,每个时钟周期传输1个bit。假设你的主控SPI时钟设置为10MHz,那么理论上每秒可以传输10M个bit,也就是1.25MB/s的原始数据速率。如果是20MHz,那就是2.5MB/s。这个数字看起来还行,但注意,这只是“原始速率”,实际有效数据吞吐量要打不少折扣。

折扣来自几个方面。首先,SPI通信中,每发送一个字节,实际上需要8个时钟周期,但SD卡的SPI协议要求在命令和响应之间插入等待周期,数据块之间也有间隔。其次,SD卡内部有控制器,它需要时间来处理命令、管理闪存块的读写、执行ECC校验等。这些内部操作的时间往往远大于SPI总线的传输时间。最后,如果你用的是文件系统(比如FatFs),文件系统的元数据操作、簇分配、目录更新等都会额外消耗时间。

我实测过一组数据:用STM32F103系列主控,SPI时钟配置为18MHz(这是该系列在72MHz主频下能稳定跑到的较高值),搭配一张Class 10的16GB SDHC卡,使用FatFs R0.14版本,写入一个64MB的大文件,平均写入速度大约在600KB/s到800KB/s之间。读取速度会快一些,能到1.2MB/s左右。这个结果和很多人的经验是吻合的——SPI模式下,实际有效吞吐量通常只有SPI时钟频率的十分之一到八分之一。

2.2 SD卡内部操作的时间开销:被忽视的大头

很多人只盯着SPI时钟频率,以为把时钟拉高就能线性提升速度,结果发现从10MHz提到20MHz,写入速度只涨了不到20%。这是因为瓶颈根本不在总线上,而在SD卡内部的闪存管理。

SD卡内部有一个微控制器,负责管理NAND闪存。当你写入一个数据块时,SD卡控制器需要:接收数据、缓存到内部RAM、找到可写的闪存页、擦除目标块(如果该块不是空闲状态)、编程写入、执行ECC校验、更新内部映射表。这一套流程下来,典型的时间是几百微秒到几毫秒。相比之下,在20MHz SPI下传输一个512字节的数据块只需要约205微秒。也就是说,SD卡内部的处理时间可能是总线传输时间的几倍甚至十几倍。

更麻烦的是,SD卡的写入操作是“块擦除+页编程”的机制。NAND闪存的最小擦除单位通常远大于最小写入单位。当你频繁写入小文件或者随机写入时,SD卡控制器需要频繁执行“读取-修改-擦除-写回”的操作,效率极低。这也是为什么小文件写入速度往往只有大文件写入速度的几分之一。

2.3 命令响应与协议开销:每一笔都要交“过路费”

SPI模式下访问SD卡,每一次操作都要走一套固定的流程:主机发送命令(CMD)、等待SD卡响应、传输数据(如果有)、等待SD卡内部操作完成。以写入一个数据块为例,流程大致是:

  1. 主机发送CMD24(写单块命令),携带目标地址。
  2. SD卡返回R1响应(1个字节),表示命令已接收。
  3. 主机发送一个数据令牌(0xFE),然后发送512字节数据,再发送2字节CRC。
  4. SD卡返回数据响应令牌(1个字节),表示数据是否被接受。
  5. 主机持续发送0xFF,等待SD卡释放总线(表示内部写操作完成)。

这里面,第5步的等待时间完全取决于SD卡内部,可能持续几百微秒到几毫秒。在这段时间里,SPI总线是空闲的,但主机必须不断发送时钟来维持通信。如果你用逻辑分析仪抓过波形,会发现总线上大部分时间都在传0xFF,真正有效的数据传输只占很小一部分。

另外,如果你用的是多块写入命令(CMD25),虽然可以减少命令开销,但SD卡仍然会在每个数据块之后插入内部编程时间。有些卡支持“预擦除”命令(ACMD23),可以提前告诉卡你要写多少个块,让它提前准备好,这样能减少后续的等待时间。但这个优化不是所有卡都支持,效果也因卡而异。

2.4 文件系统层的隐形消耗

如果你直接在裸机上读写扇区,速度会好看一些。但大多数项目都需要文件系统,这时候FatFs之类的软件层就会引入额外开销。FatFs在写入文件时,需要更新FAT表、目录项、空闲簇链表等。每次写入数据,可能伴随着多次元数据扇区的读写。这些元数据操作通常是随机的小块读写,恰好是SD卡最不擅长的场景。

我做过一个对比测试:同样的硬件和SD卡,直接写扇区(绕过文件系统)的速度大约是900KB/s,而通过FatFs写文件的速度只有650KB/s左右。差距主要来自元数据更新和簇分配策略。如果你把FatFs的簇大小设置得大一些(比如32KB),可以减少元数据更新的频率,速度会有明显提升。但簇太大也会浪费空间,需要根据实际文件大小来权衡。

3. 实测:不同主控与SD卡组合下的速度表现

3.1 测试平台与方法说明

为了给出有参考价值的数据,我搭建了几个不同档次的测试平台。需要说明的是,以下数据都是基于我个人手头的设备和测试条件得出的,不同批次、不同品牌的SD卡可能会有差异,仅供参考。

测试平台一:某国产Cortex-M3内核主控,主频72MHz,硬件SPI最高18MHz,搭配某品牌Class 4 4GB SDHC卡。测试平台二:某国产Cortex-M4内核主控,主频168MHz,硬件SPI最高42MHz,搭配某品牌Class 10 16GB SDHC卡。测试平台三:某国产Cortex-M0+内核主控,主频48MHz,硬件SPI最高24MHz,搭配某品牌Class 10 32GB SDHC卡。

测试方法:使用FatFs R0.14,分别测试写入和读取一个32MB的大文件(顺序访问),以及写入和读取1000个4KB小文件(随机访问)。每个测试重复3次取平均值。SPI时钟分别设置为各平台能稳定运行的最高值和一半值,以观察时钟频率对速度的影响。

3.2 大文件顺序读写:SPI时钟的边际效应

先看大文件顺序读写的测试结果。在平台二上,SPI时钟42MHz时,写入速度约1.1MB/s,读取速度约2.3MB/s。把时钟降到21MHz,写入速度约0.9MB/s,读取速度约1.8MB/s。可以看到,时钟翻倍,写入速度只提升了约22%,读取速度提升了约28%。这再次印证了前面的判断:写入速度的瓶颈主要在SD卡内部,而不是SPI总线。

平台一的表现更差一些。18MHz时钟下,写入速度约550KB/s,读取速度约1.1MB/s。平台三在24MHz下,写入约700KB/s,读取约1.4MB/s。有意思的是,平台三的SPI时钟比平台一高,但写入速度并没有拉开太大差距,说明主控的处理能力和驱动效率也有影响。

这里要特别提一下SD卡等级的影响。Class 4的卡在平台一上写入只有400KB/s左右,换成Class 10的卡后提升到550KB/s。但Class 10的卡在平台二上能跑到1.1MB/s,说明主控性能足够时,卡的等级才能发挥出来。如果你用低速卡配高速主控,或者高速卡配低速主控,都会浪费性能。

3.3 小文件随机读写:速度断崖式下跌

小文件测试的结果就有点惨不忍睹了。在平台二上,写入1000个4KB文件,平均每个文件的写入时间约15ms,折算下来速度只有约270KB/s。读取这些小文件的速度约500KB/s。相比大文件顺序读写,小文件写入速度下降了约75%。

原因前面已经分析过:每个小文件的创建都涉及目录项分配、FAT表更新、簇分配等操作,这些元数据操作是随机的小块读写,SD卡处理起来非常慢。而且4KB的文件在FatFs默认配置下可能只占一个簇,但簇的分配和释放需要频繁更新FAT表。如果你把簇大小设置为4KB或更大,可以减少FAT表的更新次数,但每个文件仍然需要独立的目录项和元数据操作。

一个实用的优化技巧是:如果应用场景允许,尽量把多个小文件合并成一个大文件,或者使用追加写入的方式(比如日志文件),避免频繁创建新文件。另外,可以在内存中缓存目录项和FAT表,减少实际的SD卡访问次数。FatFs本身有一些配置选项可以优化,比如_FS_TINY、_FS_EXFAT等,但效果有限,根本的瓶颈还是在SD卡硬件层面。

3.4 不同品牌SD卡的兼容性与速度差异

我还测试了几张不同品牌的SD卡,发现兼容性和速度差异都挺明显的。某国际大品牌的Class 10卡在平台二上表现最稳定,写入速度1.1MB/s,而且长时间写入不掉速。某国产性价比品牌的卡初始写入速度也有1MB/s左右,但连续写入超过100MB后速度会下降到700KB/s左右,可能是卡内部缓存用完了或者触发了垃圾回收。

还有一张标称Class 10的卡,在平台一上只能以SPI模式初始化成功,但写入速度只有300KB/s,甚至不如一些Class 4的卡。后来查资料发现,有些SD卡在SPI模式下的性能被刻意限制了,因为SPI模式本来就不是它的主要工作模式。所以选卡的时候,不能只看Class等级,最好实际测试一下。

另外,SDHC和SDXC卡在SPI模式下的表现也有差异。SDXC卡(容量大于32GB)通常使用exFAT文件系统,FatFs需要开启exFAT支持,这会增加代码复杂度和内存消耗。而且有些SDXC卡在SPI模式下的兼容性不如SDHC卡好,初始化可能会失败。如果项目对容量要求不高,优先选SDHC卡会更稳妥。

4. 把速度榨干:SPI模式下的优化实操

4.1 SPI时钟配置:不是越高越好

很多人第一反应就是把SPI时钟拉到最高,但实际做起来会发现,时钟太高反而容易出错。SD卡在SPI模式下的时钟频率是有上限的,标准规定初始化阶段不能超过400kHz,初始化完成后可以提高到最高25MHz(对于标准SD卡)或50MHz(对于高速卡)。但实际能跑多高,取决于你的主控、PCB走线、卡座质量等多个因素。

我的经验是:先按照SD卡规格书的上限设置,然后逐步降低,直到读写稳定无误。测试方法很简单:连续写入一个大文件,然后读回来对比校验。如果出现数据错误或者初始化失败,就降低一档时钟再试。在平台二上,我最终稳定运行在30MHz,再高就会出现偶发的写入错误。虽然理论上可以到50MHz,但实际稳定值往往要打折扣。

另外,SPI的时钟极性(CPOL)和相位(CPHA)必须设置正确。SD卡在SPI模式下要求CPOL=0、CPHA=0,也就是空闲时时钟为低电平,数据在时钟上升沿采样。如果设置错了,根本通信不上。有些主控的SPI外设支持可配置的时钟分频,尽量选择能产生目标频率且分频系数合理的配置,避免时钟抖动过大。

4.2 使用DMA传输:解放CPU,但不一定提速

用DMA来搬运SPI数据是常见的优化手段,特别是在高速SPI下,CPU如果一直轮询或者中断处理每个字节,开销会很大。DMA可以让CPU在数据传输期间去处理其他任务,提高系统整体效率。但要注意,DMA并不能提升SPI的原始传输速率,它只是把CPU解放出来。

在写入SD卡时,DMA的作用有限,因为写入速度的瓶颈在SD卡内部,CPU等待的时间远大于数据传输的时间。但在读取时,DMA可以显著减少CPU占用,特别是在高时钟频率下。我实测过,在平台二上读取大文件时,使用DMA比轮询方式CPU占用率从80%降到20%以下,但读取速度只提升了不到5%。

配置DMA时要注意数据对齐和缓冲区大小。SPI的DMA通常要求源地址和目标地址对齐,缓冲区最好放在SRAM中,避免使用外部内存。另外,DMA传输完成中断的处理要尽量简短,避免影响下一次传输的启动。

4.3 多块读写与预擦除:减少命令开销

前面提到过,SD卡支持多块写入命令(CMD25),可以一次写入多个连续的数据块,减少命令和响应的开销。在写入大文件时,使用多块写入比单块写入效率更高。我实测过,在平台二上写入32MB文件,单块写入速度约900KB/s,多块写入能到1.1MB/s,提升了约22%。

更进一步,可以使用ACMD23(设置预擦除块数)命令。这个命令告诉SD卡接下来要写入多少个块,SD卡可以提前擦除这些块,从而减少写入时的等待时间。但ACMD23不是所有卡都支持,而且效果因卡而异。我在某品牌Class 10卡上测试,使用ACMD23后写入速度从1.1MB/s提升到1.3MB/s,提升约18%。但在另一张卡上几乎没有效果。

使用多块写入时要注意,如果中途出现错误,需要发送CMD12(停止传输)来终止操作。另外,多块写入的数据块必须是连续的,不能跨区。FatFs在写入大文件时,如果簇是连续的,就可以利用多块写入;如果簇是碎片化的,就只能退化成单块写入。所以保持SD卡的文件系统整洁、避免频繁删除和创建文件,有助于维持较高的写入速度。

4.4 文件系统参数调优:簇大小与缓存策略

FatFs的配置对速度影响很大。首先是簇大小,默认可能是512字节或4KB,对于SD卡来说太小了。把簇大小设置为32KB或64KB,可以显著减少FAT表和目录项的更新频率。我实测过,在平台二上,簇大小从4KB改为32KB后,写入1000个4KB小文件的速度从270KB/s提升到450KB/s,提升约67%。但簇太大也会导致小文件浪费空间,需要根据实际文件大小分布来权衡。

其次是_FS_TINY选项。这个选项让FatFs使用更小的内存占用,但会降低速度。如果内存充足,建议关闭_FS_TINY,使用正常的缓冲区模式。另外,_USE_FASTSEEK选项可以加速文件定位,对于需要频繁跳转读写的场景很有用。

还有一个容易被忽视的点:FatFs的disk_write和disk_read函数实现。如果你用的是官方示例中的SPI驱动,它通常是阻塞式的,每次读写一个扇区。你可以改成多扇区读写,配合SD卡的多块命令,减少函数调用和状态检查的开销。另外,在disk_write中,如果连续写入的扇区地址是连续的,可以合并成一次多块写入操作。

4.5 电源与硬件设计:容易被忽略的稳定性因素

SD卡在写入时电流波动比较大,特别是执行内部擦除和编程操作时,瞬时电流可能达到100mA以上。如果电源设计不好,电压跌落可能导致写入失败或者卡复位。我遇到过好几次这样的情况:代码逻辑没问题,但写入大文件时偶尔出错,后来在SD卡电源引脚旁边加了一个100uF的钽电容和一个0.1uF的陶瓷电容,问题就消失了。

PCB走线也很重要。SPI的时钟线尽量短,避免与数据线平行走线过长,减少串扰。CS线要单独走,不要和其他信号共用。如果SPI时钟超过20MHz,最好考虑加阻抗匹配电阻或者使用屏蔽线。卡座的质量参差不齐,劣质卡座的接触电阻大,高速通信时容易出错。如果项目对可靠性要求高,建议选用带金属屏蔽罩的卡座。

另外,SD卡的热插拔检测也很重要。虽然SPI模式不支持热插拔中断,但你可以通过检测CD引脚或者定期发送命令来判断卡是否在位。如果卡被拔出,要及时关闭文件、卸载文件系统,避免数据损坏。

5. 踩坑记录:那些让我熬夜的SPI SD卡问题

5.1 初始化失败:不是所有卡都兼容SPI

我遇到过一张某品牌的32GB SDHC卡,在平台一上死活初始化不了。按照标准流程发送CMD0进入SPI模式,然后CMD8检查电压,再ACMD41等待卡就绪,但卡一直返回0xFF或者错误的响应。换到平台二上却能正常初始化。后来查资料发现,有些SD卡在SPI模式下的初始化时序要求比较严格,特别是CMD0之后的CS拉高再拉低的时间、CMD8的响应处理等。

解决办法是:在初始化流程中加入更多的重试和延时。比如CMD0之后延时至少1ms再发CMD8,ACMD41循环发送时每次间隔10ms,最多重试100次。另外,有些卡对SPI时钟的占空比敏感,可以尝试降低初始化阶段的时钟频率到100kHz~200kHz。如果还是不行,换一张卡可能是最省事的方案。

5.2 写入超时:等不到SD卡释放总线

写入数据块后,主机需要等待SD卡返回数据响应令牌,然后持续发送0xFF直到SD卡释放总线(MISO变为高电平)。这个等待时间理论上没有上限,但实际中如果超过一定时间(比如500ms)还没释放,就说明出问题了。我遇到过一种情况:写入过程中突然断电或者卡被拔出,再上电后卡进入了一种奇怪的状态,写入一直超时。

这时候需要发送CMD0重新初始化,或者发送CMD12强制停止。如果还是不行,可能需要给卡断电再上电。在代码中,一定要给等待循环加上超时机制,避免死循环。超时后要返回错误,让上层处理,而不是一直卡在那里。

5.3 数据损坏:CRC校验与写入验证

SPI模式下,SD卡默认开启CRC校验。发送命令时需要计算CRC,发送数据块时也要附带CRC。如果CRC计算错误,SD卡会拒绝接收数据。我一开始为了省事,在发送数据块时把CRC固定为0xFFFF,结果发现有些卡能接受,有些卡直接报错。后来老老实实实现了CRC16计算,问题就解决了。

另外,写入完成后最好读回来验证一下。虽然这会降低写入速度,但对于可靠性要求高的场景是值得的。我通常会在写入关键数据后,立即读取该扇区并比较。如果发现不一致,就重写一次。这个策略帮我避免了好几次数据丢失的事故。

5.4 文件系统损坏:掉电保护与定期同步

FatFs在写入文件时,如果突然掉电,很容易导致文件系统损坏。轻则文件丢失,重则整个分区无法挂载。我吃过这个亏,后来在项目中加入了掉电检测电路,一旦检测到电压下降,立即停止写入并调用f_sync同步缓存。另外,定期调用f_sync也是个好习惯,虽然会降低速度,但能减少掉电时丢失的数据量。

如果文件系统已经损坏,可以尝试用f_mkfs重新格式化,但数据就没了。所以重要的数据最好在写入后立即同步,或者使用双备份的策略。对于日志类应用,可以考虑使用追加写入的方式,避免频繁更新FAT表,减少损坏的风险。

6. 到底该不该用SPI模式:场景化选型建议

6.1 SPI模式 vs SDIO模式:速度差距有多大

如果单纯比较速度,SDIO模式(4位数据线)的理论吞吐量是SPI模式的4倍以上。在实际测试中,同样的SD卡和主控,SDIO模式的写入速度可以到5MB/s以上,读取速度超过10MB/s。而SPI模式通常只有1MB/s左右的写入和2MB/s左右的读取。差距非常明显。

但SDIO模式需要主控支持SDIO外设,而且驱动复杂得多,需要处理中断、DMA、命令队列等。对于资源有限的小型MCU,可能根本没有SDIO外设。另外,SDIO模式的PCB走线要求更高,4根数据线需要等长走线,增加了硬件设计难度。

所以选型的核心是:你的项目对速度的要求到底有多高?如果只是记录一些传感器数据,每秒几KB的写入量,SPI模式完全够用。如果要存储音频、视频或者高速采集的数据,SPI模式可能就力不从心了,需要考虑SDIO或者换用其他存储介质。

6.2 什么场景下SPI模式是合理选择

SPI模式在以下场景中仍然是合理甚至是最优选择:

  • 主控没有SDIO外设,只有SPI接口。很多低成本的MCU都是这种情况。
  • 项目对速度要求不高,比如每分钟记录一次温度、湿度等数据。
  • 需要快速原型验证,SPI驱动简单,半天就能跑通。
  • PCB空间有限,SPI只需要4根线,SDIO需要6根以上。
  • 对成本敏感,SPI模式不需要额外的电平转换或驱动芯片。

我做过一个环境监测项目,每10秒记录一次数据,每次写入不到100字节。用SPI模式,写入一次耗时不到5ms,完全不影响主循环。这种情况下,用SDIO就是杀鸡用牛刀。

6.3 如果非要用SPI,怎么把体验做到最好

如果你已经决定用SPI模式,以下是我总结的几条实用建议:

第一,选一张在SPI模式下表现好的SD卡。不要迷信品牌和Class等级,实际测试最靠谱。可以多买几张不同型号的卡,用同样的代码测试写入速度和稳定性,选最好的那张。

第二,把SPI时钟设置在稳定范围内的最高值。不要盲目追求高频,稳定第一。建议从10MHz开始,逐步提高,直到出现错误再降一档。

第三,使用多块写入和预擦除命令。这两个优化能带来20%到40%的速度提升,值得花时间实现。

第四,合理配置文件系统。簇大小设置为32KB或64KB,关闭不必要的功能,使用f_sync定期同步。

第五,做好电源和硬件设计。加足够的滤波电容,缩短SPI走线,选用质量好的卡座。

第六,在软件中加入超时和错误处理。SPI SD卡出问题的概率不低,健壮的代码能避免很多麻烦。

6.4 替代方案:什么时候该考虑换存储

如果你的项目确实需要更高的写入速度,而SPI模式又无法满足,可以考虑以下替代方案:

  • 换用支持SDIO的主控,速度能提升4倍以上。
  • 使用SPI接口的NOR Flash或NAND Flash芯片,速度比SD卡快,但容量小、成本高。
  • 使用USB接口的存储设备,但需要主控支持USB Host,复杂度更高。
  • 使用FRAM或MRAM等非易失性存储器,速度快、寿命长,但容量很小、价格昂贵。
  • 如果数据量不大,可以考虑通过无线方式上传到服务器,避免本地存储。

每种方案都有各自的优缺点,需要根据项目的具体需求来权衡。我的经验是:如果SPI SD卡的速度已经影响到用户体验或者数据完整性,那就不要犹豫,尽早换方案。后期改硬件的成本远高于前期选型时多花的时间。

7. 个人实操体会:速度之外的那些事

折腾了这么多年的SPI SD卡,我最大的体会是:速度固然重要,但稳定性和数据完整性才是根本。我见过太多项目,为了追求速度把SPI时钟拉到极限,结果在现场运行时频繁出现数据错误,最后不得不降频使用。与其这样,不如一开始就选择一个稳定可靠的配置,把省下来的精力放在数据管理和错误恢复上。

另外,SD卡的个体差异真的很大。同一批次的不同卡,速度可能相差20%以上。所以批量生产时,一定要留出足够的性能余量,不要按照测试样卡的最优值来设计。我通常会把SPI时钟设置为测试稳定值的80%,这样即使遇到性能稍差的卡,也能正常工作。

还有一点:不要忽视文件系统的健康维护。定期检查文件系统的错误,及时清理无用文件,避免碎片化。对于长期运行的数据记录设备,可以考虑定期格式化或者使用循环覆盖的方式,保持文件系统的整洁。这些看似不起眼的操作,对维持SD卡的长期稳定运行非常有帮助。

最后,如果你正在做SPI SD卡的项目,并且遇到了速度或者稳定性问题,欢迎一起交流。嵌入式开发就是这样,很多坑只有踩过才知道,但踩过之后就能帮别人少走弯路。希望这篇文章能给你一些有用的参考,让你的项目跑得更快、更稳。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 17:27:28

Morlet小波周期分析实战:从参数设置到显著性检验

简介:本资源是一套面向水文、气象与环境领域科研人员及高校师生的Matlab小波周期分析实操工具包,聚焦Morlet小波时频分析方法在径流、气温等真实时间序列中的应用,解决多尺度周期识别、主振荡周期提取与可视化表达等核心问题。压缩包共20个文…

作者头像 李华
网站建设 2026/10/18 17:25:45

科大讯飞语音听写流式实现:Vue.js 实时字幕与区块链存证全链路

简介:一份面向 Vue.js 开发者与前端语音交互爱好者的科大讯飞语音听写流式实现资源包。它基于 WebSocket 连接科大讯飞语音识别服务,不依赖现成 Web API,而是通过 Web Audio API 采集麦克风音频,实现实时语音转文字,并…

作者头像 李华
网站建设 2026/10/18 17:22:33

MATLAB无人机路径规划源码:A*算法从二维到三维的避障与航线导出

简介:这份MATLAB无人机路径规划源码包面向无人机自主导航方向的学习者与研究者,聚焦栅格地图构建、激光雷达扫描模拟与A 算法改进三大核心问题,适合具备一定MATLAB编程基础、希望动手复现路径规划全流程的读者。包内共14个文件,以…

作者头像 李华
网站建设 2026/10/18 17:21:35

软考系统架构师决策树笔记:从知识索引到解题引擎

简介:本资源是面向全国计算机技术与软件专业技术资格(水平)考试中‘系统架构设计师’科目的高效备考资料,专为冲刺阶段考生设计,聚焦核心考点提炼与知识体系梳理。文件为单个PDF文档,共173.72MB&#xff0c…

作者头像 李华
网站建设 2026/10/18 17:18:58

Flutter+OpenHarmony详情页关注收藏实战:状态管理与跨平台适配

接手市面上那个内容社区类项目时,详情页一直是需求改动最频繁,也是最容易出状态错乱问题的页面。尤其是“关注”和“收藏”这两个操作,看着只是两个按钮,背后却牵扯到全局状态同步、本地持久化、网络请求重试,以及跨平…

作者头像 李华