基于SPI模式的SD卡驱动器及其控制方法与流程

文档序号:14911098发布日期:2018-07-10 23:26阅读:416来源:国知局

本发明涉及一种基于SPI模式的SD卡驱动器及其控制方法。



背景技术:

目前,SD卡驱动器实现方法主要有用SOPC架构,依靠封装在FPGA器件中的嵌入式软核处理器(例如Altera的FPGA器件中Nios II处理器)实现SD卡驱动器,但无法直接应用在VLSI设计中。

采用C语言开发SD卡驱动器由于得到众多嵌入式芯片厂商的技术支持所以应用起来非常简单方便,主要用于嵌入式系统中,在目前的ARM系列处理器中都有很广泛的应用,甚至在FPGA的嵌入式软核Nios II也使用较多,但是其技术实现通常是黑盒,无法根据实际需求移植和修改以应用在VLSI设计中,同时速度也受到了处理器性能的限制不易调节,而且需要购买相应的嵌入式处理器和配套的调试软件导致外围电路复杂且成本较高。

4位SD总线通讯模式相对于SPI通讯模式的SD卡驱动器数据传输速率高,但是传输协议复杂,用硬件描述语言实现时逻辑资源消耗大。基于SPI模式的SD卡驱动器采用模块化功能划分优化系统架构,使得SPI模式的SD卡驱动器性能大幅度提高的同时减小逻辑资源消耗,能够满足使SD卡作为数据存储器直接应用于音频、视频、图像处理等VLSI设计中,发挥SD卡体型小、数据存储量大、数据传输速率快等优秀特点,为高性能数字IC设计和验证领域中急需的更贴近设计应用环境、可直观演示、高传输速率、易刷新等实验数据存储需求提供新的解决方案。



技术实现要素:

本发明的目的在于提供一种基于SPI模式的SD卡驱动器及其控制方法,该SD卡驱动器数据传输速度可调节、硬件资源消耗小和可热插拔的优点,输入输出数据经过同步Fifo缓存,使得本SD卡驱动器可以兼容不同数据吞吐速率的音视频等数据处理器,采用模块化功能划分,提高了设计的可移植性和可维护性,挂载FAT32文件系统可以实现在装有Windows 操作系统的上位机中对待处理数据文件的修改和拷贝。

为实现上述目的,本发明的技术方案是:一种基于SPI模式的SD卡驱动器,包括SD卡控制器模块、Fifo缓存模块、FAT32文件系统模块,所述SD卡控制器模块通过SPI总线与SD卡连接,SD卡控制器模块还通过Wishbone总线与FAT32文件系统模块连接,FAT32文件系统模块还与所述Fifo缓存模块连接。

在本发明一实施例中,所述SD卡控制器模块包括Wishbone总线从机、SPI主机控制器、SD初始化控制器、命令发送响应控制器、读写数据控制器、数据传输控制器、读写数据缓存器、SPI主机接口,Wishbone总线从机与SPI主机控制器、读写数据缓存器连接,SPI主机控制器还与读写数据控制器、SD初始化控制器、数据传输控制器连接,SD初始化控制器经命令发送响应控制器与读写数据控制器连接,数据传输控制器经SPI主机接口与读写数据缓存器连接,SPI主机接口还与SD卡连接。

在本发明一实施例中,所述Wishbone总线从机包括Wishbone从机控制器、Wishbone从机接口,Wishbone从机控制器与SPI主机控制器连接,Wishbone从机接口与读写数据缓存器连接,Wishbone从机控制器、Wishbone从机接口经Wishbone总线主机与FAT32文件系统模块连接。

本发明还提供了一种基于上述所述的基于SPI模式的SD卡驱动器的控制方法,实现如下:

(1)Fifo缓存模块的读、写入控制逻辑功能:

FAT32文件系统模块从SD卡控制器模块取出1024+512个字节的数据并同时写入到Fifo缓存模块中,此时Fifo缓存模块中无数据读出;停止写入数据到Fifo缓存模块,开始从Fifo缓存模块中读出512个字节的数据,FAT32文件系统模块在从SD卡控制器模块取出512个字节的数据同时写入到Fifo缓存模块中,此时Fifo缓存模块中有数据读出;

(2)FAT32文件系统模块和Wishbone总线读取SD卡中文件功能:

FAT32文件系统模块根据SD卡驱动器当前执行的功能和SD卡反馈的卡片信息向Wishbone总线主机发送命令参数,Wishbone总线主机将命令参数拆分成4个字节,Wishbone总线主机将命令字的第1个字节通过address地址接口发送到Wishbone总线从机,命令字的第2、3、4、5 字节为命令参数通过data_o数据接口发送到Wishbone总线从机;Wishbone总线从机根据address地址接口接收到的信息判断当前由Wishbone总线从机通过data_o数据接口发送到Wishbone总线主机的数据是SD卡控制器模块传输过来的SD卡反馈的卡片信息或者是SD卡各个扇区读出的存储数据;

Wishbone总线主机的Wishbone主机接口通过操作结束方式信号来了解SD卡控制器模块中的Wishbone从机接口的工作状态;操作结束方式信号为高电平时表示SD卡控制器模块中的Wishbone从机接口向Wishbone主机接口数据传输正常,反之则表示数据传输不正常;

Wishbone总线主机通过Wishbone总线接口信号中的地址信号控制Wishbone从机接口的数据传输状态和类型,通过Wishbone总线接口信号中的选通信号和写使能信号控制Wishbone从机接口数据传输的起始和终止;

(3)SD卡控制器模块基于SPI通讯模式下的包括SD卡的复位、初始化、读单块、写单块、读多块、写多块操作功能:

1)Wishbone总线从机

Wishbone从机接口负责与SD卡控制器模块中各个模块进行数据和命令交互,并将SD卡控制器模块的状态作为响应传递回Wishbone总线主机;当处于数据读取状态时,Wishbone从机控制器通过判断主机地址类型,选择从SPI主机控制器读取数据并传输给wishbone主机接口或者将数据从读写数据Fifo缓存模块中取出并传输给wishbone主机接口;当处于数据写入状态时,Wishbone从机控制器将数据从Wishbone主机接口中取出并传输给读写数据缓存器;

2)SPI主机控制器

系统上电复位后首先由SPI主机控制器通过控制寄存器和状态寄存器向SD卡初始化控制器模块发送使能信号,使SD卡完成初始化;SPI主机控制器在接收到SD卡完成初始化的反馈信号后,向读写数据控制器发送读或写请求;

3)SD初始化控制器

SD初始化控制器在接收到SPI主机控制器发送的使能信号后开始工作,产生复位命令CMD0,通过命令发送响应控制器发送给SD卡,在有效时间内收到正确的响应,复位完成;然后产生初始化命令CMD1,通过命令发送响应控制器发送给SD卡,在有效时间内收到正确的响应,初始化完成,SD卡进入SPI模式;

4)命令发送响应控制器

命令发送响应控制器在接收到SPI主机控制器发送的使能信号后开始工作;将命令拼接成SD卡协议中规定的6字节格式,发送给SD卡;对于收到的反馈,判断是否是SD卡的响应以及是否响应超时;

5)读写数据控制器

读写数据控制器在接收到SPI主机发送的读或写使能信号后开始进入相应的状态;若收到写使能信号,产生单块写命令CMD24,通过命令发送响应控制器发送给SD卡;若在有效时间内收到正确的响应,则产生数据起始令牌,与512字节数据、2字节的CRC一起写入读写数据缓存器;若在有效时间内收到的响应最后五位为00101,则SD卡成功接收数据;在SD卡忙状态时判断SD卡是否写超时,超过250ms仍处于忙状态则写错误;若收到读使能信号,产生单块读命令CMD17,通过命令发送响应控制器发送给SD卡;若在有效时间内收到正确的响应,则开始接收数据起始令牌;若在100ms内未收到数据起始令牌,则读超时,读SD卡错误;若接收到数据起始令牌,则将之后接收到的512字节数据写入读写数据缓存器;

6)数据传输控制器

数据传输控制器是控制读写数据缓存器的模块;若收到命令发送响应控制器的使能信号时,接收命令发送响应控制器发送的6字节命令,并逐一发送给SPI主机接口;若收到读写数据控制器的写使能信号,则读取读写数据缓存器Tx_FIFO中的512字节数据并将其发送给SPI主机接口;在数据传输的开始之前以及结束之后,发送8位高电平信号给SPI主机接口,维持时钟并且保持MOSI为高;在接收数据及响应时,通过Fifo缓存模块内数据状态标志位信号来控制数据的接收过程;

7)读写数据缓存器

读写数据缓存器是缓存读写数据的存储器,负责存储要写入SD卡的512字节数据以及从SD卡读出的512字节数据;

8)SPI主机接口

SPI主机接口是与SD卡直接通信的模块;通过两个移位寄存器,将读写数据缓存器输出的并行数据转换为串行数据传输给SD卡,将SD卡输出的串行数据转换为并行数据存入读写数据缓存器;同时给SD卡提供时钟信号。

在本发明一实施例中,所述卡片信息,即:从根目录数据中解析出当前文件占用的字节数;用启动区中的数据计算出根目录和FAT1的起始地址,用根目录起始地址对应的内容得到第一个簇在数据区的地址;用FAT1起始地址对应的内容得到第二个簇在数据区的地址和第三个簇在FAT1中的地址。

相较于现有技术,本发明具有以下有益效果:本发明具有数据传输速度可调节、硬件资源消耗小和可热插拔的优点,输入输出数据经过同步Fifo缓存,使得本SD卡驱动器设计可以兼容不同数据吞吐速率的音视频等数据处理器。采用模块化功能划分,提高了设计的可移植性和可维护性,挂载FAT32文件系统可以实现在装有Windows 操作系统的上位机中对待处理数据文件的修改和拷贝,进而将这些数据应用于Matlab等专业数据分析、处理软件平台,对正在开发的高性能数字IC做更细致和深入的研究,是VLSI设计研发和调试中一种极为方便的数据读取和保存的重要IP核。SPI总线在芯片中只占用四根管脚用来控制以及数据传输,节约了芯片的管脚数目,同时为产品PCB布局上节省了空间。

附图说明

图1是本发明SD卡驱动器系统框图。

图2是本发明读、写入控制逻辑下Fifo缓存内数据量变化趋势图。

图3是本发明FAT32文件系统和Wishbone总线模块示意图。

图4是本发明SD卡控制器示意图。

具体实施方式

下面结合附图,对本发明的技术方案进行具体说明。

本发明的一种基于SPI模式的SD卡驱动器,包括SD卡控制器模块、Fifo缓存模块、FAT32文件系统模块,所述SD卡控制器模块通过SPI总线与SD卡连接,SD卡控制器模块还通过Wishbone总线与FAT32文件系统模块连接,FAT32文件系统模块还与所述Fifo缓存模块连接。

在本发明一实施例中,所述SD卡控制器模块包括Wishbone总线从机、SPI主机控制器、SD初始化控制器、命令发送响应控制器、读写数据控制器、数据传输控制器、读写数据缓存器、SPI主机接口,Wishbone总线从机与SPI主机控制器、读写数据缓存器连接,SPI主机控制器还与读写数据控制器、SD初始化控制器、数据传输控制器连接,SD初始化控制器经命令发送响应控制器与读写数据控制器连接,数据传输控制器经SPI主机接口与读写数据缓存器连接,SPI主机接口还与SD卡连接。

在本发明一实施例中,所述Wishbone总线从机包括Wishbone从机控制器、Wishbone从机接口,Wishbone从机控制器与SPI主机控制器连接,Wishbone从机接口与读写数据缓存器连接,Wishbone从机控制器、Wishbone从机接口经Wishbone总线主机与FAT32文件系统模块连接。

以下为本发明的具体实施过程。

本发明应用于高性能数字IC设计和验证领域,当从SD卡中读取数据时,输出数据经过同步Fifo缓存,使得本SD卡驱动器设计可以兼容不同数据吞吐速率的音视频等数据处理器。本文设计的SD卡驱动器采用技术方案如下所述:

本SD卡驱动器由SD卡控制器挂载FAT32文件系统构成;使用Wishbone总线作为片上总线,其中FAT32文件系统模块作为Wishbone总线上的主机设备,SD卡控制器模块作为Wishbone总线上的从机设备;SD卡驱动器输入和输出数据经过宽度为8位,深度为2048的Fifo缓存。SD卡驱动器系统框图如图1所示。由三个部分构成,分别为Fifo缓存,FAT32文件系统和Wishbone总线,SD卡控制器。

SD卡驱动器中各模块之间连接关系如下所述:

SD卡驱动器输出的数据经过宽度为8位,深度为2048的Fifo缓存,使得本SD卡驱动器可以兼容不同数据吞吐速率的音视频等数据处理器;FAT32文件系统模块通过Wishbone总线访问SD卡控制器模块,SD卡控制器模块将FAT32文件系统模块经由Wishbone总线主机发出的扇区读、写等指令转换为地址信号与SD卡进行数据块交互的命令;SD卡控制器模块通过SPI总线连接SD卡,在SPI通信模式下完成对符合SD卡3.0版本规范的不同存储容量的SD卡进行初始化和SD卡中文件读写等操作。

SD卡驱动器中各模块功能如下所述:

1、Fifo缓存

SD卡驱动器中Fifo缓存为SCFIFO(读、写使用同一个时钟);存储器宽度为8位,深度为2048;rst下降沿复位清空Fifo缓存;使用Normal mode的Rdreq读请求信号作为读取Fifo的请求信号(高有效),读取数据在Rdreq置位后的第二个时钟周期有效;Wrreq写请求信号作为写入Fifo的请求信号(高有效);usedw数据数量寄存器显示Fifo缓存中存储数据的数量。Fifo缓存的读、写入控制逻辑采用两段式摩尔状态机实现,状态在IDLE(空闲,state置0),FILL(填充,state置1)之间跳转。在读、写入控制逻辑下Fifo缓存内数据量变化趋势图如图2所示。

Fifo缓存的读、写入控制逻辑功能如下所述:

FAT32文件系统从SD卡控制器模块取出1024+512个字节的数据并同时写入到Fifo缓存中,此时Fifo中无数据读出;停止写入数据到Fifo缓存,开始从Fifo缓存中读出512个字节的数据;FAT32文件系统在从SD卡控制器模块取出512个字节的数据同时写入到Fifo缓存中,此时Fifo中有数据读出。

2、FAT32文件系统和Wishbone总线

为在装有Windows 操作系统的上位机中方便的创建、读取和修改SD 卡中数据,数据通常以文件的形式存储在SD 卡中,因此在使用SD卡作为数据存储设备的数字集成电路设计和验证中配以文件系统可以方便地读取装有Windows 操作系统的上位机传入的文件中数据。本SD 卡驱动器设计中采用FAT32 文件系统以适应较大容量的SD 卡。Wishbone总线由Wishbone总线主机模块和Wishbone总线从机模块,FAT32文件系统和Wishbone总线模块设计如图3所示。

以SD卡中仅存有一个文件,读取这个文件中数据为例说明FAT32文件系统和Wishbone总线功能如下所述:

FAT32文件系统根据SD卡驱动器当前执行的功能(读取、写入等功能)和SD卡反馈的卡片信息(从根目录数据中解析出当前文件占用的字节数;用启动区中的数据计算出根目录和FAT1的起始地址,用根目录起始地址对应的内容得到第一个簇在数据区的地址;用FAT1起始地址对应的内容得到第二个簇在数据区的地址和第三个簇在FAT1中的地址)向Wishbone总线主机发送命令参数。(注:FAT1每一个地址对应的内容是当前簇号在数据区的地址和下一个簇号在FAT1中的地址);发送到Wishbone总线主机模块,Wishbone总线主机模块将命令参数拆分成4个字节,Wishbone总线主机模块将命令字的第1个字节通过address地址接口发送到Wishbone总线从机模块,命令字的第2、3、4、5 字节为命令参数通过data_o数据接口发送到Wishbone总线从机模块;Wishbone总线从机模块根据address地址接口接收到的信息判断当前由Wishbone总线从机通过data_o数据接口发送到Wishbone总线主机的数据是SD卡控制器传输过来的SD卡反馈的卡片信息或者是SD卡各个扇区读出的存储数据,例如当地址译码为读单块数据时,则Wishbone总线从机连续发送读单块数据命令给SD卡控制器,并记录文件数据当前读出的字节数,直到读出的字节数大于等于文件占用的字节数。

Wishbone主机接口通过操作结束方式信号来了解SD卡控制器中的Wishbone从机接口的工作状态。操作结束方式信号为高电平时表示SD卡控制器中的Wishbone从机接口向Wishbone主机接口数据传输正常,反之则表示数据传输不正常。

Wishbone主机通过Wishbone总线接口信号中的地址信号控制Wishbone从机接口的数据传输状态和类型(接收数据或者发送数据状态),通过Wishbone总线接口信号中的选通信号和写使能信号控制Wishbone从机接口数据传输的起始和终止。

3、SD卡控制器

SD卡控制器由8个模块组成,Wishbone总线从机、SPI主机控制器、SD初始化控制器、命令发送响应控制器、读写数据控制器、数据传输控制器、读写数据缓存器、SPI主机接口。各部分之间通过控制寄存器、状态寄存器和数据线协调工作和传输数据。

本系统设计中的SD卡控制器模块为SD卡提供运行时钟并且支持基于SPI通讯模式下的SD卡、Micro SD卡、MMC卡、TF卡等的复位、初始化、读单块、写单块、读多块、写多块操作。SD卡控制器如图4所示。

1)Wishbone总线从机

Wishbone从机接口负责与SD卡控制器中各个模块进行数据和命令交互,并将SD卡主机模块的状态(是否应答及传输状态)作为响应传递回Wishbone主机。

当处于数据读取状态时,Wishbone从机控制器通过判断主机地址类型,选择从SPI主机控制器读取数据并传输给wishbone主机接口或者将数据从读写数据Fifo缓存器中取出并传输给wishbone主机接口;当处于数据写入状态时,Wishbone从机将数据从Wishbone主机接口中取出并传输给读写数据缓存器。

Wishbone总线从机由Wishbone从机接口、Wishbone从机控制器构成,从机接口负责地址和数据的读取和写入,从机控制器负责通过地址判断传输给主机数据来源(SD卡反馈的卡片信息或者SD卡各个扇区读出的存储数据)。本设计中Wishbone总线采用“点到点”连接方式。因为CYC_O信号用于多主设备的仲裁请求,所以在 “点到点”连接方式中缺省。由于每次操作中数据全部有效,所以本设计中不设置SEL_O信号。

2)SPI主机控制器

SPI主机控制器的控制逻辑由有限状态机实现。SPI主机控制器根据地址类型和传输模式将SD卡响应经Wishbone总线从机发送到Wishbone总线主机。每个模块都设计了使能信号和反馈信号,SPI主机控制器通过检测其余模块的反馈信号决定下一步状态,通过控制其余模块的使能信号决定其工作状态。系统上电复位后首先由SPI主机控制器通过控制寄存器和状态寄存器向SD卡初始化控制器模块发送使能信号,使SD卡完成初始化。SPI主机在接收到SD卡完成初始化的反馈信号后,向读写数据控制器发送读或写请求。

3)SD初始化控制器

SD初始化控制器在接收到SPI主机发送的使能信号后开始工作,产生复位命令CMD0,通过命令发送响应控制器发送给SD卡,在有效时间内收到正确的响应01h,复位完成。然后产生初始化命令CMD1,通过命令发送响应控制器发送给SD卡,在有效时间内收到正确的响应00h,初始化完成,SD卡进入SPI模式。

4)命令发送响应控制器

命令发送响应控制器在接收到SPI主机控制器发送的使能信号后开始工作。将命令拼接成SD卡协议中规定的6字节格式,发送给SD卡。对于收到的反馈,判断是否是SD卡的响应以及是否响应超时。

5)读写数据控制器

读写数据控制器在接收到SPI主机发送的读或写使能信号后开始进入相应的状态。若收到写使能信号,产生单块写命令CMD24,通过命令发送响应控制器发送给SD卡。若在有效时间内收到正确的响应00h,则产生数据起始令牌FEh,与512字节数据、2字节的CRC一起写入读写数据缓存器。若在有效时间内收到的响应最后五位为00101,则SD卡成功接收数据。在SD卡忙状态时判断SD卡是否写超时,超过250ms仍处于忙状态则写错误。若收到读使能信号,产生单块读命令CMD17(第1个字节的最高位始终为0——起始位;次高位为1——表示命令是由主机向SD 卡发送的命令,后六位是命令索引;命令字的第2、3、4、5 字节为命令参数,若是读单块命令,则命令参数是扇区地址;最后一个字节是CRC校验字节),通过命令发送响应控制器发送给SD卡。若在有效时间内收到正确的响应00h,则开始接收数据起始令牌FEh。若在100ms内未收到数据起始令牌,则读超时,读SD卡错误。若接收到数据起始令牌,则将之后接收到的512字节数据写入读写数据缓存器。

6)数据传输控制器

数据传输控制器是控制读写数据缓存器的模块。若收到命令发送响应控制器的使能信号时,接收命令发送响应控制器发送的6字节命令,并逐一发送给SPI主机接口。若收到读写数据控制器的写使能信号,则读取写数据Fifo缓存器Tx_FIFO中的512字节数据并将其发送给SPI主机接口。在数据传输的开始之前以及结束之后,发送8位高电平信号给SPI主机接口,维持时钟并且保持MOSI为高。在接收数据及响应时,通过Fifo内数据状态标志位信号来控制数据的接收过程。

7)读写数据Fifo缓存器

读写数据缓存器是缓存读写数据的存储器,负责存储要写入SD卡的512字节数据以及从SD卡读出的512字节数据。本设计中设计了一个一次可以存储64个8位数据,即128字节的异步FIFO。并且还设计了Wishbone从机与FIFO之间的控制器,实现了将要写入SD卡的数据直接从Wishbone从机存入FIFO,以及将SD卡读出的数据直接传递给Wishbone从机。

8)SPI主机接口

SPI主机接口是与SD卡直接通信的模块。由于SPI通信是串行通信,所以需要进行串并转换。通过两个移位寄存器,将写数据缓存器输出的并行数据转换为串行数据传输给SD卡,将SD卡输出的串行数据转换为并行数据存入读数据缓存器。同时给SD卡提供时钟信号。基于SPI模式的SD卡驱动器,SD卡命令字发送后会跟随对应的SD卡响应,用于指示命令或数据传输是否成功,有效地弥补了普通SPI总线缺乏应答机制以确认是否接收到数据的原理缺陷。

以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1