学习笔记——基于FPGA的SD卡学习(1)

SD卡介绍

SD卡( Secure Digital Card),即安全数字卡 ,具有两个突出的优点 更高的安全性和更快的读写速度 。

SD卡分类

  SD卡从存储容量上分为3个级别,分别为SD卡、SDHC卡( Secure Digital High Capacity,高容量安全数字卡)和SDXC卡(SD eXtended Capacity,容量扩大化的安全存储卡)。
SD卡的类型、协议规范、容量登记及支持的文件系统

SD卡速度等级划分

  不同协议规范的SD卡有着不同速度等级的表示方法。在SD1.0协议规范中(现在用的较少)),使用 “X”表示不同的速度等级;在SD2.0协议规范中,使用SpeedClass表示不同的速度等级SD3.0协议规范 使用UHS Ultra High Speed 表示不同的速度等级。SD2.0规范中对SD卡的 速度等级划分为普通卡Class2、Class4、 Class6)和高速卡( Class10 SD3.0规范对SD卡的速度等级划分为UHS速度等级1和3而在SD4.0中则是UHS II,它不仅速度等级大大加快,接口也有所变化 。
SD卡不同速度等级表示法

SD卡引脚及功能介绍

SD卡共有9个引脚线,可工作在SDIO模式或者SPI模式。
  在SDIO模式下,共用到CLK、CMD、DAT[3:0]六根信号线;
  在SPI模式下,共用到CS(SDIO_DAT[3])、CLK(SDIO_CLK)、MISO(SDIO_DAT[0])、MOSI(SDIO_CMD)四根信号线。
  SD卡引脚功能介绍如下图所示。
SD卡引脚功能介绍
  市面上除标准SD卡外,还有MicroSD 卡(原名TF卡,就是本次实验所使用的SD卡),是一种极细小的快闪存储器卡,MicroSD卡插入适配器(Adapter)可以转换成SD卡,其操作时序和SD卡是一样的,其引脚的位置和功能不完全相同。
  MicroSD的引脚功能介绍如下图所示。
MicroSD卡接口定义及引脚功能说明
  标准SD卡2.0版本中,工作时钟频率可以达到50Mhz,在SDIO 模式下采用4 位数据位宽,理论上可以达到200Mbps (50M*4bit)的传输速率;在SPI模式下采用1位数据位宽,理论上可以达到50Mbps 的传输速率。因此SD卡在SDIO 模式下的传输速率更快,同时其操作时序也更复杂。

SPI模式下对SD卡进行读写实验

  SD卡在正常读写操作之前,必须先对SD卡进行初始化, SD卡的初始化过程就是向SD中写入命令使其工作在预期的工作模式 。

  SD卡的命令格式由6个字节组成发送数据时高位在前,SD卡的写入命令格式 如下图所示:
SD卡命令格式
  Byte1:命令字,格式为01xxxxxx,最高位始终为0,为起始位;次高位始终为1,是发送位;低6位为具体的命令号。
  Byte2~5::命令参数,有些命令参数是保留,没有定义参数的内容,保留位应设置为 0。
  Byte6:前7位为CRC(循环冗余校验)校验位,最后一位为停止位0。SD卡在SPI模式下默认不开启CRC校验,但CRC校验位必须发送,但SD卡会自动忽略它,故全设置为1即可。在SDIO模式下开启CRC校验。

  注意!!SD卡上电默认是SDIO模式,在接收SD卡返回CMD0的响应命令时,拉低片选CS,进入SPI模式。所以在发送CMD0命令的时候,SD卡处于SDIO模式需要开启CRC校验 。另外CMD8的CRC校验是始终启用的,也需要启用CRC校验。SPI模式下其它命令的CRC可以不用做校验。

SD卡命令

  SD卡 的命令分为标准命令(eg:CMD0)和应用相关命令(eg:ACMD41),ACMD命令是特殊命令,发送方法同标准命令一样,但是在发送应用相关命令之前,必须先发送 CMD55命令告诉SD卡接下来的命令是应用相关命令,而非标准命令。发送完命令后,SD卡会返回响应命令的信息,不同的CMD命令会有不同类型的返回值,常用的返回值有R1类型、R3类型和 R7类型( R7类型是CMD8命令专用)。
  SD卡常用命令说明如下图所示。
SD卡常用命令说明
SD卡返回类型R1数据格式如下图所示:
SD卡返回类型 R1数据格式
SD卡返回类型R1格式共返回1个字节,最高位固定为 0,其它位分别表示对应状态的标志,高电平有效。

SD卡返回类型R3数据格式如下图所示:
SD卡返回类型 R3数据格式
SD卡返回类型R3格式共返回5个字节

SD卡返回类型R7数据格式如下图所示:
SD卡返回类型 R7数据格式
其中,
Bit[11:8]:操作电压反馈
Bit0 未定义
Bit1 2.7V~3.6V
Bit2:低电压
Bit4:保留 位
Bit8:保留 位
其它 :未定义

SD卡初始化流程

  SD卡在正常读写操作之前,必须先对SD卡进行初始化,使其工作在预期的工作模式。

SD卡上电复位时序图如下图所示
SD卡复位时序图
基于SD2.0版本协议的SDHC卡 ,其详细复位步骤如下:

  1. SD卡完成上电后,主机 FPGA先对从机SD卡发送至少74个以上的同步时钟,在上电同步期间片选CS引脚和MOSI引脚必须为高电平(MOSI引脚除发送命令或数据外其余时刻都为高电平);

  2. 拉低片选CS引脚发送命令CMD0(0x40)复位 SD卡,命令发送完成后等待SD卡返回响应数据;

  3. SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号此时判断返回的响应数据。如果返回的数据为复位完成信号0x01,说明复位完成;如果返回的值为其它值,则重新执行第2步。在接收返回信息期间片选CS为低电平,此时SD卡进入SPI模式 ,并开始进行下一步;

    判断为SD卡2.0操作步骤:
    //4. 拉低片选CS引脚发送命令CMD8(0x48)查询SD卡的版本号,只有SD2.0版本的卡才支持此命令,命令发送完成后等待SD卡返回响应数据;
    //5. SD卡返回响应数据后,先等待 8个时钟周期再拉高片选CS信号此时判断返回的响应数据。如果返回的电压范围为4’b0001即 2.7V~3.6V 说明此SD卡为2.0版本,进行下一步,否则重新执行第4步;
    

SD卡初始化时序图如下图所示。
SD卡初始化时序图
初始化步骤如下:

  1. 拉低片选CS引脚发送命令CMD55(0x77)告诉 SD卡下一次发送的命令是应用相关命令,命令发送完成后等待SD卡返回响应数据;
  2. SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号此时判断返回的响应数据 。如果返回的数据为空闲信号0x01,开始进行下一步,否则重新执行第1步 。
  3. 拉低片选CS引脚发送命令 ACMD41 0x69)查询SD卡是否初始化完成,命令发送完成后等待SD卡返回响应数据;
  4. SD卡返回响应数据后,先等待8个时钟周期再拉高片选CS信号此时判断返回的响应数据 。 如果返回的数据为0x00,此时初始化完成,否则重新执行第1步 。

  SD卡在初始化的时候,SPI_CLK的时钟频率不能超过400KHz,在初始化完成之后,再将 SPI_CLK的时钟频率切换至SD卡的最大时钟频率。尽管目前市面上的很多SD卡支持以较快的时钟频率进行初始化,为了能够兼容更多的SD卡,在SD卡初始化的时候时钟频率不能超过 400KHz。

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

SD卡读/写操作流程

  SD卡初始化完成后,即可对SD卡进行读写测试SD卡的读写测试是先向SD卡中写入数据,再从SD卡中读出数据,并验证数据的正确性。以SPI模式下每次发送512个字节为例:

SD卡写操作流程

SD卡写操作时序图如下图所示。
SD卡写操作时序图
SD卡的写操作流程:

  1. 拉低片选CS引脚发送命令 CMD24(0x58)读取单个数据块,命令发送完成后等待SD卡返回响应数据;
  2. SD卡返回正确响应数据 0x00后等待至少8个时钟周期开始发送数据头0xfe
  3. 发送完数据头0xfe后,接下来开始发送512个字节的数据;
  4. 数据发送完成后,发送2个字节的CRC校验数据 。 由于SPI模式下不对数据进行CRC校验,直接发送两个字节的0xff即可;
  5. 校验数据发送完成后,等待SD卡响应;
  6. SD卡返回响应数据后会进入写忙状态MISO引脚为低电平即此时不允许其它操作。当检测到MISO引脚为高电平时,SD卡此时退出写忙状态
  7. 拉高CS引脚 ,等待8个时钟周期后允许进行其它操作。

SD卡读操作流程

SD卡读操作时序图如下图所示。
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协议介绍

  SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是 一种高速、全双工、同步的通信总线,只需要四根信号线即可,节约引脚,同时有利于PCB的布局 。
  SPI的通信以主从方式工作,通常有一个主设备(此处指FPGA)和一个或多个从设备(此处 指 SD卡)。SPI通信需要四根线,分别为SPI_CS、SPI_CLK、SPI_MOSI和 SPI_MISO。其中 SPI_CS、SPI_CLK和 SPI_MOSI由主机输出给从机,而SPI_MISO由从机输出给主机。SPI_CS用于控制芯片是否被选中,也就是说只有片选信号有效时( 对于 SD卡 来说是低电平有效),对芯片的操作才有效;SPI_CLK是由主机产生的同步时钟,用于同步数据;SPI_MOSI和 SPI_MISO是主机发送和接收的数据脚。

  一般而言,SPI通信有4种不同的模式,不同的从设备在出厂时被厂家配置为其中一种模式,模式是不允许用户修改的。主设备和从设备必须在同一模式下进行通信,否则数据会接收错误 。
  SPI的通信模式是由CPOL(时钟极性)和 CPHA(时钟相位 )来决定的,四种通信模式如下:
模式0: CPOL = 0, CPHA = 0;
模式1: CPOL = 0, CPHA = 1;
模式2: CPOL = 1, CPHA = 0;
模式3: CPOL = 1, CPHA = 1。
CPOL控制着 SPI_CLK的 时钟 极性 ,时钟极性变化如下图所示:
PI_CLK时钟极性
  当CPOL = 1时SPI_CLK在空闲时为高电平,发起通信后的第一个时钟沿为下降沿;CPOL = 0时SPI时钟信号SPI_CLK空闲时为低电平,发起通信后的第一个时钟沿为上升沿。

  CPHA用于控制数据与时钟的对齐模式,其不同模式下的时序图如下图所示:
不同CPHA模式下的时序图
  当CPHA=1时时钟的第一个变化沿(上升沿或者下降沿)数据开始改变,那么也就意味着时钟的第2个变化沿(与第一个变化沿相反)锁存数据; 当CPHA=0时数据在时钟的第一个变化沿之前就已经改变并且保持稳定,也就意味着在时钟的第一个变化沿锁存数据。

  对于SD卡的SPI模式而言,采用的SPI的通信模式为模式3,即CPOL=1,CPHA=1;在SD卡2.0版本协议中SPI_CLK时钟频率可达50Mhz

FAT文件系统

  而SD卡经常被用来在Windows操作系统上存取数据,必须使用Windows操作系统支持的FAT文件系统才能在电脑上正常使用。

  FAT(File Allocation Table,文件分配表)是 Windows操作系统所使用的一种文件系统。FAT文件系统用“簇”作为数据单元,一个“簇” 由一组连续的扇区组成,而一个扇区由 512个字节组成。簇所包含的扇区数必须是2的整数次幂,其扇区个数最大为64,即 32KB(512Byte * 64 = 32KB)。所有的簇从2开始进行编号,每个簇都有一个自己的地址编号,用户文件和目录都存储在簇中。
  FAT文件系统的基本结构依次为:分区引导记录、文件分配表(FAT表1和FAT表2)、根目录和数据区。
  分区引导记录:分区引导记录区通常占用分区的第一个扇区,共512个字节。包含四部分内容:BIOS参数记录块BPB(BIOS Parameter Block)、磁盘标志记录表、分区引导记录代码区和结束标志 0x55AA。
  文件分配表(FAT表 1和 FAT表 2):文件在磁盘上以簇为单位存储,但是同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,往往会分成若干簇,FAT表就是记录文件存储中簇与簇之间连接的信息,这就是文件的链式存储。对于 FAT16文件 系统来说 ,每个簇用16Bit来表示文件分配表,而对于FAT32文件 系统 ,使用32Bit来表示文件分配表,这是两者之间的最重要区别。
  根目录:根目录是文件或者目录的首簇号。在FAT32文件系统 中, 不再对 根目录的位置做硬性规 定,可以存储在分区内可寻址的任意簇内。不过通常根目录是最早建立的 (格式化就生成了 )目录表,所以我们看到的情况基本上都是根目录首簇紧邻 FAT2,占簇区顺序上的第 1个簇(即 2号簇)。
  数据区:数据区紧跟在根目录后面,是文件等数据存放的地方,占用大部分的磁盘空间。
仿真:待续……

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cda备考学习学习笔记——基础知识篇(二)主要涉及了计算机科学与技术领域的基本概念和知识。 首先,它介绍了计算机网络的基础知识。网络是将多台计算机通过通信链路连接起来,使它们能够相互通信和共享资源的系统。笔记中详细介绍了网络的组成、拓扑结构和通信协议等重要内容。 其次,笔记还解释了计算机系统的基本组成。计算机系统由硬件和软件两部分组成,其中硬件包括中央处理器、存储器、输入输出设备等,而软件则分为系统软件和应用软件。笔记详细介绍了各种硬件和软件的功能和作用。 此外,笔记还对数据库管理系统进行了介绍。数据库管理系统是一种用于管理和组织数据的软件系统,它能够实现数据的存储、检索和更新等操作。笔记中详细介绍了数据库的概念、结构和操作等内容。 最后,笔记还包括了算法和数据结构的基础知识。算法是解决问题的一系列步骤和规则,而数据结构则是组织和存储数据的方式。笔记中介绍了常用的算法和数据结构,如排序算法、树和图等。 总之,通过学习CDA备考学习笔记中的基础知识篇(二),我们能够更好地理解计算机网络、计算机系统、数据库管理系统以及算法和数据结构等相关概念和知识。这些基础知识对于我们深入研究计算机科学与技术领域是非常重要的,也为我们日后的学习和工作奠定了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值