干货 | STM32 SDIO折腾记

  原题目:干货 | STM32 SDIO折腾记

  月初打样回来的PCB,断断续续弄到现在,离完成度还有距离。这块被我老婆称为“背心”的板子,实践上是我的STM32F4试验平台(Nucleo我有,然则光插针用起来也便利利,还得扩大卡)。这块板子的计划是为一个数字音乐播放器设计的,但现在软件义务还缺很多。

  

  这个月里试验过了STM32F411的时钟装备、DMA、I2C、I2S、SDIO. 个中 SDIO 折腾得最久,拿出来和大年夜大年夜家分享下。

  SDIO这个模块主假设为了读写SD存储卡(也能够操作SDIO wifi卡之类的),ST从STM32F10x末尾就曾经支撑SDIO/SDMMC了,因为是硬件公用模块,比用SPI方法读写SD卡效能要高很多,软件也大年夜大年夜大年夜大年夜简化。我曾经(五年前的事了)在FPGA上为了记录数据,用SPI方法写过SD卡,因为外形机太复杂,用起来很欠好用。在8位MCU的时代,用SPI方法操作SD卡已比拟流行,可以找到很多的参考代码。SD卡数据线有4条,在SPI方法下就应用不了全部的带宽,STM32的SDIO则是全部数据线都能用上的。

  

  上图是罕见规范尺寸SD卡和MicroSD卡(和TF是异常器械不合叫法)的引脚,下图是STM32 SDIO模块的硬件连接,对应Card bus的引脚连到SD卡(卡座)上。不外,SD卡只需D0..D3四条数据线,STM32的SDIO_D7..4这四条多出来的线和8位宽度方法是给甚么用的?我也不知道。反正多的线也没中央连。

  

  焊好SD卡座以后:对应SD卡pin都接到MCU上了。卡座上另有CD引脚是检测卡拔出的,卡拔出后CD与GND连通。还有WP引脚是识别写保护开关用的,我没连它。

  

  团体的DIY就是折腾,ST官方库曾经有SDIO的函数了为何不用?从新发明轮子?我就喜好这么干,不喜好烦琐的一层层打包的库函数啊,直接写寄存器才好玩

  先得知道这些旗子记号都干吗的才是,ST手册这个图表现得差不多了

  

  除 SDIO_CK 是时钟,只由MCU爆发以外,SDIO_CMD和SDIO_Dn都是双向的I/O。SDIO_CMD 是敕令通道,由MCU写敕令,SD卡写应对;双方瓜代驱动,都不驱动时为高阻态。SDIO_Dn是实际传输存储数据才用的,在读卡的时分被SD卡驱动,在写卡的时分由MCU驱动写数据和校验,SD卡照顾外形。具体时序曾经被MCU硬件弄定,CRC计算都曾经做好,软件只需求操作SDIO装备APB总线上的寄存器便可以了,要说复杂也确实不难。