Presentation is loading. Please wait.

Presentation is loading. Please wait.

《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:

Similar presentations


Presentation on theme: "《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:"— Presentation transcript:

1 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 开源电子网 公众平台:“正点原子” 官方网站: 联系电话: ddddd ALIENTEK 淘宝店铺: 技术论坛:

2 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 SD卡实验(SDIO方式) 适用平台 STM32 开发板 (正点原子) ddddd Mini板不适用!!! 淘宝店铺: 技术论坛:

3 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
本视频重点参考资料 参考资料: 1,战舰/精英STM32F1开发板 《STM32F1开发指南-库函数版本》 SD卡实验 2,探索者STM32F4开发板 《STM32F4开发指南-库函数版本》 SD卡实验 3,SDIO参考资料 《STM32中文参考手册_V10》-第20章 SDIO接口(SDIO) 《STM32F4xx中文参考手册》-第28章 安全数字输入/输出接口(SDIO) 4,SD卡参考资料: 光盘:硬件资料SD卡资料 SD卡V2.0协议 SD卡2.0协议.pdf 淘宝店铺: 技术论坛:

4 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
目录 SDIO简介 1 SD卡简介 2 硬件连接 3 源码讲解&例程测试 4 淘宝店铺: 技术论坛:

5 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-什么是SDIO接口? SDIO,全称: Secure Digital Input and Output ,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并可以连接SDIO接口设备,比如:蓝牙、WIFI、照相机等。 SDIO和SD卡规范间的一个重要区别是增加了低速标准。低速卡的目标应用是以最小的硬件开支支持低速I/ O能力。低速卡支持类似调制解调器、条码扫描仪和GPS接收器等应用。 STM32的SDIO控制器支持多媒体卡(MMC卡)、SD存储卡、SD I/O卡和CE-ATA设备。 淘宝店铺: 技术论坛:

6 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO接口特点 STM32 SDIO接口特点包括: ①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。 ②与较早的多媒体卡系统规格版本全兼容(向前兼容)。 ③与SD存储卡规格版本2.0全兼容。 ④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4位。 ⑤完全支持CE-ATA功能(与CE-ATA数字协议版本1.1全兼容)。 8位总线模式下数据传输速率可达48MHz。 ⑥数据和命令输出使能信号,用于控制外部双向驱动器。 淘宝店铺: 技术论坛:

7 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO框图 复位后SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度(通过ACMD6命令设置)。 如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。 MMC版本V3.31和之前版本的协议只支持1位数据线,所以只能用SDIO_D0(为了通用性考虑,在程序里面我们只要检测到是MMC卡就设置为1位总线数据)。 STM32F103 STM32F407 淘宝店铺: 技术论坛:

8 1、SDIO简介-SDIO时钟 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
卡时钟(SDIO_CK):每个时钟周期在命令和数据线上传输1位命令或数据。对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。 SDIO适配器时钟(SDIOCLK):该时钟用于驱动SDIO适配器,可用于产生SDIO_CK时钟。对F1来说,SDIOCLK来自HCLK(72Mhz);对F4来说,SDIOCLK来自PLL48CK(48Mhz)。 F1:AHB总线接口时钟(HCLK/2):该时钟用于驱动SDIO的AHB总线接口,其频率为HCLK/2=36Mhz。 F4:APB2总线接口时钟(PCLK2):该时钟用于驱动SDIO的APB2总线 接口,其频率为PCLK2=84Mhz。 SDIO_CK计算公式:SDIO_CK=SDIOCLK/(2+CLKDIV) 注意:在SD卡初始化时,SDIO_CK不可以超过400Khz,初始化完成后,可以设置为最大频率(但不可以超过SD卡最大操作频率)。 淘宝店铺: 技术论坛:

9 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO命令与响应 SDIO的命令分为:应用相关命令(ACMD)和通用命令(CMD)两部分。发送ACMD时,需先发送CMD55。 SDIO所有的命令和响应都是在SDIO_CMD引脚上面传输的,命令长度固定为48位,SDIO命令格式如下表所示: 其中:除了命令索引和参数需要我们设置,其他都是由SDIO硬件自动控制。命令索引(如CMD0,CMD1之类)由SDIO_CMD寄存器设置,命令参数则由SDIO_ARG寄存器设置。 淘宝店铺: 技术论坛:

10 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO命令与响应 一般SD卡在接收到命令行,都会有一个应答(CMD0例外),这个应答我们也称之为响应。STM32的SDIO接口,支持2种响应类型:短响应(48位)和长响应(136位)。 STM32 SDIO短响应(48位)格式如下表所示: 淘宝店铺: 技术论坛:

11 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO命令与响应 STM32 SDIO长响应(136位)格式如下表所示: 不论是短响应还是长响应,硬件都会自动滤除了起始位、传输位、CRC7以及结束位等信息,对于短响应,命令索引存放在SDIO_RESPCMD寄存器,参数则存放在SDIO_RESP1寄存器里面。对于长响应,则仅留CID/CSD位域,存放在SDIO_RESP1~SDIO_RESP4等4个寄存器。 淘宝店铺: 技术论坛:

12 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO命令与响应 SD卡总共有6类响应(R1、R1b、R2、R3、R6、R7),我们这里以R1为例简单介绍一下。R1(普通响应命令)响应属于短响应,其长度为48位,如下表所示: 在收到R1响应后,我们可以从SDIO_RESPCMD寄存器和SDIO_RESP1寄存器分别读出命令索引和卡状态信息。关于其他响应的介绍,请大家参考光盘:《SD卡2.0协议.pdf》或《STM32中文参考手册》SDIO章节。 淘宝店铺: 技术论坛:

13 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO块数据传输 SDIO与SD卡通信一般以数据块的形式进行传输,SDIO(多)数据块读操作,如下图所示: 从机在收到主机相关命令后,开始发送数据块给主机,所有数据块都带CRC校验(由硬件自动处理),单个数据块读的时候,在收到1个数据块以后即可以停止了,不需要发送停止命令(CMD12)。但是多块数据读的时候,SD卡将一直发送数据给主机,直到接到主机发送的STOP命令(CMD12)。 淘宝店铺: 技术论坛:

14 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO块数据传输 SDIO(多)数据块写操作,如下图所示: 数据块写操作同数据块读操作基本类似,只是数据块写的时候,多了一个繁忙判断,新的数据块必须在SD卡非繁忙的时候发送。这里的繁忙信号由SD卡拉低SDIO_D0,以表示繁忙,SDIO硬件自动控制,不需要我们软件处理。 淘宝店铺: 技术论坛:

15 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO电源控制寄存器(SDIO_POWER) 该寄存器只有最低2位(PWRCTRL[1:0])有效,其他都是保留位,STM32复位以后,PWRCTRL=00,处于掉电状态。所以,我们首先要给SDIO上电,设置这两个位为:11。 淘宝店铺: 技术论坛:

16 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO时钟控制寄存器(SDIO_CLKCR) 注意:当SDIO_CK频率过快时,可能导致SD卡通信失败,此时,建议降低SDIO_CK试试。 淘宝店铺: 技术论坛:

17 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO参数寄存器(SDIO_ARG) 该寄存器用于存储命令参数。注意:参数必须先于命令写入。 淘宝店铺: 技术论坛:

18 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO命令寄存器(SDIO_CMD) 低6位为命令索引,即要发送的命令索引号(如发送CMD1,其值为1,索引就设置为1)。位[7:6],用于设置等待响应位,用于指示CPSM是否需要等待,以及等待类型等。CPSM:即命令通道状态机,请参考《STM32中文参考手册》相关章节。命令通道状态机我们一般都是开启的,所以位10要设置为1。 淘宝店铺: 技术论坛:

19 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO命令响应寄存器(SDIO_RESPCMD) 该寄存器只有低6位有效,比较简单,用于存储最后收到的命令响应中的命令索引。如果传输的命令响应不包含命令索引,则该寄存器的内容不可预知。 淘宝店铺: 技术论坛:

20 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO命令响应1~4寄存器(SDIO_RESPx,x=1~4) 命令响应寄存器组,总共包含4个32位寄存器组成,用于存放接收到的卡响应部分的信息。如果收到短响应,则数据存放在SDIO_RESP1寄存器里面,其他三个寄存器没有用到。而如果收到长响应,则依次存放在SDIO_RESP1~ SDIO_RESP4里面 淘宝店铺: 技术论坛:

21 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO数据定时器寄存器(SDIO_DTIMER) 该寄存器用于存储以卡总线时钟(SDIO_CK)为周期的数据超时时间,一个计数器将从SDIO_DTIMER寄存器加载数值,并在数据通道状态机(DPSM)进入Wait_R或繁忙状态时进行递减计数,当DPSM处在这些状态时,如果计数器减为0,则设置超时标志。DPSM:即数据通道状态机,类似CPSM,详见《STM32中文参考手册》相关章节。 注意:在写入数据控制寄存器(SDIO_DCTRL),进行数据传输之前,须先写入该寄存器(SDIO_DTIMER)和数据长度寄存器(SDIO_DLEN)! 淘宝店铺: 技术论坛:

22 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO数据长度寄存器(SDIO_DLEN) 该寄存器低25位有效,用于设置需要传输的数据字节长度。对于块数据传输,该寄存器的数值,必须是数据块长度(通过SDIO_DCTRL设置)的倍数。 即:假定数据块大小为512字节,那么SDIO_DLEN的设置,必须是512的整数倍,最大可以设置读取65535个数据块。 淘宝店铺: 技术论坛:

23 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO数据控制寄存器(SDIO_DCTRL) 该寄存器,用于控制数据通道状态机(DPSM),包括数据传输使能、传输方向、传输模式、DMA使能、数据块长度等信息的设置。 我们需要根据自己的实际情况,来配置该寄存器,才可正常实现数据收发。 淘宝店铺: 技术论坛:

24 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、SDIO简介-SDIO寄存器 SDIO状态寄存器(SDIO_STA) 另外,SDIO的清除中断寄存器(SDIO_ICR)和中断屏蔽寄存器(SDIO_MASK),这两个寄存器和状态寄存器(SDIO_STA)每个位的定义都相同,只是功能各有不同。请参考着学习。 状态寄存器可以用来查询SDIO控制器的当前状态,以便处理各种事务。比如SDIO_STA的位2表示命令响应超时,说明SDIO的命令响应出了问题。我们通过设置SDIO_ICR的位2则可以清除这个超时标志。 淘宝店铺: 技术论坛:

25 1、SDIO简介-SDIO寄存器 SDIO数据FIFO寄存器(SDIO_FIFO)
数据FIFO寄存器包括接收和发送FIFO,他们由一组连续的32个地址上的32个寄存器组成,CPU可以使用FIFO读写多个操作数。例如我们要从SD卡读数据,就必须读SDIO_FIFO寄存器,要写数据到SD卡,则要写SDIO_FIFO寄存器。SDIO将这32个地址分为16个一组,发送接收各占一半。而我们每次读写的时候,最多就是读取接收FIFO或写入发送FIFO的一半大小的数据,也就是8个字(32个字节)。 注意:操作SDIO_FIFO必须是以4字节对齐的内存操作,否则可能出错! 淘宝店铺: 技术论坛:

26 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-什么是SD卡? SD卡(Secure Digital Memory Card)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。 SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC卡,如下表所示: 容量 命名 简称 0~2G Standard Capacity SD Memory Card SDSC或SD 2G~32G High Capacity SD Memory Card SDHC 32G~2T Extended Capacity SD Memory Card SDXC 淘宝店铺: 技术论坛:

27 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-什么是SD卡? SD卡外形和接口图如下图所示: SD卡由9个引脚与外部通信,支持SPI和SDIO两种模式,不同模式下,SD卡引脚功能描述如下表所示: 淘宝店铺: 技术论坛:

28 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡特点 ①高容量,最大可达2TB(目前已有512GB的SD卡)。 ②高安全性。 ③高速,目前已有读取速度近100MB/S的SD卡。 ④体积小巧,标准SD卡大小只有一张邮票大小,重量仅2g。 ⑤接口简单,支持SPI和SDIO两种访问模式。 注意:TF卡+卡套,组合起来也可以当SD卡用,不过,很大一部分TF卡,不支持SPI访问模式。所以,SPI驱动SD卡的时候,尽量选择大卡(SD卡),而不要选择TF卡。 淘宝店铺: 技术论坛:

29 2、SD卡简介-SD卡寄存器 SD卡一般有5个寄存器,如下表:
名称 宽度(bit) 描述 CID 128 卡标识寄存器,提供制造商ID、OEM/应用ID、产品名称、版本、序列号、制造日期等信息。 RCA 16 相对卡地址(Relative card address)寄存器,提供本地系统中卡的地址,可动态变化,在主机初始化的时候确定。 注意:仅SDIO模式下有,SPI模式下无RCA。 CSD 卡描述数据寄存器,提供SD卡操作条件相关信息和数据 SCR 64 SD配置寄存器,提供SD卡一些特定的数据。 OCR 32 操作条件寄存器,主要是SD卡的操作电压等信息。 这些寄存器的详细介绍,请参考《SD卡2.0协议.pdf》第五章,接下来我们介绍SDIO模式如何驱动SD卡 淘宝店铺: 技术论坛:

30 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 SD卡初始化流程图: 要实现SDIO驱动SD卡,最重要的步骤就是SD卡的初始化,只要SD卡初始化完成了,那么剩下的(读写操作)就简单了,所以我们这里重点介绍SD卡的初始化。 右图参见《SD卡2.0协议.pdf》这个文档。 淘宝店铺: 技术论坛:

31 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 从SD卡初始化流程可知,不管什么卡(这里我们将卡分为4类:SD2.0高容量卡(SDHC,最大32G),SD2.0标准容量卡(SDSC,最大2G),SD1.x卡和MMC卡),首先我们要执行的是卡上电(设置SDIO_POWER [1:0]=11),上电后发送CMD0,对卡进行软复位,之后发送CMD8命令,用于区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令,MMC卡和V1.x的卡,是不支持该命令的。 CMD8命令格式如下表: 在发送CMD8的时候,通过其带的参数我们可以设置VHS位,以告诉SD卡,主机的供电情况,让SD卡知道主机的供电范围。 淘宝店铺: 技术论坛:

32 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 VHS位定义如下表所示: 这里我们使用参数0X1AA,即告诉SD卡,主机供电为2.7~3.6V之间,如果SD卡支持CMD8,且支持该电压范围,则会通过CMD8的响应(R7,关于SD卡响应,请参考《SD卡2.0协议.pdf》第4.9节)将参数部分原本返回给主机,如果不支持CMD8,或者不支持这个电压范围,则不响应。 在发送CMD8后,发送ACMD41(注意:发送ACMD41之前,要先发送CMD55),来进一步确认卡的操作电压范围,并通过HCS位来告诉SD卡,主机是不是支持高容量卡(SDHC)。 淘宝店铺: 技术论坛:

33 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 ACMD41命令格式如下表所示: ACMD41指令响应(R3),包含了SD卡OCR寄存器内容,其定义如右表所示: 对于支持CMD8的卡,主机设置ACMD41的参数HCS=1,告诉SD卡,主机支持SDHC卡。 对2.0的卡,OCR的CCS位用于表示SDHC还是SDSC;对1.x的卡,则忽略该位; 对MMC卡,则不支持ACMD41,MMC卡只需要发送:CMD0和CMD1即可完成初始化。 淘宝店铺: 技术论坛:

34 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 ACMD41命令格式如下表所示: ACMD41指令响应(R3),包含了SD卡OCR寄存器内容,其定义如右表所示: 对于支持CMD8的卡,主机设置ACMD41的参数HCS=1,告诉SD卡,主机支持SDHC卡。 对2.0的卡,OCR的CCS位用于表示SDHC还是SDSC;对1.x的卡,则忽略该位; 对MMC卡,则不支持ACMD41,MMC卡只需要发送:CMD0和CMD1即可完成初始化。 淘宝店铺: 技术论坛:

35 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 CMD2用于获取CID寄存器数据,CID寄存器各位定义如下表: SD卡在收到CMD2后,将返回R2长响应(136位),其中包含128位有效数据(CID寄存器内容),存放在SDIO_RESP1~4等4个寄存器里面。通过读取这四个寄存器,就可以获得SD卡的CID信息。 淘宝店铺: 技术论坛:

36 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡初始化 CMD3,用于设置卡相对地址(RCA,必须为非0),对于SD卡(非MMC卡),在收到CMD3后,将返回一个新的RCA给主机,方便主机寻址。RCA的存在允许一个SDIO接口挂多个SD卡,通过RCA来区分主机要操作的是哪个卡。对于MMC卡,则不是由SD卡自动返回RCA,而是主机主动设置MMC卡的RCA,即通过CMD3带参数(高16位用于RCA设置),实现RCA设置。同样MMC卡也支持一个SDIO接口挂多个MMC卡,不同于SD卡的是所有的RCA都是由主机主动设置的,而SD卡的RCA则是SD卡发给主机的。 在获得卡RCA之后,我们便可以发送CMD9(带RCA参数),获得SD卡的CSD寄存器内容,从CSD寄存器,我们可以得到SD卡的容量和扇区大小等十分重要的信息。CSD寄存器我们在这里就不详细介绍了,关于CSD寄存器的详细介绍,请大家参考《SD卡2.0协议.pdf》。 至此,我们的SD卡初始化基本就结束了,最后通过CMD7命令,选中我们要操作的SD卡,即可开始对SD卡的读写操作了。 淘宝店铺: 技术论坛:

37 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡读数据 SD卡单块数据块读取流程 发送CMD16指令,设置数据块大小 等待CMD16响应(R1) 注意:CMD16设置的数据块大小,一般为512字节,此设置直接决定SD卡的块大小,SD卡默认的块大小自动失效。 发送CMD17指令,开始读数据块 等待CMD17响应(R1) 读一个数据块的数据,完成单块读取 淘宝店铺: 技术论坛:

38 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡读数据 SD卡多块数据块读取流程 发送CMD16指令,设置数据块大小 结束多块数据块读取 等待CMD16响应(R1) 等待CMD12响应(R1) 发送CMD18指令,开始读数据块 发送CMD12指令,结束数据块读取 等待CMD18响应(R1) ……读取第N个数据块的数据 读第一个数据块的数据 读第二个数据块的数据 淘宝店铺: 技术论坛:

39 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡读数据 CMD16指令说明 命令编号 参数 响应 缩写 说明 CMD16 [31:0]块长度(单位:字节) R1 SET_BLOCKLEN 该指令设置SD卡的块大小(字节),该指令设置后,后续所有的块操作指令(读/写),都是以该指令设置的块大小为基准的。 注意:对高容量SD卡,块大小固定为512字节,不受此指令影响。 淘宝店铺: 技术论坛:

40 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡读数据 CMD17指令说明 命令编号 参数 响应 缩写 说明 CMD17 [31:0]数据地址(单位:字节(SDSC) 、512字节(SDHC)) R1 READ_SINGLE_BLOCK 该指令用于读取SD卡一个块的数据。该指令带一个参数,表示要读取的数据块首地址。 块大小由CMD16设置。 注意:对高容量SD卡,块大小固定为512字节。 淘宝店铺: 技术论坛:

41 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡读数据 CMD18指令说明 命令编号 参数 响应 缩写 说明 CMD18 [31:0]数据地址(单位:字节(SDSC) 、512字节(SDHC)) R1 READ_MULTIPLE_BLOCK 连续读取SD卡多数据块数据,直到主机发送CMD12指令。该指令带一个参数,表示要读取的数据块首地址。 块大小由CMD16设置。 注意:对高容量SD卡,块大小固定为512字节。 淘宝店铺: 技术论坛:

42 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡读数据 CMD12指令说明 命令编号 参数 响应 缩写 说明 CMD12 [31:0]无效 R1b STOP_TRANSMISSION 强制结束当前SD的数据传输。用于多块数据读写时,结束传输用。 注意:该指令对SD卡多块读指令和多块写指令都有效! 淘宝店铺: 技术论坛:

43 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡写数据 SD卡单块数据块写入流程 发送CMD16指令,设置数据块大小 此处省略了等待指令响应的步骤 发送CMD13指令,查询卡状态 等待READY_FOR_DATA位=1 发送CMD24指令,开始写入数据 写一个数据块的数据,完成单块写入 淘宝店铺: 技术论坛:

44 2、SD卡简介-SD卡写数据 SD卡多块数据块写入流程
该指令仅对SD卡有效。另外,在ACMD指令发送之前,需先发送CMD55 SD卡多块数据块写入流程 发送CMD16指令,设置数据块大小 完成多数据块写入 发送ACMD23指令,预擦除数据块 等待SD卡写入过程结束 发送CMD25指令,开始写数据块 发送CMD13指令,查询卡状态 写入第一个数据块的数据 发送CMD12指令,结束数据块写入 写入第二个数据块的数据 ……写入第N个数据块的数据 淘宝店铺: 技术论坛:

45 2、SD卡简介-SD卡写数据 CMD13指令说明
命令编号 参数 响应 缩写 说明 CMD13 [31:16]RCA [15:0]无效 R1 SEND_STATUS 被选中的卡返回其状态。目标SD卡通过参数RCA来选则。 R1响应: SD卡状态,请参考《SD卡2.0协议.pdf》第63页-Table 4-35 淘宝店铺: 技术论坛:

46 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡写数据 CMD24指令说明 命令编号 参数 响应 缩写 说明 CMD24 [31:0]数据地址(单位:字节(SDSC) 、512字节(SDHC)) R1 WRITE_BLOCK 该指令用于写入SD卡一个块的数据。该指令带一个参数,表示要写入的数据块首地址。 块大小由CMD16设置。 注意:对高容量SD卡,块大小固定为512字节。 淘宝店铺: 技术论坛:

47 2、SD卡简介-SD卡写数据 ACMD23指令说明
命令编号 参数 响应 缩写 说明 ACMD23 [31:23]无效[22:0]数据块个数 R1 SET_WR_BLK_ERASE_COUNT 设置需要预擦除的数据块个数,以提高SD卡多数据块写入性能(速度)。 注意:发送ACMD之前,必须先发送CMD55,通知SD卡,接下来要发送的是应用命令(APP CMD),而非标准命令 淘宝店铺: 技术论坛:

48 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡写数据 CMD55指令说明 命令编号 参数 响应 缩写 说明 CMD55 [31:16]RCA [15:0]无效 R1 APP_CMD 该指令通知SD卡,接下来要发送的是应用命令(APP CMD)。目标SD卡通过参数RCA来选则。 注意:所有APP CMD(ACMD)发送之前,都应该先发送CMD55!! 淘宝店铺: 技术论坛:

49 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、SD卡简介-SD卡写数据 CMD25指令说明 命令编号 参数 响应 缩写 说明 CMD25 [31:0]数据地址(单位:字节(SDSC) 、512字节(SDHC)) R1 WRITE_MULTIPLE_BLOCK 连续写入SD卡多数据块数据,直到主机发送CMD12指令。该指令带一个参数,表示要写入的数据块首地址。 块大小由CMD16设置。 注意:对高容量SD卡,块大小固定为512字节。 淘宝店铺: 技术论坛:

50 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、硬件连接-战舰 V3 STM32F1开发板 战舰V3 STM32F103开发板,通过底面的SD卡接口与SD卡连接,硬件连接原理图如下: 淘宝店铺: 技术论坛:

51 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、硬件连接-精英STM32F1开发板 精英STM32F103开发板,通过底面的SD卡接口与SD卡连接,硬件连接原理图如下: 淘宝店铺: 技术论坛:

52 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、硬件连接-探索者STM32F4开发板 探索者STM32F407开发板,通过底面的SD卡接口与SD卡连接,硬件连接原理图如下: 淘宝店铺: 技术论坛:

53 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
4、源码讲解&例程测试-SD卡驱动代码 SD_Init函数讲解 SD_ReadDisk函数讲解 SD_WriteDisk函数讲解 淘宝店铺: 技术论坛:

54 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
4、源码讲解&例程测试-main函数 ALIENTEK各开发板(F1/F4),本例程main函数都大同小异,代码几乎一模一样。 重点以战舰V3 本例程的main函数为例讲解,其他开发板参考着看即可。 淘宝店铺: 技术论坛:

55 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
4、源码讲解&例程测试-例程测试 例程测试 淘宝店铺: 技术论坛:

56 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 淘宝店铺: 技术论坛:


Download ppt "《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:"

Similar presentations


Ads by Google