1、 毕业论文(设计)题 目 基于 NIOS II 的 SD 卡数据读写器设计电子信息科学与技术 专 业 2基于 NIOS II的 SD卡数据读写器设计【摘 要】随着移动电子产品与人们生活的日益密切,对电子产品数据储存能力的要求越来越大,各式各样的移动储存介质兴起,SD 卡、TF 卡是目前最为广泛使用的储存介质。其中 SD 经过多年的发展,各方面技术已经十分成熟,成本更加低廉,成为相机、笔记本电脑等对容量及介质大小都有要求的电子产品的首选。Altera 公司开发的 NIOS II 嵌入式处理器是通用型 32 位 RISC 嵌入式处理器,开发者可以通过软件设计其外围系统、总线,并且可以根据需要定制
2、NIOS II 的软核。本文将通过 quartus ii9.0 中的 SOPC 设计出基于 NIOS II 的 SD 卡数据读写软核,及其他需要的外围电路,再使用nios ii IDE9.0 进行软件的编写。硬件使用的是 A-C8V4 的开发板,并在上面实现 SD 卡的文本读写操作,可用来实现简单的答题器效果。【关键词】SD 卡; NIOS II;quartus ii;A-C8V4 ;文本读写;SOPC ;答题器3目录0 引言 .41 SD卡 .41.1 SD 卡引脚介绍 .41.2 SD 卡通信模式介绍 .52 SOPC系统简介 .52.1 SOPC 是什么 .52.2 SOPC 好在哪 .
3、52.3 SOPC 怎么做 .53 NIOS II处理器介绍 .53.1 NIOS II 处理器介绍 .53.2 NIOS II 处理器的外设介绍 .64 SOPC开发流程介绍 .65 内核搭建过程 .65.1 总体设计思路 .65.2 A-C8V4 开发板重要电路介绍 .65.2.1 Flash 储存器 .75.2.2 SDRAM 储存器 .75.2.3 SD 卡槽电路 .75.3 内核详细构建过程 .85.4 顶层原理图 .96 软件设计 .106.1 SD 卡各方面设置 .116.2 SD 卡读程序 .126.3 SD 卡写程序 .136.4 主功能程序 .146.5 程序效果调试 .1
4、57 实际应用场景分析 .198 总结 .19参考文献 .2040 引言电子行业是一个日新月异快速发展的行业,电子产品的跟换速度也因此变得无比迅速,与之相关的产业不得不迅速更近来达到匹配的目的。然而并不是所有电子产品相关配件都得跟上电子产品发展的步伐,有的是因为技术遇到了瓶颈,比如移动电子产品的电池已经有很长的一段时间得不到有效的发展;有的是其功能足够支撑目前大多数电子产品的使用,比如 SD 卡已经在电子界活跃了近十个年头,即使在 TF 卡越来越成为主流的今天,比它大上好几倍体积的 SD 卡依旧占据了一部分市场,并且短期来看不会有太大的变化,对于电子行业来说,着实是个神奇的现象。下面我们就来详
5、细了解一下SD 卡中不为人知的理论内容。1 SD卡SD 卡(Secure Digital Memory Card)又叫安全数码卡,是在 MMC(Multimedia Card)的基础上发展而来的一种集大容量、高性能、高安全性等优点于一身的数据储存卡。曾广泛应用在众多的移动终端上,比如手机、MP3、数码相机等,但随着手机内部集成度的越来越高,SD 卡已经无法“塞入”手机之中,所以当今更多是和读卡器结合成为优盘来使用。1.1 SD 卡引脚介绍SD 的卡的尺寸为 32mm x 24mm x 2.1mm。其内部引脚图如下:图 1-1 SD 卡引脚图表 1-1 SD 卡引脚定义引脚 名称 描述1 CD/
6、DAT3 数据位 32 CMD 命令/回复3 VSS 地4 VDD 电源5 CLK 地6 VSS 时钟7 DATA0 数据位 08 DATA1 数据位 19 DATA2 数据位 251.2 SD 卡通信模式介绍SD 卡能够支持两种通信协议,一个是正常情况下 SD 卡模式,另一个则是当 CMD 引脚发出 CMD0 这个命令之后,再次发送读写命令才能进行读写操作的 SPI 模式。每次都只能使用一种模式来让主机进行通信。SD 模式:主机通过 SD 总线来进行与 SD 卡的通信。每张 SD 卡都有属于自己的命令线及数据线,其余信号都是可以公用的。SPI 模式:主机通过 SPI 总线来进行与 SD 卡的
7、通信。SPI 模式已经成为一种便利的通信模式,因为如今的电子设备如果支持 SD 卡,大多带有硬件的 SPI 接口。虽然这些设备一打开电源就能用复位命令来让自己进入 SPI 模式,但一旦选定了这个模式,直到下次通电,都不能更换成 SD 模式了。2 SOPC系统简介2.1 SOPC 是什么SOPC(System-on-a-programmable-Chip) ,中文名是可编程片上系统。从字面上理解,它是一个片上系统,也就是只需要一个芯片就可以达到一个系统的大部分功能;同时又是一个可以编程的系统,可以方便的改变其功能。所以是一个软硬件都可以编程的灵活系统。2.2 SOPC 好在哪与一般的 SOC 相
8、比,SOPC 到底有哪些优势呢?首先,SOPC 更加方便,可以将几乎所有的设计过程(硬件、软件、仿真、调试等)通过计算机来进行,大大的减少了硬件上面的资金的投资、硬件制作上时间的投资。其次,SOPC 更加亲民,使用者在使用某个设计好的电路的同时,也可以投身到设计电路的队伍中去,方便大家进行交流,互相促进、再者,SOPC 更加包容,除了可以使用传统的 ASIC 器件以外,更可以将 FPGA 的那些个可编程器件收入囊中,让开发者不再担心兼容问题。2.3 SOPC 怎么做目前 SOPC 的开发主要由以下几种方式:在 FPGA 中嵌入硬核。当今市面上用到这种方法的处理器主要采用 ARM32 架构。因为
9、如果为了兼容性给处理器加入许多通用接口,必将带来成本和功耗的提高。如果将这些处理器换一种方式,变成硬核植入 FPGA,在通过其可编程的特点,多多利用资源,在设计接口时加入需要的功能模块,就能起到一举两得的作用。在 FPGA 中嵌入软核。最有代表性的公司就是 Altera 公司,其开发的 NIOS 和 NIOS II 具有极高的性价比。开发者可以从自身情况出发,通过 quartus ii 以及 SOPC Builder 来搭建 NIOS 软核的外围系统,以此来达到自身需要达到的效果。这一方式解决了知识产权导致的处理器价格偏高、硬核植入带来的后期更改困难的局限性、FPGA 类型限制等之前困扰人们的
10、种种问题。HardCopy 技术。简单的说就是将通过 FPGA 开发出来的 SOPC 系统,通过技术手段转化为 ASIC。这种方式的目的是 Altera 公司为了解决日益严峻的 ASIC 市场竞争问题而相处来的方式。3 NIOS II处理器介绍NIOS II 是 Altera 公司在 2004 年推出的一款软核处理器。相比于 NIOS 的一代,具有更加强大的处理能力和更加小巧的体积。3.1 NIOS II 处理器介绍NIOS II 拥有超过 200DMIPSD 的处理能力,并且配备有丰富的自身资源:指令集、地址位、寄存器、中断位等每一个都出类拔萃。并且还可以通过用户的需要给其加上各式各样的外部
11、设备,比如6flash、SRAM 等。NIOS II 全系列共有三个不同的型号,分别是:快速型、经济型、标准型。快速型拥有最强大的性能,但为此付出了占用大量逻辑资源的代价;经济型最省逻辑资源,所以性能最低;标准型介于快速型和经济型之间,最适合大众的型号。NIOS II 使用的是 HDL 语言,可以和 FPGA 通用,所以十分便利,对有 EDA 开发经验的开发者的学习门槛降低了很多。3.2 NIOS II 处理器的外设介绍要实现基于 NIOS II 的各种功能,但靠一个处理器是远远不够的,还必须通过众多的外围设备来帮助我们达到目的。例如 SRAM 存储器、SD_RAM 存储器,Flash 存储器
12、等等的外围设备都是可以在设计的过程中一一添加的。众多的外围设备主要可以归结为 2 类:硬件开发使用和软件开发使用。其中硬件开发使用的包括能够让外设达到设想功能的外设行为逻辑;能够让处理器访问的外围寄存器;为处理器和寄存器间提供物理接口的 Avalon 总线。而用于软件开发的则是软件驱动子程序,作用是让应用程序可以访问外围设备。开发者们除了使用官方提供的这些 IP 核外,也可以使用各种第三方 IP 核来满足各种各样不同的开发需求。4 SOPC开发流程介绍SOPC 的开发需要用到几个关键的工具,只有掌握了这些工具的使用方法,才能在 SOPC 的开发海洋中畅游。这里将列出在 SOPC 设计环节中将会
13、用到的几个关键的 PC 端应用程序,分别是负责硬件部分开发的 quartus ii9.0、SOPC Builder 以及负责软件部分开发的 NIOS II IDE9.0。quartus ii9.0:依旧来自 Altera 公司,是一个 FPGA 专用的开发软件,能够在上面实现从硬件设计到下载验证的全部开发功能,是 SOPC 设计的最重要一步。SOPC Builder:实际上它属于 quartus 的一部分,关于软核的开发过程例如 CPU 的选择、其他外设的搭建等都需要再这个地方进行,在这里设计好的 SOPC 可以到 quartus 的主界面接续连接其余设备,以此来完成一个高素质的系统。NIOS
14、 II IDE9.0:在 quratus 上完成了硬件部分的开发,接下来的软件功能就要依靠这个 nios 集成开发环境来实现了。同样来自 Altera,是一款可以通过 C/C+编写软件的开发工具。开发者可以通过工程管理器来新建、打开工程,支持同时打开多个工程;在编辑器中输入你的 C/C+代码,程序会贴心的帮你用高亮标出关键字以及纠错,还可以直接在上面进行编译,一举两得;并且该软件还有强大的调试器,能够进行诸如运行控制、软件断点、指令集仿真等等的使用功能。5 内核搭建过程5.1 总体设计思路要实现通过 NIOS II 来读写 SD 卡中的内容,首先需要搭建一个基于 NIOS II 的内核,那么有
15、哪些东西是必不可少的呢?作为一切的关键,必须有一个 CPU,有了 CPU 整个系统才有工作的可能;其次,要有 SDRAM 的外围结构;接着在 SDRAM 的基础上需要加上四个用于在 SD 卡与 CPU 之间通信的 I/O 口,也就是 SD 卡上的 DO、CS、CLK、DI 四个引脚;然后是 Flash 储存器,用来保存软件程序;JTAG 的通信接口,用来下载 Quartus 的电路信息。5.2 A-C8V4 开发板重要电路介绍本次使用的 A-C8V4 开发板是一块以 Cyclone II EP2C8Q208 为核心的开发板,并且具有 SD 卡插口、VGA 接口、PS/2 接口等众多实用的接口,
16、是一块拓展性极强的开发板。下面简单介绍一下这块开发板7中的几个重要电路部分。5.2.1 Flash 储存器开发板使用了一块 4M 的 Flash Am29LV641D。如图 5-1图 5-1 Flash 电路电路中数据总线及地址总线与其他电路公用,读写信号线 nOE、nWE 则是独立连接。为了防止不确定的电平影响芯片工作,故将 5 个 NC 引脚接了上拉电阻。5.2.2 SDRAM 储存器系统若需要使用大量的储存空间,并且需要节约成本的话,就可以使用相对廉价的 SDRAM。但需要实现许多逻辑问题。开发板使用了一块 16 位总线的 SDRAM HY57V2562GTR(16Mx16bit)如图
17、5-2。图 5-2 SDRAM 电路5.2.3 SD 卡槽电路既然是 SD 卡的读写实验,就必须有让 SD 卡能够连接到电路里来的部分,如图 5-3。在电路中还接入了一个 LED 灯,当 SD 卡插入时,灯会亮起,提示 SD 卡正确插入。为了保证 SD 卡正确初始化,8SD_CMD、SD_WP、SD_POWER 都接了上拉电阻。图 5-3 SD 卡槽电路5.3 内核详细构建过程首先打开 quartus ii 新建一个工程,选择 FPGA 芯片型号为上面提到的 Cyclone II EP2C8Q208,然后点击 SOPC Builder 的按钮,开始构建我们的软核。第一步,加入一个 cup_0。
18、这是为整个系统加入处理器的过程,由于整个过程中会使用到的资源并不算太多,所以选择 NIOS II/e 模式就够了,其在 200MHZ 时,可以达到 30DMIPS,并且具有高达 2GB 的外部地址空间、JTAG 调试模块。频率使用默认的 50MHZ。第二步,添加一个 jtg_uart。作用是让 PC 和开发板可以通过 JTAG UART 来通信。具体操作为在 Interface Protocols 中找到Serial,然后选择其中的 JTAG_UART;第三步,添加一个 sdram,这步是整个构建过程中最重要的一部,因为只有建立了这个,开发板才能对 SD 卡里的内容进行访问。具体方法:在 Me
19、mories and Memory Controllers 中找到 SDRAM,选择 SDRAM Controller;第四步,添加 sysid,只是用来检测软硬件是否匹配,并不是非加不可;第五步,添加 cfi_flash,这个是开发板中的 flash 储存器,能够用来存放数据,并且在断电后依旧存在,地址宽度选择 22,数据宽度选择 16;第六步,添加 timer,定时器,任何电路中都必不可少;第七步,添加 tri_state_bridge_0,三态传输桥,这样 SRAM 和 Flash 就可以和 Avalon 进行直接的连接了;第八步,添加 RS232_UART,RS232 电平的串口;第九
20、步,添加四个 PIO 口:cs_spi,clk_spi,di_spi,do_spi,用于连接 SD 卡,并使用 SPI 模式通信。在 Peripherals 中选择 Microcontroller Peripherals 然后加入 I/O 口,并将选择宽度为 1,模式设置为仅输出,重复 4 次,将四个 PIO 口做好。最终的内核构建结果如下图所示。9图 5-4 NIOS II 软核的构建5.4 顶层原理图除了 NIOS II 的模块外,还有一个东西是必不可少的,那就是锁相环。锁相环的作用是让信号在输入与输出时能够有更加准确的相关关系。要添加一个锁相环,必须先建立一个顶层原理图,然后再图中空白区域双击,出现选择器件的选项框,然后点击 MegaWizard Plug-In Manager 这个按钮,并在之后的选项中找到 I/O 中的 ALTLL 并为其命名为 pll1,之后将 CLK C2 的时钟相移设置为-63。最终成果如下图。图 5-5 锁相环原理图然后将刚刚设计好的 NIOS 软核也添加到原理图中,与锁相环相连接。10图 5-6 完整顶层原理图连接好后,锁上相关的引脚。图 5-7 引脚锁定6 软件设计