当前位置:首页 > EDA > 电子设计自动化
[导读]摘要:利用Cyclone II系列FPGA构建了一种用于SD卡读写的SPI控制器,并在其上实现了一个基于Nios II软核处理器的嵌入式文件系统。此文件系统是通过在Nios II EDS开发平台上移植znFAT32文件系统实现的。 关键词:Cycl

摘要:利用Cyclone II系列FPGA构建了一种用于SD卡读写的SPI控制器,并在其上实现了一个基于Nios II软核处理器的嵌入式文件系统。此文件系统是通过在Nios II EDS开发平台上移植znFAT32文件系统实现的。
关键词:Cyclone II;FPGA;Nios II;SD卡;znFAT32文件系统

引言
    在嵌入式系统或移动设备上使用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系统包括如下部分:


    ①系统核心模块: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所示。


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


    在实例中使用了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所示。


    从图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所示。


    硬件抽象层主要实现Nios II处理器对SPI控制器相应的功能寄存器的操作。
    命令层定义了对SD卡各种操作的交互方法,包括命令码与应答码的定义。
    CRC校验层主要完成校验工作,对于命令与数据采取不同的校验方式。命令用CRC7校验,数据用CRC16校验。
    操作函数接口层的作用是向znFAT32文件系统提供SD卡的所有操作,这其中包括了SD卡的初始化、扇区读写等函数接口(这是文件系统对SD卡进行文件操作所必需的),以供znFAT32文件系统调用。这里利用Nios IIEDS集成开发环境编写的驱动实现SD对卡的块读写(以扇区为基本单位进行读写操作),为SD卡挂载文件系统提供API函数。
    每个层的接口函数如下:
   

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


    由图6可知该文件系统包含两层。
    文件系统代码层——主要提供对存储设备进行操作的各种函数。
    存储设备接口层——主要是为了挂载不同的存储设备。
3.2 文件系统SD卡的挂载
   
znFAT32文件系统挂载需要SD卡驱动层提供的扇区读写函数。将编写的扇区读写函数SD_Read_Sector、SD_Write_Sector取代文件系统中的FAT32_ReadSector与FAT32_WriterSector两个函数即可。根据需要的处理器编写SD卡驱动程序十分重要,只有保证驱动程序的正确性,才能进行文件系统的正确挂接,才能在挂接完成后对SD卡进行文件操作。
    znFAT32文件系统的挂接需要对znFAT32文件系统提供的用于标定存储设备的全局变量Dev_No设备号进行处理,znFAT32文件系统给我们提供的存储设备宏定义如下:
   
    对不同设备进行文件操作,需要通过设备号来选择不同的设备驱动函数。对SD卡操作需将Dev_NO定义为SDCARD。

4 文件系统在Nios II中的应用实例
   
完成SOPC系统的创建后,在生成的Nios II系统上通过Nios II EDS编程,便可将SD卡与文件系统挂接。
4.1 znFAT32文件系统的使用
   
znFAT32文件系统为用户提供的对文件的基本操作函数让我们能够轻松地对文件进行操作。下面列举了几个基本函数:
   
    通过上面的函数,可以完成对SD卡的文件读写、删除、数据添加、目录创建、文件拷贝、文件重命名等操作。
4.2 SOPC系统对SD卡文件读写操作的验证
   
为了验证上述系统能否正常实现SD卡读写,笔者选用了4 GB容量的金士顿SDHC卡,进行了文件读写实验。图7为Nios II EDS给出的Deb ug信息窗口。信息显示了在构建的系统上SD卡的初始化(实现文件系统的挂接),接着读取SD卡的存储容量、扇区大小、每簇扇区数,并在根目录下面打开名为TEST.TXT的文件,并对该文件的信息进行读取。在一级子目录下面,同样建立一个TEST.TXT的文件,并对文件信息进行读取。


    由运行结果可知,初始化成功并识别此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数据采集实验系统以及数控贴片控制系统上得到了很好的应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC

关键字: RISC-V处理器 FPGA SoC

为无处不在的端侧设备插上AI的翅膀,AMD发布第二代Versal™ 自适应 SoC

关键字: AMD FPGA 自适应SoC AI 边缘计算

Pmod接口可以说是数字电路板的连接革命。随着科技的飞速发展,数字电路板间的通信与连接技术也在不断创新和进步。Pmod接口,作为一种新兴的数字接口标准,正逐渐成为数字电路板间通信的桥梁,为电子设备的连接和通信带来了革命性...

关键字: pmod接口 FPGA 数字电路板

近日举办的GTC大会把人工智能/机器学习(AI/ML)领域中的算力比拼又带到了一个新的高度,这不只是说明了通用图形处理器(GPGPU)时代的来临,而是包括GPU、FPGA和NPU等一众数据处理加速器时代的来临,就像GPU...

关键字: FPGA AI 图形处理器

当我们提到成本优化型FPGA,往往与简化逻辑资源、有限I/O和较低制造工艺联系在一起。诚然,在成本受限的系统设计中,对于价格、功耗和尺寸的要求更为敏感;但随着一系列创新应用的发展、随着边缘AI的深化,成本优化型FPGA也...

关键字: AMD FPGA Spartan 边缘计算

全球领先的高性能现场可编程门阵列(FPGA)和嵌入式FPGA(eFPGA)半导体知识产权(IP)提供商Achronix Semiconductor公司宣布,该公司参加了由私募股权和风险投资公司Baird Capital举...

关键字: FPGA 智能汽车 eFPGA

全新 FPGA 能为嵌入式视觉、医疗、工业互联、机器人与视频应用提供高数量 I/O、功率效率以及卓越的安全功能

关键字: FPGA 嵌入式视觉 机器人

Altera致力于为客户提供端到端的FPGA、易于使用的AI、软件和弹性供应链。

关键字: FPGA AI

在半导体领域,大部分对于AI的关注都集中在GPU或专用AI加速器芯片(如NPU和TPU)上。但事实证明,有相当多的组件可以直接影响甚至运行AI工作负载。FPGA就是其中之一。

关键字: FPGA AI 半导体

半导体产品老化是一个自然现象,在电子应用中,基于环境、自然等因素,半导体在经过一段时间连续工作之后,其功能会逐渐丧失,这被称为功能失效。半导体功能失效主要包括:腐蚀、载流子注入、电迁移等。其中,电迁移引发的失效机理最为突...

关键字: 半导体 电迁移 FPGA
关闭
关闭