SD卡读写测试(二)

   SD卡读写一次的数据量必须为512字节的整数倍,即对SD卡读写操作的最小数据量为512个字节。可以通过CMD16这个命令来配置单次读写操作的数据长度,以使每次读写的数据量为(n*512)个字节(n>=1),SD卡的默认配置是单次读写操作的数据量为512字节 。

        SD卡初始化完成后即可对SD卡进行读写测试,SD卡读写测试是先向SD卡中写入数据,再从SD卡中读出数据,并验证数据的正确性。SD卡的写操作时序图如下图所示:

       SD卡的写操作流程如下:

1. 拉低片选CS引脚,发送命令CMD24(0x58)读取单个数据块,命令发送完成后等待SD卡返回响应数据;

2. SD卡返回正确响应数据0x00后,等待至少8个时钟周期,开始发送数据头0xfe;

3. 发送完数据头0xfe后,接下来发送512字节的数据;

4. 数据发送完成后,发送两个字节的CRC校验数据。由于SPI模式下不对数据进行CRC校验,直接发送两个字节的0xff即可;

5. 校验数据发送完成后,等待SD卡响应;

6. SD卡返回响应数据后会进入写忙状态(MISO引脚为低电平),即此时不允许其他操作。当检测到MISO引脚为高电平时,SD卡此时退出写忙状态;

7. 拉高CS引脚,等待8个时钟周期后允许进行其他操作。

        SD卡的读时序图如下图所示:

SD卡的读操作流程如下:

1. 拉低片选CS引脚,发送命令CMD17(0x51)读取单个数据块,命令发送完成后等待SD卡返回响应数据;

2. SD卡返回正确响应数据0x00后,准备开始解析SD卡返回的数据头0xfe;

3. 解析到数据头0xfe后,接下来接收SD卡返回的512个字节的数据;

4. 数据解析完成后,接下来接收两个字节的CRC校验值。由于SPI模式下不对数据进行CRC校验,可直接忽略这两个字节;

5. 校验数据接收完成后,等待8个时钟周期;

6. 拉高片选CS引脚,等待8个时钟周期后允许进行其他操作。

        在前面介绍的SD卡读写操作中,使用的是SD卡的SPI模式,即采用SPI协议进行读写操作。SPI和IIC都是芯片上常用 的芯片协议,SPI相比于IIC具有更高的通信速率,但同时占用更多的引脚线。

        SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是一种高速全双工、同步的通讯总线,只需要4根信号线即可,节约引脚,同时有利于PCB的布局。正是处于这种简单易用的特性,现在越来越多的芯片集成了SPI通信协议,如FLASH、AD转换器等。

        SPI的通信原理比较简单,它以主从方式工作,通常有一个主设备(FPGA)和一个或多个从设备,SPI通信需要四根线,分别为SPI_CS、SPI_CLK、SPI_MOSI、SPI_MISO,其中前三根信号线是由主机输送给从机,SPI_MISO是从机发送给主机。SPI_CS用于控制芯片是否被选中,也就是说只有片选信号有效时,对芯片操作才有效(对SD卡来说是低电平有效),SPI_CLK是由主机产生的同步时钟,用于同步数据;SPI_MOSI和SPI_MISO是主机发送和接收的数据,一般而言,SPI通信有四种不同的模式,不同的设备在出厂的时候被厂家配置为其中 的一种模式,模式是不允许用户修改的,主设备和从设备必须在同一模式下进行通信否则数据会接收错误。SPI的通信模式是由CPOL时钟极性和CPHA时钟相位控制,四种通信模式如下:

        模式0:CPOL=0,CPHA=0;

        模式1:CPOL=0,CPHA=1;

        模式2:CPOL=1,CPHA=0;

        模式3:CPOL=1,CPHA=1;

        CPOL控制着时钟极性,时钟极性变化如下图所示:

        由上图可知,当CPOL=1是,SPI_CLK空闲时为高电平,发起通信后的第一个时钟沿为下降沿;CPOL=0时,SPI_CLK空闲时为低电平,发起通信后的第一个时钟沿为上升沿。

        CPHA控制着时钟相位,即控制数据与时钟的对齐模式,不同模式下的时序图如下:

        由上图可知,        当CPHA=1时,时钟的第一个变化沿(上升沿或者下降沿)数据开始变化,那么也就意味着时钟的第二个变化沿(与第一个变化沿相反)数据锁存;当CPHA=0时,数据在时钟的第一个变化沿之前就已经改变,并且保持稳定,也就意味着在时钟的第一个变化沿锁存数据。

        对于SD卡的SPI模式而言,选用的是模式3,在SD2.0版本协议中,SPI_CLK的时钟频率可达50MHZ。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值