[go: up one dir, main page]

CN102436428A - 基于fpga的sd卡文件管理控制器 - Google Patents

基于fpga的sd卡文件管理控制器 Download PDF

Info

Publication number
CN102436428A
CN102436428A CN2011103579366A CN201110357936A CN102436428A CN 102436428 A CN102436428 A CN 102436428A CN 2011103579366 A CN2011103579366 A CN 2011103579366A CN 201110357936 A CN201110357936 A CN 201110357936A CN 102436428 A CN102436428 A CN 102436428A
Authority
CN
China
Prior art keywords
card
command
file
data
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2011103579366A
Other languages
English (en)
Inventor
贺前华
何健伦
宋利伟
黄鹏飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
South China University of Technology SCUT
Original Assignee
South China University of Technology SCUT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by South China University of Technology SCUT filed Critical South China University of Technology SCUT
Priority to CN2011103579366A priority Critical patent/CN102436428A/zh
Publication of CN102436428A publication Critical patent/CN102436428A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于FPGA的SD卡文件管理控制器,包括FPGA芯片、串行配置芯片、SDRAM存储器、主控器接口、SD卡插座、FAT32文件管理单元、SD卡接口单元;FAT32文件管理单元为主控器提供主控器接口、操作文件系统的用户命令,主控器通过该接口在SD卡文件管理控制器的寄存器中写入用户命令;SD卡接口单元在FAT32文件管理单元的控制下,负责SD卡命令的产生和应答接收,以及SD卡中数据的读写;该发明能解决SD卡接口控制装置接口通用性差、移植困难,操作接口复杂、使用不方便,读写SD卡的速度慢等问题,提供了一种通用性强、操作接口方便、能高速读写SD卡的文件管理控制器。

Description

基于FPGA的SD卡文件管理控制器
技术领域
本发明涉及一种对SD接口卡进行控制的装置,具体涉及一种基于FPGA的SD卡文件管理控制器。
背景技术
SD卡(Secure Digital Memory Card)是一种基于半导体闪存工艺的存储卡,1999年,由日本松下、东芝及美国SanDisk公司共同研制完成。当前,人们对大数据量的高速存储需求越来越高。SD卡作为新一代数据存储设备,具有体积小、容量高、数据传输速率快、移动灵活性好以及安全性高等特点,很好地满足了市场的具体需求,被广泛用于便携式消费类电子设备和工业控制领域中。
SD卡中的数据是以块为单位进行存储的,但是为了更有效地组织和管理SD卡中的数据,必须采用文件的格式组织数据。目前,SD卡一般采用FAT32文件系统。
面对人们对大数据量的高速存储需求,目前市场上的SD卡接口控制装置存在着明显的缺陷:1.读写SD卡的速度慢。目前的SD卡接口控制器大多采用了SD卡的SPI模式或者1位的SD模式读写SD卡,而很少采用4位数据线的SD模式,即使采用了4位的SD模式,由于控制装置内的缓冲区小、很多处理模块非硬件实现等原因导致读写的速度不高。2.提供的操作接口复杂,使用不方便。目前的SD卡接口控制装置没有提供便捷的SD卡文件管理的功能,用户需要对SD卡底层的物理规范协议很熟悉才能通过控制装置完成对SD卡的操作。3.提供的接口不通用,移植性差。目前的SD卡接口控制装置提供给用户的接口很少采用标准的总线,大多是针对特定的应用而开发的,因而导致了移植困难,通用性差。
发明内容
本发明的目的是克服现有技术中的不足之处,提供一种基于FPGA的SD卡文件管理控制器。
本发明是通过下述技术方案实现的。
基于FPGA的SD卡文件管理控制器,包括FPGA芯片、串行配置芯片、SDRAM存储器、主控器接口、SD卡插座,其中在FPGA内部实现FAT32文件管理单元和SD卡接口单元;
FAT32文件管理单元为主控器提供主控器接口、操作文件系统的用户命令,主控器通过该接口在SD卡文件管理控制器的寄存器中写入用户命令即可完成对SD卡中FAT32文件系统的管理;
SD卡接口单元在FAT32文件管理单元的控制下,负责SD卡命令的产生和应答接收,以及SD卡中数据的读写;
在读写SD卡中的数据时,采用了4位数据线宽的SD模式;
所述的FAT32文件管理单元包括:NIOS II处理器、EPCS控制模块、SDRAM控制模块、主控器接口模块、Avalon总线、Avalon接口模块;
所述NIOS II处理器通过主控器接口模块获取主控器输入的用户命令与数据,并反馈信息给主控器;
所述NIOS II处理器通过Avalon接口模块与SD卡接口单元进行通信。
所述的FAT32文件管理单元上面移植了FATFS文件系统模块。
所述的SD卡接口单元包括:读写缓冲FIFO模块、 SD卡数据控制模块、SD卡命令控制模块和SD卡时钟控制模块;
所述读写缓冲FIFO模块负责缓存读写SD卡时的数据;
所述SD卡数据控制模块负责DAT线上数据的接收和发送以及数据的校验;
所述SD卡命令控制模块负责控制CMD线上命令发送和回复接收;
所述SD卡时钟控制模块负责控制CLK时钟线的频率,以控制读写SD卡的数据速率。
所述的SD卡接口单元由FPGA内部逻辑资源组成,用硬件电路的方式来实现数据高速接收与发送。
所述的主控器接口为8位地址线、8位数据线、读使能、写使能、中断信号、时钟信号、复位信号和片选信号。
所述操作文件系统的用户命令包括新建、打开、读写、关闭文件,新建、打开、关闭目录,磁盘容量查询、空闲扇区查询、以扇区或字节为单位对文件进行读写。
本发明具有的有益效果是:
1、本发明提供8位地址线ADDR0~ADDR7、8位数据线DATA0~DATA7、读使能RD、写使能WR、中断信号INT、时钟信号CLK、复位信号RESERT和片选信号CS的主控器接口,主控器通过此接口往SD卡文件管理控制器的寄存器中写入特定的用户命令来完成对SD卡中FAT32文件系统的管理。主控器可以很容易和本发明进行连接,操作本发明就像访问同步SRAM存储器一样。解决了传统SD卡接口控制器装置接口不通用,移植性差的缺陷;
2、本发明提供了新建、打开、读写、关闭文件;新建、打开、关闭目录;磁盘容量查询、空闲扇区查询,以扇区或字节为单位对文件进行读写等常用的操作文件系统的用户命令,屏蔽了SD卡中FAT32文件系统的组织形式。用户只需往本发明对应的寄存器中写入既定的用户命令,即可实现上述所有的操作。上述机制使得本发明操作简单,易于使用;
3、本发明为用户屏蔽了SD卡底层的物理规范协议,即使用户完全不熟悉SD卡底层的物理规范协议也能够使用本发明完成对SD卡中数据的读写。在读写SD卡中的数据时,采用了4位数据线宽的SD模式以及大容量的读写FIFO,实现了对SD卡中文件的快速读写。
附图说明
图1是基于FPGA的SD卡文件管理控制器的框图,
图2是FPGA里的FAT32文件管理单元电路结构图,
图3是FPGA里的SD卡接口单元电路结构图,
图4是运行在软核处理器上的程序流程图。
图中示出:
1--FPGA芯片,2--FAT32文件管理单元,3--SD卡接口单元,4--串行配置芯片,5-- SDRAM存储器,6--主控器接口,7--NIOS II处理器,8-- EPCS控制模块,9-- SDRAM控制模块,10--主控器接口模块,11-- Avalon总线,12-- Avalon接口模块,13--读写缓冲FIFO模块,14-- SD卡数据控制模块,15-- SD卡插座,16-- SD卡命令控制模块,17--SD卡时钟控制模块。
具体实施方式
下面结合实施例,对本发明进行详细说明。
如图1所示,本发明包括FPGA芯片1、串行配置芯片4、SDRAM存储器5、主控器接口6、SD卡插座15,其中在FPGA1内部实现FAT32文件管理单元2和SD卡接口单元3所述的FAT32文件管理单元2包括NIOS II处理器7、EPCS控制模块8、SDRAM控制模块9和主控器接口模块10、Avalon总线11、Avalon接口模块12;
所述的SD卡接口单元3包括读写缓冲FIFO模块13、 SD卡数据控制模块14、SD卡命令控制模块16和SD卡时钟控制模块17。
如图2所示的是所述FPGA里的FAT32文件管理单元电路结构图。FAT32文件管理单元由NIOS II处理器7、EPCS控制模块8、SDRAM控制模块9、主控器接口模块10、Avalon总线11和Avalon接口模块12组成。图中,EPCS控制模块8通过FPGA芯片1的特定引脚与串行配置芯片4采用的EPCS16芯片进行连接;引脚addr_sdram[12..0]、ba_sdram[1..0]、cas_n_sdram、cke_sdram、cs_n_sdram、dq_sdram[15..0]、dqm_sdram[1..0]、ras_n_sdram、we_n_sdram为SDRAM控制模块9的引出端口,并且与SDRAM存储器5所采用的HY57V561620T芯片的A12~A0、BA1~BA0、CAS、CKE、CS、DQ15~DQ0、DQM1~DQM0、RAS、WE端口对应连接;引脚mcu_rst、mcu_clk、mcu_wren、mcu_rden、mcu_int、mcu_address[7..0]、mcu_data[7..0]为主控器接口模块10的引出端口;sd_interface_clk、sd_interface_reset、sd_cmd_ctrl[15..0]、sd_cmd_status[3..0]、divider[7..0]、sd_data_ctrl[15..0]、sd_data_status[3..0]、nios_data[7..0]、nios_wrreq、nios_rdreq、nios_fifo_clk为Avalon接口模块12的引出端口。
NIOS II处理器7通过EPCS控制模块8和SDRAM控制模块9来控制FPGA外部的串行配置芯片4和SDRAM存储器5;NIOS II处理器7通过主控器接口模块10来获取来自主控器的用户命令与数据,并反馈信息给主控器。NIOS II处理器7通过Avalon接口模块12与SD卡接口单元进行通信,以实现快速读写SD卡。
如图3所示为SD卡接口单元电路结构图。SD卡接口单元3由读写缓冲FIFO模块13、SD卡数据控制模块14、SD卡命令控制模块16和SD卡时钟控制模块17组成。图中,读写缓冲FIFO模块13负责SD卡数据的缓冲,其端口nios_data[7..0]、nios_wrreq、nios_rdreq、nios_fifo_clk与Avalon接口模块12的nios_data[7..0]、nios_wrreq、nios_rdreq、nios_fifo_clk相连,host_data[7..0]、host_wrreq、host_rdreq、host_fifo_clk与SD卡数据控制模块14的host_data[7..0]、host_wrreq、host_rdreq、host_fifo_clk相连;SD卡数据控制模块14负责DAT线上数据的接收和发送以及数据的检验,其端口reset_n、sd_cmd_ctrl[15..0]、sd_cmd_status[3..0]与Avalon接口模块12的sd_interface_reset、sd_cmd_ctrl[15..0]、sd_cmd_status[3..0]相连,sd_data[3..0]与SD卡插座15的DAT[3..0]相连;SD卡命令控制模块16主要负责控制CMD线上命令发送和回复接收,其端口reset_n、sd_data_ctrl[15..0]、sd_data_status[3..0]与Avalon接口模块12的sd_interface_reset、sd_data_ctrl[15..0]、sd_data_status[3..0]相连,sd_cmd与SD卡插座15的CMD相连;SD卡时钟控制模块17负责控制CLK时钟线的频率,以控制读写SD卡的数据速率,其端口clk、reset_n、divider[7..0]与Avalon接口模块12的sd_interface_clk、sd_interface_reset、divider[7..0]相连,sd_clk与SD卡数据控制模块14的clk、SD卡命令控制模块16的clk以及SD卡插座15的CLK相连。
如附图4所示为在软核处理器上的程序流程图。程序包括以下步骤:
(1)系统初始化; 
(2)主控器是否往SD卡文件管理控制器中写入用户命令,是则进入步骤(3),否则返回步骤(2);
(3)读命令寄存器,获取主控器写入的用户命令号;
(4)根据用户命令号调用FATFS文件系统模块对应的接口函数;
(5) FATFS文件系统模块调用底层磁盘IO模块操作Avalon总线接口模块;
(6)通过Avalon总线往SD卡接口单元写入SD卡物理层命令的命令号和命令参数。
(7) SD卡接口单元根据写入的SD卡命令号和命令参数产生并发送相应的命令到SD卡中。
(8)命令执行完毕进入步骤(9)否则返回步骤(8)继续等待
(9)返回命令响应和命令的执行状态,产生中断并返回步骤(2)
本发明提供8位地址线,8位地址线可以寻址256个单元,这256个单元对应着主控器接口模块中的256个寄存器。主控器接口模块中寄存器空间的分配方式如表1所示。
如软件流程图中所述,主控器通过主控器接口模块往本发明的寄存器中写入特定的用户命令即可完成磁盘管理和文件管理操作。各种用户命令的代码、功能、名称、输入、输出数据如表2所示(表中后缀H表是十六进制数)。各种命令的详细介绍如下:
CMD_DISK_MOUNT:
该命令用来完成SD卡的初始化工作。主控器先往命令寄存器中写入命令CMD_DISK_MOUNT的代码00H,然后往执行命令寄存器中写入01H,即可操作本发明完成SD卡的挂载和初始化工作。本发明将命令的响应反馈在状态寄存器中,主控器通过读取状态寄存器获取SD卡的状态。所有命令返回值的定义如表3所示。本发明提供查询和中断两种方式通知主控器所发出的命令已经执行结束。CMD_DISK_MOUNT命令的返回状态为FR_OK、FR_NOT_READY。操作成功则返回FR_OK,操作失败返回FR_NOT_READY。只有SD卡初始化成功了才能进行其他的磁盘或者文件操作。
CMD_CREATE_DIR:
该命令用于新建子目录,特指文件夹。在根目录下建立子目录时,先按照表2所示分配的寄存器中依次填入目录名(本发明只支持短文件名,所以目录名不能超过8个字节)、属性字段、创建时间。属性字段描述了文件或者目录的属性,大小为1个字节。其值为00H表示读写、01H时表示只读、02H表示隐藏、04表示系统文件H、08H表示卷标、0FH表示该目录项为长文件名目录项在本发明中没有任何意义。10H表示目录、20H表示存档。所以在新建目录时在此字段中填入10H即可。若主控器有实时时钟RTC则往创建时间寄存器中写入实时时间,若主控器没有实时时钟,则系统默认时间为2011年10月01日11点10时01分。填写完目录信息后,往命令寄存器中写入命令CMD_CREATE_DIR的代码01H,往执行命令寄存器中写入01H即可完成目录的创建工作。命令执行完成后将会产生中断。主控器可以读取状态寄存器来查询CMD_CREATE_DIR命令的执行状态。CMD_CREATE_DIR可能的状态为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_WRITE_PROTECTED FR_NO_FILESYSTEM。各种返回状态的意义请见表3。 当创建多级目录时,需要先使用打开目录命令CMD_OPEN_DIR打开各级父目录,然后按照上面的操作方式使用新建目录命令即可。
CMD_OPEN_DIR:
该命令用于打开已存在的目录。当打开根目录下的一级子目录时,首先往文件名寄存器中写入需要打开的目录名称且不超过8个字节,在命令寄存器中写入CMD_OPEN_DIR的命令代码02H,往执行命令寄存器中写入01H即可执行命令。命令执行完毕后将会产生中断。主控器通过查询状态寄存器来获取CMD_OPEN_DIR命令的操作状态。CMD_OPEN_DIR命令的可能返回状态为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_NO_FILESYSTEM。当打开多级目录时,需要重复使用CMD_OPEN_DIR命令一级一级的打开。每一级目录的打开方式如同根目录下打开一级子目录的方式。
CMD_READ_DIR_STAT:
该命令用于获取目录的信息。如果目录为多级目录时,需要使用“打开目录”命令依次打开目录。然后往文件名寄存器中写入需要查询的目录名,往命令寄存器中写入CMD_READ_DIR_STAT命令的代码03H,往执行命令寄存器中写入01H即可执行CMD_READ_DIR_STAT命令。命令执行完成后将会产生中断。在状态寄存器中保存了命令的执行结果,在寄存器03H~22H 32个字节的空间中保存了目录的信息。CMD_READ_DIR_STAT命令的可能返回值为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_NO_FILESYSTEM。当返回为FR_OK时表示读取目录信息成功,主控器可以从寄存器中读取相关信息。
CMD_READ_DIR_ITEM:
该命令用于获取目录的目录项。每一个目录项包含了该目录下文件的文件名、扩展名、属性字节、文件的最近修改时间、最近访问时间、文件的创建日期、文件的首簇号、文件的长度等信息。往文件名寄存器中写入目录名,往命令寄存器中写入CMD_READ_DIR_ITEM命令的代码04H、执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。主控器需要先查询状态寄存器获取命令的执行情况,当返回值为FR_OK时,才能读取寄存器03H~22H获取目录项的信息。当返回其它值时,表明命令执行失败。读完一条目录项后,主控器可以往命令寄存器中写入CMD_READ_CONTINUE命令、执行命令寄存器中写入01H来继续读取下一条目录项。当所有的目录项读取完毕后,状态寄存器中的返回值为FR_READ_ALL。
CMD_CHANGE_DIR_STAT:
该命令用于修改目录的属性包括属性字段、目录名、创建时间。如果目录为多级目录时,需要使用打开目录命令依次打开各级目录。往属性字段寄存器、文件名寄存器、创建时间寄存器中填入数据,在文件信息修改标志位寄存器中指定需要修改的属性。01H表示修改目录名、02H表示修改属性字段、04H表示修改创建时间。主控器可以选择性的修改这3个属性。往命令寄存器中写入CMD_CHANGE_DIR_STAT的命令代码05H,往执行命令寄存器中写入01H即可执行命令。命令执行完成后将会产生中断。主控器可以查询状态寄存器来获取命令的执行状况。命令CMD_CHANGE_DIR_STAT可能的返回值为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_NO_FILESYSTEM, FR_WRITE_PROTECTED, FR_EXIST。当返回值为FR_OK时表明属性修改成功。
CMD_GET_CURRENT_DIR:
该命令用于获取当前目录的路径名。往命令寄存器中写入命令CMD_GET_CURRENT_DIR     的代码06H、往执行命令寄存器中写入01H即可执行此命令。当命令执行完毕后会产生中断。若命令执行成功,状态寄存器中的值为FR_OK,数据寄存器80H~FFH中为目录的绝对路径名。本发明不支持超过128个字节的路径名。路径名的末尾以“\0”结束。此命令的可能返回值为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILESYSTEM。
CMD_CHANGE_DIR:
该命令用于切换目录。往数据寄存器80H~FFH中写入需要切换的目录名包括目录的绝对路径,且路径名需小于128个字节、往命令寄存器中写入命令CMD_CHANGE_DIR的代码07H、往执行命令寄存器中写入01H即可执行命令。目录的绝对路径以“/”开始。“/”表示根目录。“/Test”表示根目录下的“Test”子目录。“/file.txt”表示根目录下的文件“file.txt”。“/Test/file.txt”表示根目录下的一级子目录“Test”中的文件“file.txt”。“.”表示当前目录,“. .”表示当前目录的父目录。命令行完毕后会产生中断。若命令执行成功,则状态寄存器中的值为FR_OK。此命令的可能返回值为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILESYSTEM, FR_INVALID_NAME, FR_NO_PATH。
CMD_DELETE_DIR:
该命令用于删除目录。往数据寄存器80H~FFH中写入需要删除的目录名包括目录的绝对路径,且路径名需小于128个字节、往命令寄存器中写入CMD_DELETE_DIR的代码08H、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若状态寄存器中的值为FR_OK,则命令执行成功。此命只能用于删除空的文件夹,若文件夹非空则操作失败。
CMD_CREATE_FILE:
该命令用于创建文件。此命令可以参考CMD_CREATE_DIR命令的相关细节。在寄存器03H~22H中依次填入新创建文件的文件名、扩展名、属性字节、创建时间、在命令寄存器中写入命令CMD_CREATE_FILE的代码09H、在执行命令寄存器中写入01H即可执行此命令。命令执行完毕后会产生中断。若状态寄存器中的返回值为FR_OK,表明文件创建成功。此命令的可能返回值为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_WRITE_PROTECTED FR_NO_FILESYSTEM。
CMD_OPEN_FILE:
此命令用于打开已存在的文件。在文件名寄存器中写入需要打开的文件名、在命令寄存器中写入命令CMD_OPEN_FILE的代码0AH,在执行命令寄存器中写入01H即可执行此命令。命令执行完毕后会产生中断。若状态寄存器中的值为FR_OK表示打开文件成功。在进行文件的读写、文件指针的移动之前必须先成功打开文件。此命令的可能返回值为FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_WRITE_PROTECTED FR_NO_FILESYSTEM。
CMD_BYTE_READ:
该命令用于以字节为单位读取指定字节数的数据。往文件名寄存器中写入文件名,往数据大小寄存器23H~26H中写入读取的字节数,字节数的低位放在低地址寄存器中,高位放在高地址寄存器中。往命令寄存器中写入命令CMD_BYTE_READ的代码0BH、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功,则状态寄存器中的返回值为FR_OK,“可读写字节数”寄存器中为数据寄存器80H~FFH中有效的字节数。主控器根据“可读写字节数”寄存器中的值来从数据寄存器80H单元开始读取数据。数据寄存器80H~FFH中最多只能保存128字节的数据,当主控器读取的字节数大于128个字节时,需要分多次读取。主控器从数据寄存器80H~FFH单元读完128个字节的数据后,往命令寄存器中写入命令CMD_READ_CONTINUE,往执行命令寄存器中写入01H即可读取下128个字节的数据。当读取到文件的末尾或读取的字节数完毕后,状态寄存器中的值为FR_READ_ALL。此命令可能返回值为FR_OK、FR_DISK_ERR、FR_INT_ERR、FR_NOT_READY、FR_READ_ALL。
CMD_SECTOR_READ:
该命令用于以扇区为单位读取文件。此命令的用法可以参考CMD_BYTE_READ。往文件名寄存器中写入文件名,往数据大小寄存器23H~26H中写入读取的扇区数,扇区数的低位放在低地址寄存器中,高位放在高地址寄存器中。往命令寄存器中写入命令CMD_SECTOR_READ的代码0CH、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功,则状态寄存器中的返回值为FR_OK,“可读写字节数”寄存器中为数据寄存器80H~FFH中有效的字节数。主控器根据“可读写字节数”寄存器中的值来从数据寄存器80H单元开始读取数据。数据寄存器80H~FFH中最多只能保存128字节的数据,每个扇区的大小是128字节的整数倍。所以以扇区为单位读时,需要主控器反复的读取128字节的数据。主控器从数据寄存器80H~FFH单元读完128个字节的数据后,往命令寄存器中写入命令CMD_READ_CONTINUE,往执行命令寄存器中写入01H即可读取下128个字节的数据。当读取到文件的末尾或读取的书扇区数完毕后,状态寄存器中的值为FR_READ_ALL。此命令可能返回值为FR_OK、FR_DISK_ERR、FR_INT_ERR、FR_NOT_READY、FR_READ_ALL。
CMD_BYTE_WRITE:
该命令用于以字节为单位往文件中写入数据。此命令的用法可以参考命令CMD_BYTE_READ。往文件名寄存器中写入文件名,往数据寄存器80H~FFH中写入数据,往“可读写字节数”寄存器中写入本次数据寄存器中有效的字节数,往命令寄存器中写入命令CMD_BYTE_WRITE的代码0DH、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功,则状态寄存器中的返回值为FR_OK,“可读写字节数”寄存器中为实际写入文件中的字节数。若操作失败主控器可根据“可读写字节数”寄存器中的值来确定已经写入了多少数据。数据寄存器80H~FFH中最多只能保存128字节的数据,当主控器写入的字节数大于128个字节时,需要分多次写。当主控器写完128个字节的数据后,往数据寄存器80H~FFH中再次写入数据,往“可读写字节数”寄存器中写入本次操作的字节数、往命令寄存器中写入命令CMD_WRITE_CONTINUE,往执行命令寄存器中写入01H即可连续的往文件中写入数据。此命令可能返回值为FR_OK、FR_DISK_ERR、FR_INT_ERR、FR_NOT_READY。
CMD_SECTOR_WRITE:
该命令用于以扇区为单位往文件中写入数据。此命令的用法可以参考命令CMD_BYTE_WRITE。往文件名寄存器中写入文件名,往数据寄存器80H~FFH中写入数据,往“可读写字节数”寄存器中写入本次数据寄存器中有效的字节数,往命令寄存器中写入命令CMD_SECTOR_WRITE的代码0EH、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功,则状态寄存器中的返回值为FR_OK,“可读写字节数”寄存器中为实际写入文件中的字节数。若操作失败主控器可根据“可读写字节数”寄存器中的值来确定已经写入了多少数据。数据寄存器80H~FFH中最多只能保存128字节的数据,而FAT32文件系统的扇区大小都是128字节的整数倍。主控器需要分多次才能写完一个扇区。当主控器写完128个字节的数据后,往数据寄存器80H~FFH中再次写入128字节数据,往“可读写字节数”寄存器中写入128、往命令寄存器中写入命令CMD_WRITE_CONTINUE,往执行命令寄存器中写入01H即可连续的往文件中写入数据。此命令可能返回值为FR_OK、FR_DISK_ERR、FR_INT_ERR、FR_NOT_READY。
CMD_GET_POINTER:
该命令用于读写文件时获取当前文件的指针。往命令寄存器中写入命令CMD_GET_POINTER代码0FH、往执行命令寄存器中写入01H即可执行此命令。命令执行完毕后会产生中断。若命令执行成功,则状态寄存器中的返回值为FR_OK,数据大小寄存器23H~26H中为文件指针到文件开头的偏移量。偏移量的低位存放在低地址,高位存放在高地址。
CMD_MOVE_POINTER:
该命令用于读写文件时移动文件的指针。往数据大小寄存器23H~26H中写入移动的偏移量,偏移量为4个字。往命令寄存器中写入CMD_MOVE_POINTER命令的代码10H、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功,状态寄存器中的返回值为FR_OK。此命令可能的返回值为FR_OK、FR_DISK_ERR、FR_INT_ERR、FR_NOT_READY。
CMD_GET_FILE_STAT:
该命令用于获取文件的读写属性、创建时间、文件大小、文件首簇号、文件最后的访问时间、文件最后修改的时间。当文件位于根目录下时,往文件名寄存器中写入文件名、往命令寄存器中写入命令CDM_GET_FILE_STAT的代码11H、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功,则状态寄存器中的返回值为FR_OK,寄存器03H~22H为文件的信息。每一项信息在寄存器中的位置详见表1。当文件位于多级目录下时,需要使用打开目录命令打开多级目录,然后获取文件的信息。此命令的可能返回值为FR_OK、FR_DISK_ERR、 FR_INT_ERR、 FR_NOT_READY、FR_NO_FILE, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_NO_FILESYSTEM。
CMD_END_OF_FILE:
该命令用于测试文件指针是否到达了文件的末尾。往命令寄存器中写入命令CMD_END_OF_FILE代码12H、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功且文件指针到达文件的末尾处,状态寄存器中的返回值为FR_END_OF_FILE,没有到达文件的末尾处则返回FR_OK。
CDM_TEST_FILE_ERROR:
该命令用于测试文件是否发生了错误。往命令寄存器中写入命令CMD_TEST_FIL_ERROR代码13H、往执行命令寄存器中写入01H即可执行命令。命令执行完毕后会产生中断。若命令执行成功且文件没有错误则状态寄存器中的返回值为FR_OK。
CMD_CHANGE_FILE_STAT:
该命令用于修改文件的属性包括属性字段、文件名、创建时间。当文件位于根目录下时,往属性字段寄存器、文件名寄存器、创建时间寄存器中填入修改的数据,在文件信息修改标志位寄存器中指定需要修改的属性。01H表示修改文件名、02H表示修改属性字段、04H表示修改创建时间。主控器可以选择性的修改这3个属性。往命令寄存器中写入CMD_CHANGE_FILE_STAT的命令代码14H,往执行命令寄存器中写入01H即可执行命令。命令执行完成后将会产生中断。主控器可以查询状态寄存器来获取命令的执行状况。命令CMD_CHANGE_FILE_STAT可能的返回值为FR_OK, FR_DISK_ERR, FR_NO_PATH,FR_NOT_READY,FR_WRITE_PROTECTED,FR_INT_ERR,FR_NO_FILE,FR_INVALID_NAME, FR_EXIST FR_NO_FILESYSTEM。当返回值为FR_OK时表明属性修改成功。
CDM_READ_CONTINUE:
该命令用于以字节或扇区为单位连续的读同一个文件。
CMD_WRITE_CONTINUE:
该命令用于以字节或扇区为单位连续的写同一个文件。
CMD_GET_FREE_SECTOR:
该命令用于获取SD卡中空闲的扇区号。往命令寄存器中写入命令CMD_GET_FREE_SECTOR代码17H、往执行命令寄存器中写入01H即可执行命令。若命令执行成功,状态寄存器中的返回值为FR_OK,数据大小寄存器23H~26H中为空闲的扇区号。
CMD_GET_DISK_CAPACITY:
该命令用于获取磁盘的容量。往命令寄存器中写入命令CMD_GET_DISK_CAPACITY代码18H、往执行命令寄存器中写入01H即可执行命令。若命令执行成功,状态寄存器中的返回值为FR_OK,数据大小寄存器23H~26H中为磁盘中所有的扇区数。
表3定义了所有的命令返回值。
表1
寄存器地址 字节数 寄存器定义 宏定义
00H 1 状态寄存器 OPERATION_STATUS
01H 1 执行命令寄存器 EXECUTE_CMD
02H 1 命令寄存器 CMD_REGISTER
03~0AH 8 文件名寄存器 FILE_NAME
0BH~0DH 3 扩展名寄存器 EXTENSION_NAME
0EH 1 属性字节寄存器 FILE_ATTRIBUTE
0FH 1 文件信息修改标志位 FILE_MODIFY
10H 1 创建时间10毫秒位 FILE_CRTTIMETENTH
11H~12H 2 文件创建时间 FILE_CRTTIME
13H~14H 2 文件创建日期 FILE_CRTDATE
15H~16H 2 文件最后访问日期 FILE_LASTACCDATE
17H~18H 2 文件起始簇号高16位 FILE_FSTCLUSHI
19H~1AH 2 文件最近的修改时间 FILE_WRITETIME
1BH~1CH 2 文件最近的修改时间 FILE_WRITEDAYE
1DH~1EH 2 文件起始簇号低16 FILE_FSTCLUSLO
1FH~22H 4 文件的长度 FILE_SIZE
23H~26H 4 数据大小寄存器 OPERATION_SIZE
27H 1 可读写字节数寄存器 AVAILABLE_COUNT
80H~FFH   数据寄存器 DATA_REG_BASE
  表2
代码 功能 命令名称 输入数据 输出数据 是否产生中断
00H SD卡初始化 CMD_DISK_MOUNT   操作状态
01H 新建目录 CMD_CREATE_DIR FAT32短目录项 操作状态
02H 打开目录 CMD_OPEN_DIR 目录名 操作状态
03H 读取目录信息 CMD_READ_DIR_STAT 目录名 目录信息和操作状态
04H 读取目录项 CMD_READ_DIR_ITEM 目录名 FAT32短目录项和操作状态
05H 修改目录属性 CMD_CHANGE_DIR_STAT 目录名和需修改的属性 操作状态  
06H 获取当前目录 CMD_GET_CURRENT_DIR   当前目录路径名和操作状态
07H 切换目录 CMD_CHANGE_DIR 目录名(包括路径名) 操作状态
08H 删除目录 CMD_DELETE_DIR 目录名(包括路径名) 操作状态
09H 新建文件 CMD_CREATE_FILE FAT32短目录项 操作状态
0AH 打开文件 CMD_OPEN_FILE 文件名 操作状态
0BH 以字节为单位读文件 CMD_BYTE_READ 文件名和读取的字节数 数据寄存器中有效字节数和数据
0CH 以扇区为单位读文件 CMD_SECTOR_READ 文件名和读取的扇区数 数据寄存器中有效字节数和数据
0DH 以字节为单位写文件 CMD_BYTE_WRITE 文件名、写入的字节数、写入数据和数据寄存器中有效字节数 本次操作实际写入的字节数和操作状态
0EH 以扇区为单位写文件 CMD_SECTOR_WRITE 文件名、写入的扇区数、写入数据和数据寄存器中有效字节数 本次操作实际写入的字节数和操作状态
0FH 获取当前文件指针 CMD_GET_POINTER 文件名 当前文件指针的偏移量和操作状态
10H 移动当前文件的指针 CMD_MOVE_POINTER 文件名和偏移的字节数 操作状态
11H 获取文件的信息 CMD_GET_FILE_STAT 文件名 FAT32短目录项操作状态
12H 测试是否到达文件的末尾 CMD_END_OF_FILE 文件名 操作状态
13H 测试文件是否发生错误 CMD_TEST_FILE_ERROR 文件名 操作状态
14H 修改文件的属性 CMD_CHANGE_FILE_STAT 文件名、属性指示位和文件属性 操作状态
15H 继续执行读操作 CMD_READ_CONTINUE   操作状态
16H 继续执行写操作 CMD_WRITE_CONTINUE   操作状态
17H 查询空闲扇区号 CMD_GET_FREE_SECTOR   空闲扇区号和操作状态
18H 查询磁盘容量 CMD_GET_DISK_CAPACITY   磁盘的扇区总数和操作状态
表3
代码 状态名称 备注
00H FR_OK 命令操作成功
01H FR_NOT_READY 挂在SD卡或者初始化文件系统失败
02H FR_INT_ERR 要求失败
03H FR_DISK_ERR 不可恢复性错误
04H FR_NO_FILE 找不到指定的文件
05H FR_NO_PATH 找不到指定的路径
06H FR_INVALID_NAME 指定的路径名不合法
07H FR_DENIED 指定的操作被拒绝执行
08H FR_EXIST 指定的目录名或者文件名已经存在
09H FR_WRITE_PROTECTED 对写保护的磁盘进行写操作
0AH FR_NO_FILESYSTEM SD卡上面没有FAT32文件系统
0BH FR_TOO_MANY_OPEN_FILES 打开的文件太多超过允许的数目
0CH FR_READ_ALL 所有的读/写操作完毕
0DH FR_END_OF_FILE 文件指针到达文件末尾

Claims (6)

1.基于FPGA的SD卡文件管理控制器,其特征在于包括FPGA芯片(1)、串行配置芯片(4)、SDRAM存储器(5)、主控器接口(6)、SD卡插座(15),其中在FPGA(1)内部实现FAT32文件管理单元(2)和SD卡接口单元(3);
所述FAT32文件管理单元(2)为主控器提供主控器接口(6)、操作文件系统的用户命令,主控器通过该接口在SD卡文件管理控制器的寄存器中写入用户命令即可完成对SD卡中FAT32文件系统的管理;
所述SD卡接口单元(3)在FAT32文件管理单元(2)的控制下,负责SD卡命令的产生和应答接收,以及SD卡中数据的读写;
在读写SD卡中的数据时,采用了4位数据线宽的SD模式。
2.根据权利要求1所述的一种基于FPGA的SD卡文件管理控制器,其特征在于:所述的FAT32文件管理单元(2)包括NIOS II处理器(7)、EPCS控制模块(8)、SDRAM控制模块(9)、主控器接口模块(10)、Avalon总线(11)、Avalon接口模块(12);
所述NIOS II处理器(7)通过主控器接口模块(10)获取主控器输入的用户命令与数据,并反馈信息给主控器;
所述NIOS II处理器(7)通过Avalon接口模块(12)与SD卡接口单元(3)进行通信;
所述NIOS II处理器(7)通过EPCS控制模块(8)、SDRAM控制模块(9)分别与FPGA外部的串行配置芯片(4)和SDRAM存储器(5)相连。
3.根据权利要求1所述的一种基于FPGA的SD卡文件管理控制器,其特征在于:所述的FAT32文件管理单元(2)上面移植了FATFS文件系统模块。
4.根据权利要求1所述的一种基于FPGA的SD卡文件管理控制器,其特征在于:所述的SD卡接口单元(3)包括读写缓冲FIFO模块(13)、 SD卡数据控制模块(14)、SD卡命令控制模块(16)和SD卡时钟控制模块(17);
所述读写缓冲FIFO模块(13)负责缓存读写SD卡时的数据,
所述SD卡数据控制模块(14)负责DAT线上数据的接收和发送以及数据的校验,
所述SD卡命令控制模块(16)负责控制CMD线上命令发送和回复接收,
所述SD卡时钟控制模块(17)负责控制CLK时钟线的频率,以控制读写SD卡的数据速率。
5.根据权利要求1所述的一种基于FPGA的SD卡文件管理控制器,其特征在所述的主控器接口为8位地址线、8位数据线。
6.根据权利要求1所述的一种基于FPGA的SD卡文件管理控制器,其特征在于所述操作文件系统的用户命令包括新建、打开、读写、关闭文件,新建、打开、关闭目录,磁盘容量查询、空闲扇区查询、以扇区或字节为单位对文件进行读写。
CN2011103579366A 2011-11-11 2011-11-11 基于fpga的sd卡文件管理控制器 Pending CN102436428A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011103579366A CN102436428A (zh) 2011-11-11 2011-11-11 基于fpga的sd卡文件管理控制器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011103579366A CN102436428A (zh) 2011-11-11 2011-11-11 基于fpga的sd卡文件管理控制器

Publications (1)

Publication Number Publication Date
CN102436428A true CN102436428A (zh) 2012-05-02

Family

ID=45984499

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011103579366A Pending CN102436428A (zh) 2011-11-11 2011-11-11 基于fpga的sd卡文件管理控制器

Country Status (1)

Country Link
CN (1) CN102436428A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708075A (zh) * 2012-05-15 2012-10-03 山东大学 一种sd卡硬件控制装置及控制方法
CN103309828A (zh) * 2013-05-31 2013-09-18 杭州晟元芯片技术有限公司 一种sd卡从控制器及控制方法
CN105739927A (zh) * 2016-01-29 2016-07-06 武汉精测电子技术股份有限公司 一种基于软核处理器的移动存储卡读写方法及文件升级系统
CN114647449A (zh) * 2020-12-17 2022-06-21 航天科工惯性技术有限公司 一种终端设备的数据处理方法、装置及其系统
CN117991995A (zh) * 2024-03-26 2024-05-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101634071A (zh) * 2009-08-13 2010-01-27 浙江理工大学 一种基于fpga的电子提花机控制系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101634071A (zh) * 2009-08-13 2010-01-27 浙江理工大学 一种基于fpga的电子提花机控制系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
何伟等: "基于FPGA的SD卡控制器设计及应用", 《世界科技研究与发展》 *
杨爽等: "基于NiosⅡ和SD卡的数据采集系统的设计", 《核电子学与探测技术》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708075A (zh) * 2012-05-15 2012-10-03 山东大学 一种sd卡硬件控制装置及控制方法
CN103309828A (zh) * 2013-05-31 2013-09-18 杭州晟元芯片技术有限公司 一种sd卡从控制器及控制方法
CN103309828B (zh) * 2013-05-31 2016-03-09 杭州晟元数据安全技术股份有限公司 一种sd卡从控制器及控制方法
CN105739927A (zh) * 2016-01-29 2016-07-06 武汉精测电子技术股份有限公司 一种基于软核处理器的移动存储卡读写方法及文件升级系统
CN105739927B (zh) * 2016-01-29 2019-01-04 武汉精测电子集团股份有限公司 一种基于软核处理器的移动存储卡读写方法及文件升级系统
CN114647449A (zh) * 2020-12-17 2022-06-21 航天科工惯性技术有限公司 一种终端设备的数据处理方法、装置及其系统
CN114647449B (zh) * 2020-12-17 2024-02-20 航天科工惯性技术有限公司 一种终端设备的数据处理方法、装置及其系统
CN117991995A (zh) * 2024-03-26 2024-05-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备
CN117991995B (zh) * 2024-03-26 2024-06-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备

Similar Documents

Publication Publication Date Title
US6678785B2 (en) Flash management system using only sequential write
US7318117B2 (en) Managing flash memory including recycling obsolete sectors
US10831734B2 (en) Update-insert for key-value storage interface
US5715455A (en) Apparatus and method for storing file allocation table efficiently in memory
JP5149912B2 (ja) 複数の異種のソリッドステート・ストレージ・ロケーションの選択的利用
CN114840138A (zh) 基于存储器装置的区域的文件系统存储分配
US11030156B2 (en) Key-value store with partial data access
US10956071B2 (en) Container key value store for data storage devices
KR101055324B1 (ko) 강화된 호스트 인터페이스
US20230065300A1 (en) Preserving application data order in memory devices
WO2020077301A1 (en) Efficient file storage and retrieval system, method and apparatus
CN102436428A (zh) 基于fpga的sd卡文件管理控制器
US11630595B2 (en) Methods and systems of efficiently storing data
US20170153842A1 (en) Data allocation in hard drives
WO2017184477A1 (en) Adapted block translation table (btt)
US20240330175A1 (en) Storage device for classifying data based on stream class number, storage system, and operating method thereof
CN115729461A (zh) 双模式存储设备
CN102375781B (zh) 数据保护方法、存储器控制器及可携式存储器储存装置
CN202362777U (zh) 基于fpga的sd卡文件管理控制器
CN101089842A (zh) 复制文件到嵌入式设备中的方法
US20140201167A1 (en) Systems and methods for file system management
Micheloni et al. Solid state drives (ssds)
CN106557275B (zh) 一种数据处理的方法及装置
US20100274828A1 (en) Electronic Device, Storage Area Allocation Method for File System, and Computer Product
Lerner et al. External Interfaces

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20120502