基于Nios II 软核处理器的SD卡接口设计
件下,尽可能使用较少的片内存储器。
对于一个实际的系统,光有片内存储器一般是不够的,尤其是考虑到要进行嵌入式操作系统的移植,所以还要增加片外存储器。Niso II通过Avalon总线和片外存储器以及外部设备连接。外部存储器件的类型包括SRAM、SDRAM、DDR2、Flash等,外部设备包括UART串行口等。本设计采用SDRAM.
接着是添加PIO端口,定义输入输出端口,主要的目的是用于Nios II读取数字量。Nios II所采用的时钟和FPGA 的时钟密切相关,一般是通过锁相环PLL 把外部输入的时钟进行倍频之后再送给Nios II来作为主频使用,同时外部设备也使用时钟信号。外部时钟信号为25MHz,而经过倍频后为50MHz.
至此,主要的配置过程就结束了。但是还是需要配置如下部分:
(1) 分配存储器和外部设备的基地址和中断请求优先级;
(2) 设定NiosII处理器的启动地址,本设计把片内存储器设定为Nios II的启动地址。
(3) 在生成NiosⅡ系统时,可以选择生成Verilog语言还是VHDL 语言,本设计采用VHDL语言进行设计;
(4) 最后生成的qsf文件,相当于整个工程的文件,但是关于配置管脚使用的部分,需要用户去生成。生成的方法可以在图形界面下配置,也可以通过写tcl文件的方法。写tcl文件的方法一般来讲,对于大型工程,还是比较方便的。
(5) 编译整个NiosⅡ系统,在Altera 提供的开发环境Quartus II 中进行编译。顶层设计文件可以使VHDL 也可以是原理图的形式。
(6) 采用JATG口进行下载,把生成的的SOF文件下载到FPGA里。
2系统软件设计
Altera公司为了用户方便使用Nios II来快速研制产品,提供了功能强大、易于使用的Nios II集成开发环境,与一般的嵌入式系统开发设计比较类似。在生成NiosII的过程中已经自动生成了需要使用的头文件(一般是C语言的头文件),同时一般外围设备的驱动程序也可以生成。对于嵌入式操作系统,可以使用用户自己裁剪的ucLinux内核也可以使用Altera提供的操作系统内核。本设计使用Altera公司提供的Nios II 9.0版本的开发环境。
2.1 SD卡初始化
在对SD 卡进行读/写之前,必须知道卡的类型、卡的容量、卡的大小等信息。具体来说,初始化函数主要完成以下工作:
(1) 微处理器(这里指Nios II)复位SD卡,激活SD卡内部控制电路进行初始化处理,使SD卡进入SPI 模式;
(2) 发送命令查询SD卡是否支持3.3V供电;
(3) 调整SPI时钟频率;
(4) 根据编译选项使能或者禁止通信过程中的CRC校验;
(5) 设置用于读/写操作的块数据长度;
(6) 最后是初始化全局变量sds.
SD卡初始化函数INTSU SD_Initialize(viod)就是用于完成以上任务的,它读取SD卡内部CSD寄存器,然后对全局变量sds进行赋值。
2.2 SD卡读写操作
对SD卡的读写操作需要知道SD 卡的一些基本的属性:插入卡座中SD卡的型号;SD卡中全部块的数量;SD卡的最大数据块的长度;一次可擦除的块数量;卡的读取、写入、擦除操作的超时时间。
SD卡读/写软件包中定义了一个全局变量sds,软件包的很多地方使用了这个全局变量。SD卡的写操作包括写单块和写多块两种方式。SD卡的初始化函数SD_Initialixe()已经调用SD_SetBlockLen()函数设定了读/写数据的长度为SD_BLOCKSIZE 字节,所以卡初始化以后,读写都必须以块为单位。
3 SD卡驱动设计
Nios II软件架构是建立在HAL(Hardware Abstraction Layer)基础之上的。HAL为Nios II的软件开发者提供了操作底层硬件的编程接口。设备驱动驱动程序的编制一般要使用HAL提供的API函数以及C标准库等。HAL提供的功能以及它与底层设备驱动程序之间的关系如图3所示,这种模块化的设计架构可以加速应用程序的开发。使用这种分层的体系架构,HAL层把应用程序和底层硬件驱动程序之间隔离开来,使得应用程序的开发不依赖于底层HAL和硬件的变化,增加了应用程序的可移植性。设计驱动程序最重要的是理解具体SD卡的读写操作的过程,之后是如何和嵌入式操作系统连接起来。在编制好SD卡的驱动程序后,在应用程序中操作SD卡就简单了。所以编制SD卡的驱动在本设计中是重要的一部分。
图3 基于HAL的系统层次结构
结束语
本文基于Nios II实现了对于SD卡的控制,不仅包括硬件设计还包括系统软件设计。传统的系统设计是基于硬核处理器的架构,系统的硬件设计受到了限制。SOPC的设计思想使得片上系统的设计更加灵活,硬件设计的限制因素基本不存在了。在一个FPGA的芯片上几乎可以实现一个整个系统,对于系统的小型化的作用是显着的。本文对基于NiosⅡ的嵌入式系统的设计进行了深入的研究,并在此基础上,设计完成了以Alter
- 用NiosII搭建的固态盘设备系统(03-23)
- 基于μC/OS2II的LED显示屏控制器(08-14)
- 基于Nios II的RTEMS嵌入式开发模式的搭建(03-01)
- NIOS II常用函数整理(06-06)
- NIosII软处理器快速入门(06-06)
- 基于FPGA的片上可编程系统(SOPC)设计之:典型实例-基于NIOS II处理器的数字钟设计(06-05)