SD内存卡是最新一代的内存设计_第1页
SD内存卡是最新一代的内存设计_第2页
SD内存卡是最新一代的内存设计_第3页
SD内存卡是最新一代的内存设计_第4页
SD内存卡是最新一代的内存设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、引言SD内存卡是最新一代的内存设计,如邮票般大小而已却具有下列几项优点;资料储存量高、传输资料速度快、携带方便与安全性极佳。由於采用非挥发性内存元件并外有保护壳,所以SD卡不需要电力,资料就可妥善保存於其内。由於SD卡使用的元件坚固,不易损坏、是可靠度极佳的产品。微电子技术的近期发展成果,为SOC的实现提供了多种途径。对于经过验证而又具有批量的系统芯片,可以做成专用集成电路ASIC而大量 生产。而对于一些仅为小批量应用或处于开发阶段的SOC,若马上投入流片生产,需要投入较多的资金,承担较大的试制风险。最近发展起来的SOPC技术则提 供了另一种有效的解决方案,即用大规模可编程器件的FPGA来实现

2、SOC的功能。 可编程逻辑器件产生于20世纪70年代。其出现的最初目的是为了用较少的PLD品种替代种类繁多的各式中小规模逻辑电路。在30多年的发展过程中,PLD的结构、工艺、功耗、逻辑规模和工作速度等都得到了重大的进步。尤其是在20世纪90年代,出现了大规模集成度的FPGA,单片的集成度由原来的数千门, 发展到数十万甚至数百万门。芯片的I/O口也由数十个发展至上千个端口。有的制造商还推出了含有硬核嵌入式系统的IP。因此,完全可能将一个电子系统集成 到一片FPGA中,即SOPC,为SOC的实现提供了一种简单易行而又成本低廉的手段,极大地促进了SOC的发展。SOPC技术是美国Altrea公司于20

3、00年最早提出的,并同时推出了相应的开发软件Quartus II。SOPC是基于FPGA解决方案的SOC,与ASIC的SOC解决方案相比,SOPC系统及其开发技术具有更多的特色,构成SOPC的方案也有如FPGA嵌入IP软核的SOPC系统。1 SOPC技术和SD卡简介 SOPC技术简介 SOPC(System On Programmable Chip)即可编程的片上系统,或者说是基于大规模FPGA的单片系统。SOPC的设计技术是现代计算机辅助设计技术、EDA技术和大规模集成电路技术高度发展的产物。SOPC技术是将尽可能大而完整的电子系统,包括嵌入式处理器系统、接口系统、硬件协处理器或加速系统、D

4、SP系统、数字通信系统、存储电路以及普通数字系统等,在单一FPGA中嵌入实现。大量采用IP复用、软硬件协同设计、自顶向下和自底向上混合设计的方法,边设计、边调试、边验证原本需要写上几千行的VHDL代码的功能模块,通过嵌入IP核后,只需几十行C代码即可实现。因此,可以使得整个设计在规模、可靠性、体积、功耗、功能、性能指标、上市周期、开发成本、产品维护及其硬件升级等多方面实现最优化。 传统的设计技术已经很难满足系统化、网络化、高速度、低功耗、多媒体等实际需求,SOPC(片上可编程系统)可将处理器、存储器、外设接口和多层次用户电路等系统设计需要的功能模块集成到一块芯片上,因其灵活、高效、设计可重用特

5、性,已经成为集成电路未来的发展方向,广泛应用到汽车、军事、航空航天、广播、测试和测量、消费类电子、无线通信、医疗、有线通信等领域。 SOPC技术是一门全新的综合性电子设计技术,涉及面广。因此在知识构成上对于新时代嵌入式创新人才有更高的要求,除了必须了解基本的EDA软件、硬件描述语言和FPGA器件相关知识外,还必须熟悉计算机组成与接口、汇编语言或C语言、DSP算法、数字通信、嵌入式系统开发、片上系统构建与测试等知识。显然,知识面的拓宽必然推动电子信息及工程类各学科分支与相应的课程类别间的融合,而这种融合必将有助于学生的设计理念的培养和创新思维的升华。 NiosII核简介NiosII是Altera

6、公司推出的32位精简指令集(RISC)嵌入式处理器核,与一般的单片机不一样,它只是个软核,没有固化在FPGA内部,其使用的灵活性则又上升了一个台阶,FPGA内部资源的应用合理性也能做到最大的优化。NiosII作为ALtera公司的SOPC技术的核心具有高性能,高灵活性,和超低成本的特点,由于其软核的特性,Altera将其使用权以免费的方式给予开发人员,其成本的消耗即FPGA内部资源的消耗,以门和FPGA器件的本身成本来看NiosII大约只有35-50美分。结合完善的配套开发工具QuantursII,SopcBuilder,NiosII_IDE可以在短短数日之间构成一个完整的片上系统。 SD卡及

7、其原理简介1.3.1 SD卡结构SD卡高度集成闪存,具备串行和随机存取能力。可以通过专用优化速度的串行接口访问,数据传输可靠。接口允许几个卡垛叠,通过他们的外部连接。接口完全符合最新的消费者标准,叫做SD卡系统标准,由SD卡系统规范定义。 SD卡系统是一个新的大容量存储系统,基于半导体技术的变革。 它的出现,提供了一个便宜的、结实的卡片式的存储媒介,为了消费多媒体应用。 SD卡可以设计出便宜的播放器和驱动器而没有可移动的部分。 一个低耗电和广供电电压的可以满足移动电话、电池应用比如音乐播放器、个人管理器、掌上电脑、电子书、电子百科全书、电子词典等等。 使用非常有效的数据压缩比如MPEG,SD卡

8、可以提供足够的容量来应付多媒体数据。特性:n 容量:32MB/64MB/128MB/256MB/512MB/1Gbyten 兼容规范版本1.01 n 卡上错误校正 n 支持CPRM n 两个可选的通信协议:SD模式和SPI模式 n 可变时钟频率025MHz n 通信电压范围:2.0-3.6V 工作电压范围:2.0-3.6V n 低电压消耗:自动断电及自动睡醒,智能电源管理 n 无需额外编程电压 n 卡片带电插拔保护 n 正向兼容MMC卡 n 高速串行接口带随即存取 支持双通道闪存交叉存取 快写技术:一个低成本的方案,能够超高速闪存访问和高可靠数据存储 最大读写速率:10Mbyte/s n 最大

9、10个堆叠的卡(20MHz,Vcc=2.7-3.6V) n 数据寿命:10万次编程/擦除 n CE和FCC认证 n PIP封装技术 n 尺寸:24mm宽×32mm长厚图 1.1 SD卡结构图1.3.2 SD卡原理简介该SD卡的接口可以支持两种操作模式:SD卡模式和SPI模式 。主机系统可以选择以上其中任一模式,SD卡模式允许4线的高速数据传输。 SPI模式允许简单通用的SPI通道接口。1) SD卡模式针脚定义 针脚 名称 类型 描述 1 CD DAT3 I/O/PP 卡监测数据位3 2 CMD PP 命令/回复 3 Vss S 地 4 Vcc S 供电电压 5 CLK I 时钟 6

10、Css2 S 地 7 DAT0 I/O/PP 数据位0 8 DAT1 I/O/PP 数据位1 9 DAT2 I/O/PP 数据位2 1:S:电源供电,I:输入O:输出 I/O:双向 PP:I/O使用推挽驱动 ¨ SD卡的总线概念 SD总线允许强大的1线到4线数据信号设置。当默认的上电后,SD卡使用DAT0。 初始化之后,主机可以改变线宽。混和的SD卡连接方式也适合于主机。在混和连接中Vcc,Vss和CLK的信号连接可以通用。但是,命令,回复,和数据(DAT03)这几根线,各个SD卡必须从主机分开。 这个特性使得硬件和系统上交替使用。SD总线上通信的命令和数据比特流从一个起始位开始,以

11、停止位中止。 CLK:每个时钟周期传输一个命令或数据位。频率可在025MHz之间变化。SD卡的总线管理器可以不受任何限制的自由产生025MHz的频率。 CMD:命令从该CMD线上串行传输。一个命令是一次主机到从卡操作的开始。命令可以以单机寻址(寻址命令)或呼叫所有卡(广播命令)方式发送。 回复从该CMD线上串行传输。一个命令是对之前命令的回答。回复可以来自单机或所有卡。 DAT03:数据可以从卡传向主机或副versa。数据通过数据线传输。图 SD卡总线拓扑2) SPI模式针脚定义 针脚 名称 类型 描述 1 CS I 片选(负有效) 2 DI I 数据输入 3 Vss S 地 4 Vcc S

12、供电电压 5 CLK I 时钟 6 Vss2 S 地 7 DO O 数据输出 8 RSV - 9 RSV - 1:S:电源供电,I:输入O:输出 I/O:双向 PP:I/O使用推挽驱动注意:SPI模式时,这些信号需要在主机端用10100K欧的电阻上拉。 ¨ SPI 总线概念 SPI总线允许通过2通道(数据入和出)传输比特数据。SPI兼容模式使得MMC主机系统通过很小的改动就可以使用SD卡。SPI模式使用字节传输。 所有的数据被融合到一些字节中并同过CS信号来校正。SPI模式的优点就是简化主机的设计。图 SPI模式总线拓扑2 实现方案选择和思路 实现方案选择根据SD卡提供可选择的两种方

13、案:SD卡模式和SPI模式,分析如下:¨ SD卡模式可以4通道同时传输,速度较快;¨ SPI模式兼容性强,每次传输单个字节,可以简化主机的设计,并且主机小改动就可以实现;从SPI模式的优点来看,比较符合设计要求。在读写速度不作为过多要求情况下,SPI模式对主机要求更低,易于修改,显然更胜一筹,所以选择SPI模式。 设计思路 SD卡需要与SOPC开发板连接,根据SD卡的端口特性,如下图。图2.1 SD卡的连接电路图SD卡需要特殊的插座,所以利用SD卡插座模块,插入SD卡,通过模块于SOPC开发板连接。SD卡插座模块原理图如下图2.2。图2.2 SD卡插座模块原理图连接好SD卡

14、于SOPC开发板后,设计带有PS2键盘输入和LCD显示的NIOS系统,并编写相应的软件程序控制,最后完成调试。3 NIOS系统设计IP核则是一段具有特定电路功能的硬件描述语言程序,该程序与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。利用IP核设计电子系统,引用方便,修改基本元件的功能容易。具有复杂功能和商业价值的IP核一般具有知识产权,尽管IP核的市场活动还不规范,但是仍有许多集成电路设计公司从事IP核的设计、开发和营销工作。IP核有两种,与工艺无关的VHDL程序称为软核;具有特定电路功能的集成电路版图称为硬核。硬核一般不允许更改,利用硬核进行集成电路设计难度大,但是容易

15、成功流片。IP(知识产权)核将一些在数字电路中常用,但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等设计成可修改参数的模块。IP核的重用是设计人员赢得迅速上市时间的主要策略。随着CPLD/FPGA的规模越来越大,设计越来越复杂(IC的复杂度以每年55%的速率递增,而设计能力每年仅提高21%),设计者的主要任务是在规定的时间周期内完成复杂的设计。调用IP核能避免重复劳动,大大减轻工程师的负担,因此使用IP核是一个发展趋势。IP核包括硬IP与软IP。可配置IP是参数化后的可重定目标IP,其优点是可以对功能加以裁剪,以符合特定的应用。这些参数包括总线宽度、存储器容量、使能或禁止功能

16、块。硬IP最大的优点是确保性能,如速度、功耗等。然而,硬IP难以转移到新工艺或集成到新结构中,是不可重配置的。软IP是以综合形式交付的,因而必须在目标工艺中实现,并由系统设计者验证。其优点是源代码灵活,可重定目标于多种制作工艺,在新功能级中重新配置。 SD卡的IP核设计IP核设计受到Avalon总线使用规范约束。Avalon总线是一种相对简单的总线结构,主要用于连接片内处理器与外设,以构成可编程单芯片上系统(SOPC)。它描述了主从构件间的端口连接关系,以及构件间通信的时序关系。Avalon总线拥有多种传输模式,以适应不同外设的要求。Avalon总线的基本传输模式是在一个主外设和一个从外设之间

17、进行单字节、半字或字(8、16或32位)的传输。当一次传输结束后,不论新的传输过程是否还是在同样的外设之间进行,Avalon总线总是可以在下一个时钟周期立即开始另一次传输。Avalon总线上外设可以在片内,也可以在片外。它完成一定的功能,并通过Avalon总线与其他的系统构件通信。外设是模块化的系统构件,可以根据系统的要求在设计时增加或删除。Avalon外设包括存储器和处理器,还包括传统的外设模块,例如UART、PIO、定时器和总线桥等。任何用户自定义逻辑只要提供了连接Avalon总线的地址、数据和控制信号,就能成为Avalon外设。Avalon外设连接到Avalon总线模块为其分配的特定端口

18、上。除了Avalon总线信号外,外设还可以拥有自定义的端口,用来连接系统模块外的用户自定义逻辑。Avalon外设分为主外设和从外设两类,能够在Avalon总线上发起总线传输的外设是主外设。一个主外设至少拥有一个连接到Avalon总线模块上的主端口。主外设也可以拥有从端口,使得该外设可以响应Avalon总线上由其他主外设发起的总线传输。从外设只能响应Avalon总线传输,而不能发起总线传输。存储器设备和UART等从外设,通常只有一个连接到Avalon总线模块上的从端口。3.1.1 SPI协议原理分析SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设

19、备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK

20、(时钟),CS(片选)。(1)SDO     主设备数据输出,从设备数据输入(2)SDI     主设备数据输入,从设备数据输出(3)SCLK   时钟信号,由主设备产生(4)CS      从设备使能信号,由主设备控制其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道

21、SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,

22、甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。SPI是一个环形总线结构,由ss(cs)、sck、sdi、s

23、do构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对SPI的8个时钟周期的数据情况演示一遍:假设上升沿发送数据(分析原理图详见附录

24、1)。这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个8位时钟周期才把数据读回来。3.1.2 SD卡SPI模式的IP核设计SPI模式为双工主从通信,所以必须设计主机于从机的通信线以及从机对主机的通信线。设MOSI为主机至从机的通信线,MISO为从机至主机的通信线。那么加上必要的同步时钟输出和可选择使用的SPI片选信号,可预计

25、模块设计如下图。图 SD卡SPI模块预计图IP核的关键部分是读取和写入,那么根据数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。所有设计如下:主机读取从机,必须是两个时钟周期的触发,读取的v程序如下 always (posedge clk or negedge reset_n) begin if (reset_n = 0) rd_strobe <= 0; else if (1) rd_strobe <= p1_rd_strobe; end assign p1_data_rd_strobe = p1_rd_

26、strobe & (mem_addr = 0); always (posedge clk or negedge reset_n) begin if (reset_n = 0) data_rd_strobe <= 0; else if (1) data_rd_strobe <= p1_data_rd_strobe; end读取程序也可以以相似的两周期触发写出程序,不再列出,详细程序见附录。 NIOS系统的设计有了SD卡的IP核以后,便可通过SOPC Builder设计NIOS核。进入SOPC Builder。图 SOPC Bulider首先添加必要的sdram control

27、ler、jtag、interval timer,然后添加LCD16207液晶显示设备。根据SD卡的接口特点,必须还要添加5个用于控制的1位PIO。根据功能的不同,它们其中的3个是:1位只输入sd_insert,1位只输入sd_wp,1位只输入sd_power;另外2个是1位只输出PIO核sd_pwr负责在对SD卡下电时拉低SPI接口,一个1位只输出PIO核sd_cs负责利用软件对SPI从设备进行显示片选。最后添加一个8位的PIO,用于键盘输入。具体功能如下表3.1。接口含义SD_WP卡写保护检测线:写保护时该引脚为高电平,否则为低电平SD_INSERT卡插入检测线:SD卡插入该引脚为低电平,否

28、则为高电平SD_nCSSD卡片选信号,该引脚为I/O口SD_POWER卡供电控制,该引脚输出低电平时给卡供电表3.1 SD卡卡座连接引脚功能表NIOS系统添加完成,如下图。图 NIO系统设备图添加完成后,让系统自动分配好设备地址,选择目标板为验证时使用的sopc_niosii_board_ep2c8,即可生成NIOS核。生成成功如下图。图 NIOS系统生成成功4 其他模块的设计 键盘模块分析设计 PS2键盘接口协议采用的是PS2传输协议其基本规范可以描述如下:从键盘/鼠标发送到主机的数据在时钟信号的下降沿,既当时钟从高变到低的时候被读取从主机发送到键盘的数据在上升沿当时钟从低变到高的时候被读取

29、,不管通讯的方向怎样键盘总是产生时钟信号,如果主机要发送数据它必须首先告诉设备开始产生时钟信号这个过程。所有数据安排在字节中每个字节为一帧包含了11 12 个位这些位的含义如下:(1)1 个起始位总是为0(2)8 个数据位低位在前(3)1 个校验位奇校验 (4)1 个停止位总是为1(5)1 个应答位(仅在主机通信的时候使用)如果数据位中包含偶数个1 校验位就会置1, 如果数据位中包含奇数个1 校验位就会置0 数据位中,1 的个数加上校验位总为奇数这就是奇校验这是用来错误检测。由于本设计只需要设备到键盘接口逻辑,因此着重分析从设备到到主机的传输协议,其概要性的描述如下:当键盘等待发送数据时,首先

30、检查时钟以确认是否是高电平,如果不是那么是主机抑制了通讯设备,必须缓冲任何要发送的数据直到重新获得总线的控制权键盘。有16 字节的缓冲区仅存储最后一个要发送的数据包,如果时钟线是高电平设备就可以开始传送数据。其传输协议图如图。图 PS2键盘传输协议时序图中描述了两个重要的定时条件:(a)和(b)。(a)在主机最初把数据线拉低后,设备开始产生时钟脉冲的时间,必须大于15ms,(b)数据包被发送的时间必须不大于2ms。如果这两个条件不满足,主机将产生一个错误。在包受到后,主机为了处理数据立刻把时钟线拉低来抑制通讯。如果主机发送的命令要求有一个辉映,这个辉映必须在书籍释放时钟线后20ms之内被收到。

31、如果没有收到,则主机产生一个错误。在设备到主机通讯的情况中,时钟改变后的5微秒内不应该产生数据改变的情况。根据以上分析,vhdl程序关键部分如下,具体代码请见附录2的key_interface.vhd。代码说明:中间的process(reset,k_clock,sys_clk) 到end process;enable<=started;PA<="00000000" when enable='1' else tmp(8 downto 1);为核心逻辑,主要功能为将把键盘按下的通断码转换成相应的时序输出对应的键盘表示数据码。之后process(PA)

32、描述的是一个多路器组合逻辑,其作用为将对应标志转换成IEEE协会规定的标准ANIS 码,以用来方便各种应用接口。 锁相环的设计利用quartus软件自带的宏单元定义,可以方便的定义需要的锁相环,用于使一个时钟分出几个不同频率时钟供使用。进入Mega Wizard Plug-In Manager,根据开发板的芯片频率设置好输入时钟为50MHZ,分出供sdram使用的时钟50MHZ,供键盘使用的时钟10MHZ,供NIOS系统使用的时钟50MHZ。如图。图 锁相环的添加 延迟模块的设计延迟模块用于复位按键的延迟。延迟模块其实是一个简单的10位计数器和一些简单的逻辑构成的。如下图。 图 延迟模块内部原

33、理图其中的lpm_counter0是由宏单元定义的10位计数器。5 软件设计软件设计借助了Nios II IDE来进行设计。Nios II IDE提供了完整的C/C+软件开发套件,包括编辑器、项目管理器和构建工具、调试器和兼容CFI(Common Flash Interface)的Flash编程器。调试器连接多种目标系统,包括FPGA硬件(通过JTAG电缆)、Nios II指令集仿真器和ModelSim?-Altera软件,因而能够提供最灵活的调试方案。支持Nios II片内设备核的强大功能,包括:u 两个硬件执行断点有助于调试存储在ROM或Flash存储器中的固件代码。u 两个带比特掩码和范

34、围控制的数据触发器非常适合于跟踪访问关键数据代码。u 128帧带源码级重建的片内跟踪。 SD卡IP核控制程序 首先要对NIOS系统的各个设备的基地址进行设置,否则将会查找不到相应的设备。为了程序员使用方便,应该对提供的IP核的软件部分进行封装,提供头文件能够达到此效果。设计SD卡配置文件,专门用于配置SD卡的5个控制PIO基地址。文件名为sdconfig.h。举例关键程序如下:#ifndef SD_INSERT_BASE#define SD_INSERT_BASE 0x00800860 #endif#if SD_INSERT_BASE = 0xffffffff#error "No d

35、efinition of SD_INSERT PIO core.n"#endif其中的0x00800860是SD_INSERT的基地址,地址完全于NIOS系统中分配的基地址一致。如果SD_INSERT的基地址为0xffffffff,将会判断SD_INSERT设备不存在。类似的,定义其他的设备地址也是必须的,程序详见附录。io.h是NiosII处理器专用的IO头文件,定义了以不同地址对齐方式与Avalon总线互连的外设寄存器实际物理地址计算的方法,同时还定义了一系列用于读写IO口或者寄存器的宏。IOWR函数的定义在这个头文件中。其原形如下:IOWR(base,offset,data);

36、 base为器件的片选地址,offset为偏移地址,此偏移动地址为1,实际上和niosinterface.v中的address=1时为功能选中是有相互关联的, base总是以SOPC_Builder中的器件名加上_BASE作为基地址。所以写SD卡读取程序时,先设计头文件来定义读取函数SD_ReadBlock()然后写入驱动程序。int SD_ReadBlock(INT32U blockaddr, INT8U *recbuf)程序中定义了块地址为INT32U类型和缓冲区为INT8U类型,在设计主程序时数据类型要于之符合。类似的可以写出写入初始化、擦除区块和写入程序。程序详见附录3。 PIO设备读

37、取程序altera_alalon_pio.regs.h文件是PIO的HAL外设头文件,定义了PIO用于寄存器读写操作的宏,用于返回寄存器物理地址的宏以及用于但个寄存器的位域操作的MSK和OFST宏其中,IOWR函数已经介绍,IORD_ALTERA_AVALON_PIO_DATA(base)函数为读取数据函数它通过base提供的外设物理地址读取数据,并且返回读取的数据值。因此使用value=IORD_ALTERA_AVALON_PIO_DATA(PIO_IN_BASE);来读取名为PIO_IN_BASE地址的数据,并且保存在value变量中。通过头文件定义后,直接使用上述指令。例如:IOWR_A

38、LTERA_AVALON_PIO_DATA(LED_WRITE_BASE, 1),此指令可以令对应LED_BASE的LED灭,把1改成0即为使LED亮。6 下载调试将所有硬件添加到顶层文件中并且锁定引脚,顶层文件图如下: 图6.1 顶层文件中的键盘等模块 图6.2 顶层文件中的Nios系统 图6.3 顶层文件中的输出逻辑下载硬件至SOPC开发板中,把SD卡插座模块的插针与开发板中自定义的针脚连接起来,连接图如下图。图 SD卡插座与SOPC开发板的连接图使用Nios II IDE下载软件至开发板中,即可进行调试。开始时SD卡能正确的进行初始化和读写。键盘输入时按下一个按键,输出的字符保持这个按键

39、的字符不变,并且一直的输出相同的字符。经过分析,这个问题产生于键盘模块,设计的缺陷造成输出ascii码后并不停止输出,而是保持这个ascii码。经过考虑,利用键盘的使能信号enable来对输出进行控制。于是加入这样一个电路如下图。图 脉冲信号产生电路该电路的功能是使输入信号触发产生一个脉冲信号。仿真图如下图。图 脉冲信号发生电路仿真图如上图所示,enable信号的产生通过此电路就能产生一个脉冲信号,作为键盘输入的触发信号,可以实现按一个键出一个字符并且不会保持输入同一个字符。加入脉冲信号发生电路后,实际的结果是按键能够响应,可是系统不能读取键盘输入。经过分析,脉冲信号发生电路产生的脉冲宽度不够

40、,系统未能执行到读取键盘信息的程序就停止执行了,导致无法正确读取键盘。针对这样的问题,简单的设计了一个小模块,使脉冲宽度加宽。模块VHDL程序关键部分如下:begin if rising_edge(in1) then out1<='1' if counter=2 then out1<='0'counter:=0;else counter:=counter+1; end if; end if;此模块功能是当脉冲上升沿来临时,输出高电平并且开始计数,2个时钟周期后输出低电平。这样脉冲宽度就可以由时钟频率和计数数量来进行控制了。加入此模块的同时,在主程序上

41、加入一条延迟语句用于按键延迟for(t=9;t<3000000;t+)其中的t的范围可以对延迟时间进行控制,根据不同需要而定。这里设定为3000000,大约为1秒多一点时间的延迟。按照以上的分析和改良后,键盘输入可以每隔1秒左右输入一个字符进入系统,并能成功的使SD卡读写到字符,改良成功。7 心得体会经过查阅资料和虚心提问,在老师和同学的帮助下完成了本次毕业设计。过程曲折困难重重,但是经过和老师的讨论和自己细心思考,更换了许多方案尝试多次以后才把问题最终解决,达到了设计的要求标准,我觉得对我自己解决问题能力的提高和对本次设计结果都十分满意。感触最深的是我在一次次问题解决时,又有一个个问题

42、接着出现,我也曾一度烦躁不安,一个个思考许久的方案经过验证又一次次被放弃,心情十分低落。刚刚开始时对NIOS只是局限于在实验课上的一些了解,通过查阅各种SOPC技术的书籍,对整个流程才有了更深的理解。同时对SD卡本身的原理理解开始就是一张白纸,不断的查阅各种资料才有了基本的了解。调试的过程才是考验的开始。要使设计和理论目标达成一致是非常困难的,理论又和实际的差距巨大,所以调试过程正是整个设计让我学习到知识,提高解决问题能力最好的一步。我相信有了这次设计的体会,今后在工作和学习中将会更好的找准问题的关键,并且能够耐心细心的去解决它,这是我获得的宝贵财富。谢 辞即将毕业之际,完成毕业设计我心怀感激

43、。特别特别感谢导师韦雪明,许多的方案和设计思路都是经过韦老师的点拨提示和对我的错误更正,才能最终确定下来最正确的。整个设计过程韦老师非常耐心的指点,我感动不已。同时在师生交流时体会到了研究问题的乐趣,这点是非常的难能可贵。还要特别感谢在设计时帮助过我的同学冯仲辉和胥明君,他们给我的帮助让我省去走了不少弯路,谢谢。临近毕业,我想感激教育过我的所有老师和一起学习生活的同学们,没有你们我不敢想象会是怎么样。感谢学校提供的实验室和仪器,感谢图书馆提供的资料。参考文献.西安大学出版社,2004.2 Uwei Meiyer-baese. Digital Signal Procesing With Fili

44、d Programmable Gate Arrays.清华大学出版社,2002.3 SanDisk Corporation. SanDisk Secure Digital Card. Product Manual Version 2.2 Document No. 80-13-00169 September 2004.4 范江,吴军辉,徐立鸿.基于Altera Nios的信号高速采集系统J .计算机测量与控制,2004 ,12(5) :489 491.5 彭澄廉.挑战SOC-基于NIOS的SOPC设计与实践M .北京:清华大学出版社,2004.6 周立功.SOPC嵌入式系统基础教程M.北京:北京

45、航空航天大学出版社,2006.7 潘松. SOPC技术实用教程. 北京:清华大学出版社,2005.8 姜仲秋主编.C语言程序设计.南京:南京大学出版社,1998.9 Altera, Corp.Nios32-Bit Programmers Reference ManualZ. 2003.10 Altera,Corp.NiosII Development Kit Getting Started User Guide.2005.11 Altera, Corp.NiosII Processor Reference Handbook.2006.12 Altera, Corp.NiosII Softwar

46、e Development Handbook.2006.13 Altera, Corp.NiosII Avalon Interface Specification.2005.14 Altera, Corp.NiosII Custom Instruction User Guide. December,2004.15 Altera, Corp.Configuration Handbook,Volume 1.2006.附录1 SPI的数据交换附录2 键盘接口程序Klibrary IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.

47、ALL;entity key_interface is PORT( sys_clk : in STD_LOGIC; -系统同步时钟 k_data : in STD_LOGIC; -键盘数据 k_clock : in STD_LOGIC; -键盘时钟 reset : in STD_LOGIC; enable : buffer std_logic ; ZHJS : buffer STD_LOGIC ; -扫描码转换结束信号 ascii : out STD_LOGIC_VECTOR(7 DOWNTO 0) );end key_interface; architecture behav of key_

48、interface is signal tmp : STD_LOGIC_VECTOR(11 downto 0) :="000000000000"-用来记录一帧信号 -signal enable : std_logic :='0' -输出使能 signal now_kbclk,pre_kbclk : std_logic; -signal data : STD_LOGIC_VECTOR(7 DOWNTO 0); -扫描码输出 signal PA : STD_LOGIC_VECTOR(7 DOWNTO 0); signal started:STD_LOGIC ;b

49、egin process(reset,k_clock,sys_clk) -系统时钟(sys_clk)比键盘时钟(k_clock)快很多- variable started:STD_LOGIC :='0' variable counter :integer range 0 to 11 :=0;begin if reset='0' then ZHJS<='1'counter:=0;started<='0' elsif rising_edge(sys_clk) then -系统时钟(sys_clk)比键盘时钟(k_clock

50、)快很多 pre_kbclk <= now_kbclk; now_kbclk <= k_clock; if(pre_kbclk > now_kbclk) then -由时序图可知,如果有数据发送则键盘时钟(k_clock)作周期性变化;如果k_clock 一直是高电平,则表示键盘正准备要发送数据。 tmp(counter)<=k_data; -键盘数据存tmp,例如,起始位存tmp0,8位数据存tmp1tmp8if counter=11 then counter:=1;else counter:=counter+1; -通过加法器把键盘的串行数据变成并行数据,即存tmp

51、counter里面,这样做可以减少占用芯片资源. end if; end if; end if;if(counter>10) then started<='1'else started<='0' end if; if counter=10 then ZHJS<='0' -ZHJS=0表示接收结束 else ZHJS<='1' end if;end process;enable<=started;PA<="00000000" when enable='0'

52、 else tmp(8 downto 1); -如果接收完,则将tmp8.1存PA -data<=PA; process(PA) begin case PA is when"01000101"=> ascii<="00110000" -'0' when"00010110"=> ascii<="00110001" -'1' when"00011110"=> ascii<="00110010" -'

53、2' when"00100110"=> ascii<="00110011" -'3' when"00100101"=> ascii<="00110100" -'4' when"00101110"=> ascii<="00110101" -'5' when"00110110"=> ascii<="00110110" -'6

54、9; when"00111101"=> ascii<="00110111" -'7' when"00111110"=> ascii<="00111000" -'8' when"01000110"=> ascii<="00111001" -'9' when"00011100"=> ascii<="01100001" -'a' w

55、hen"00110010"=> ascii<="01100010" -'b' when"00100001"=> ascii<="01100011" -'c' when"00100011"=> ascii<="01100100" -'d' when"00100100"=> ascii<="01100101" -'e' when"00101011"=> ascii<="01100110" -'f' when"00110100"=> ascii<="01100111" -'g' when"00110011"=> ascii<="01101000" -'h' when"01000011"=> ascii<="01101001" -'i' when&quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论