基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,第1张

引言

嵌入式系统或移动设备上使用SD卡,接口的构建和文件系统实现是必须解决的问题。本文探讨在CycloneII平台为基础的嵌入式系统上,实现SD卡接口和文件系统的实现方法。

基于FPGA IP软核处理器的嵌入式系统,因其集成度高、可灵活配置和性价比方面的优势,已经逐渐逼近甚至赶超采用专用集成电路ASIC)的设计方案。

利用Nios II可定制周边设备的特点,在FPGA中,通过DHL编程构造出SD卡需要的SPI接口和其他控制信号的方式。在此基础上,在Nios II处理器上实现了一个灵活的文件系统。

基于FPGA和Nios II软核构建SOPC嵌入式文件系统,本文所做的工作包括:Nios II处理器IP软核的最小SOPC系统的构建,SD卡的底层扇区读写驱动程序的编写方式,znFAT32文件系统的移植,以及对SD卡文件 *** 作的实现等。

1 基于Nios II软核的SOPC系统构建

1.1 SOPC系统的结构

如图1所示,基于NiosII的SOPC系统包括如下部分:

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,第2张

①系统核心模块:Nios II处理器。

②处理器外围支持电路时钟单元以及存储器单元SDRAM控制器(包括存储代码的ROM与存储变量的RAM)部分。

③程序下载调试模块:JTAG接口控制器和异步通信接口(UART用于打印调试信息)。

④片上系统的内部外设模块:诸如定时器、UART、SPI、GPIO等,这部分总的功能电路可根据需要配置,在本例的实验验证中,主要用到SD卡的接口是SPI。

⑤EPCS控制器:由于FPGA是基于RAM的结构框架,掉电后代码会丢失。所以FPGA需要配置一个ROM在上电后将代码加载到RAM中运行。在SOPC系统中,EPCS控制器有两个作用,一是用来帮助EDS工具软件程序下载到EPCS芯片中去,二是在FPGA配置完成后引导EPCS芯片中的程序加载到SDRAM中去运行。

1.2 Cyclone II构建SOPC系统的过程

Altera公司为在其生产的FPGA上构建SOPC,不仅提供了各种使用的IP核模块,还提供了极为友好的集成开发环境Quartus II。在Quartus II中,有一个工具SOPCBuilder,可以帮助用户通过添加和配置(给出参数)IP核的方式,自动构建Verilog HDL语言硬件代码。

在Quartus II中,构建SOPC系统的流程如图2所示。

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,第3张

将需要的IP核模块添加完成后,下一步是用Verilog HDL语言编写顶层文件,对定制的SOPC进行例化处理(模块之间的连接关系定义,I/O引脚的配置),编译顶层文件和模块IP核,才能生成在FPGA上运行的片上系统。

在添加IP核后,SOPCBuilder可生成资源列表,本文构建的系统列表如图3所示。

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,d.JPG,第4张

在实例中使用了Nios II模块、时钟模块、定时器、SDRAM模块、EPCS模块、UART模块和SPI共计7个模块。

SOPC系统构建完成后,模块之间信号传递的时序并未确定。接下来的时序设计是SOPC能否正常运行的关键。在片上系统生成后,首先要对系统进行时序分析,以便使系统的时序符合设计逻辑的要求,并保证系统的正常工作,必要时要对系统的时序进行适当的约束。这一工作

可利用Quartus II软件中内嵌的TImeQuest完成,也可以使用第三方提供的时序分析软件,如PrimeTIme软件等来实现。

本文采用Altera公司提供的TImeQuest来进行时序约束。经过时序约束后,对工程再编译,可产生时序报告。通过分析时序约束报告,可对约束适当修改,这个过程可反复进行,直到满足时序要求为止。

2 SD卡接口协议分析与驱动程序设计

2.1 SD卡通信接口协议分析

SD卡一般定义了SD和SPI两种可选的总线 *** 作方式,本文采用SPI方式与SD卡接口,可以直接利用Quartus II中提供的SPI控制器IP核。S PI协议是面向位传输的同步串行通信协议。在SPI模式下,SD卡可以支持单块与多块的读写 *** 作。

SOPC上的SPI控制器与SD卡之间的读写 *** 作过程应符合SD卡的通信协议,其读写交互过程如图4所示。

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,c.JPG,第5张

从图4中可以看出,任何 *** 作都是由SPI控制器的SD写命令开始,SD卡在接收到一个合法命令后,将给予应答来响应,接下来便是数据块的读或写 *** 作。

2.2 SD卡驱动层程序的编写

Nios II EDS是Altera公司为其Nios II处理器开发的一款C++/C++语言编程软件,其软件架构是基于HAL(Hardware AbstracTIon Layer)之上的,Nios II EDS为Nios开发者提供了编程接口、底层设备驱动、HAL API,以及C标准库等资源。更重要的是,HAL系统库为Nios II软件设计人员提供了应用程序与底层硬件交互的设备驱动接口,从而大大简化了应用程序的开发。此外,HAL系统库还为应用程序与底层硬件驱动之间划分了一条清晰的界线,从而大大提高了应用程序的可复用性,使得应用程序不受底层硬件变化的影响。

片上系统的SPI控制器硬件逻辑,是由SOPC Builder工具将一个SPI主控器软核封装到系统中的,此SPI控制器与Nios II软核以Avalon总线相连接。SD卡的设备驱动层分为4层,包括硬件抽象层、命令层、CRC校验层与 *** 作函接口层,其结构框图如图5所示。

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,j.JPG,第6张

硬件抽象层主要实现Nios II处理器对SPI控制器相应的功能寄存器的 *** 作。

命令层定义了对SD卡各种 *** 作的交互方法,包括命令码与应答码的定义。

CRC校验层主要完成校验工作,对于命令与数据采取不同的校验方式。命令用CRC7校验,数据用CRC16校验。

*** 作函数接口层的作用是向znFAT32文件系统提供SD卡的所有 *** 作,这其中包括了SD卡的初始化、扇区读写等函数接口(这是文件系统对SD卡进行文件 *** 作所必需的),以供znFAT32文件系统调用。这里利用Nios IIEDS集成开发环境编写的驱动实现SD对卡的块读写(以扇区为基本单位进行读写 *** 作),为SD卡挂载文件系统提供API函数。

每个层的接口函数如下:

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,i.JPG,第7张

3 znFAT32文件系统的嵌入和SD卡的挂载

3.1 znFAT32文件系统概述

znFAT32是于振南为小型嵌入式设备完全独立编写,且开放源代码的FAT32文件系统解决方案。znFAT32能够支持众多的存储设备(SD卡、CF卡、Flash、U盘等),支持多个存储器共同工作,可以支持同时访问多个存储器对文件的 *** 作。对硬件资源要求低,能够轻松地移植到51单片机、AVRARMDSP、Nios II等处理器上,占用资源极少(仅占用800字节左右的RAM),非常适合嵌入式开发中文件系统的嵌入。其代码完全由C语言编写,能够轻松阅读,移植方便。其代码结构如图6所示。

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,h.JPG,第8张

由图6可知该文件系统包含两层。

文件系统代码层——主要提供对存储设备进行 *** 作的各种函数。

存储设备接口层——主要是为了挂载不同的存储设备。

3.2 文件系统SD卡的挂载

znFAT32文件系统挂载需要SD卡驱动层提供的扇区读写函数。将编写的扇区读写函数SD_Read_Sector、SD_Write_Sector取代文件系统中的FAT32_ReadSector与FAT32_WriterSector两个函数即可。根据需要的处理器编写SD卡驱动程序十分重要,只有保证驱动程序的正确性,才能进行文件系统的正确挂接,才能在挂接完成后对SD卡进行文件 *** 作。

znFAT32文件系统的挂接需要对znFAT32文件系统提供的用于标定存储设备的全局变量Dev_No设备号进行处理,znFAT32文件系统给我们提供的存储设备宏定义如下:

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,j.JPG,第9张

对不同设备进行文件 *** 作,需要通过设备号来选择不同的设备驱动函数。对SD卡 *** 作需将Dev_NO定义为SDCARD。

4 文件系统在Nios II中的应用实例

完成SOPC系统的创建后,在生成的Nios II系统上通过Nios II EDS编程,便可将SD卡与文件系统挂接。

4.1 znFAT32文件系统的使用

znFAT32文件系统为用户提供的对文件的基本 *** 作函数让我们能够轻松地对文件进行 *** 作。下面列举了几个基本函数:

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,k.JPG,第10张

通过上面的函数,可以完成对SD卡的文件读写、删除、数据添加、目录创建、文件拷贝、文件重命名等 *** 作。

4.2 SOPC系统对SD卡文件读写 *** 作的验证

为了验证上述系统能否正常实现SD卡读写,笔者选用了4 GB容量的金士顿SDHC卡,进行了文件读写实验。图7为Nios II EDS给出的Deb ug信息窗口。信息显示了在构建的系统上SD卡的初始化(实现文件系统的挂接),接着读取SD卡的存储容量、扇区大小、每簇扇区数,并在根目录下面打开名为TEST.TXT的文件,并对该文件的信息进行读取。在一级子目录下面,同样建立一个TEST.TXT的文件,并对文件信息进行读取。

基于FPGA和Nios II处理器IP软核实现实现SD卡接口和文件系统的设计,e.JPG,第11张

由运行结果可知,初始化成功并识别此SD卡为SDHC卡,容量为964 256(总簇数)×8(每簇扇区数)×512(每扇区字节数)≈3 968 860 160。根目录下的TEXT.TXT文件被打开,打开文件成功后在DIR1子目录下面创建TEST.TXT。由主函数创建的文件日期在TimeCreat[6]={12,1,4,17,40,28)中存放,文件成功后读取创建的新文件的详细信息。

为了进一步验证本系统对SD卡的写入 *** 作,笔者将此SD卡通过读卡器与PC机连接,在PC机的文件系统下,显示了相同的结果。

结语

本文通过在CycloneⅡ系列FPGA上构建SOPC系统,并在该系统上基于NiosⅡ处理器构建了SD卡文件系统。该系统以SPI接口方式与SD卡连接,文件系统是面向嵌入式系统的紧凑型开放源码的系统。经过对SD卡的 *** 作验证,证明本文提供的方案具有设计灵活、集成度高、通用性强、移植性好等诸多优点。在线阵CCD数据采集实验系统以及数控贴片控制系统上得到了很好的应用。

责任编辑:gt

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2484366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存