首页 » 技术文章 » 基于Avalon总线的SD卡读写控制器的设计

基于Avalon总线的SD卡读写控制器的设计

作者:  时间:2011-05-24 20:05  来源:电子产品世界

  4 Avalon-MM接口设计

  为了实现数据在Avalon总线上的传输,必须实现Avalon总线相关信号和时序逻辑,主要包括数据、地址、读/写控制、中断、时钟复位等信号。

  Avalon-MM Master端口主要用来将读/写控制逻辑部分读到的数据写入内存,或者将内存中的数据写入读/写控制逻辑,其接口信号如表1所示。

  Avalon-MM SIave端口主要用来接收相关控制命令,即通过这个端口实现控制器内部寄存器的访问,其接口信号如表2所示。

  该控制器内部有6个寄存器,也可以根据需要实现更多,通过软件设置相关寄存器即可进行读/写SD卡的操作,寄存器功能描述如表3所示。

  5 系统硬件设计

  为了验证SD卡读写控制器,在DE2开发平台上搭建了最基本的硬件系统,主要包括:Nios处理器,PLL锁相环,片上RAMJTAG UART和自定义的SD卡读写控制器。Nios作为系统主控制器,PLL用来产生SD卡读/写所需的时钟信号,片上RAM用来存储代码和数据,JTAG UART主要用来调试,打印数据到控制台验证写入的数据和读出的数据是否相同。

  硬件系统的建立主要利用Altera公司Quartus开发工具以及其集成的SoPC Builder完成的,关键在于如何用SoPC BuilderSD卡读写控制器添加到元件列表中。在SoPC Builder提供的图形化的界面下,添加控制器Verilog源程序后,设置控制器中各信号在Avalon-MM总线中的信号类型等,图2即为添加好的SD卡读写控制器。

  图2中,各引脚的描述如下:

  •   base_clock:控制器输入时钟,该设计采用PLL产生的25MHz时钟信号;
  •   clk_to_SDSD卡时钟信号输入;
  •   cmd_SDSD卡命令,响应输入/输出信号;
  •   data_SDSD卡数据信号。

  根据SD控制器的寄存器映射,在Nios IDE中编写C程序控制SD卡控制器进行读/写操作,下面代码为写SD卡的一段程序,读SD卡的的过程与其类似。

  读/写完一个扇区后,控制器会产生一个中断,此时即可进行下一次读/写操作。由于SD卡读/写有比较复杂的时序要求,命令、响应众多,在设计的初期,采用Modelsim做了各方面的功能仿真,功能仿真完成后采用Quartus自带的SignalTap逻辑分析仪来测试分析内部逻辑的工作状态,SignalTap使用简单方便,更重要的是可以实时观测内部信号变化,而且可以设置触发条件,大大提高了开发的效率。图3是用SignalTap逻辑分析仪捕捉到的波形。

  图3中,status_reg为状态寄存器,00000900表明卡已处于就绪状态,control_reg为控制寄存器,00000001H表明已经开始了一次对扇区0的写传输,mread的上升沿即开始了Master端口的读传输,这里的读指的是将内存中buf数组中的数据读入控制器,再由控制器写入SD卡中,waitrequest为等待信号,高电平时无法进行数据传输,waitrequest无效后可以很明显地看到000000DFHMaster端口读入控制器,再由读写控制逻辑写入SD卡。

  6 结语

  该设计采用SoPC技术实现了SD卡读写控制器,通过Nios处理器控制实现了SD卡读/写。由于该控制器根据Avalon接口规范进行开发,可以很方便以IP核的形式集成到其他SoPC系统中,简单实现SD卡的读/写,大大降低了开发成本和难度。本文所设计的SD卡读写控制器还有一大优点就是具有Master端口,可以自主完成数据的读/写,无需CPU的干预,另外采用了中断,降低了响应延时,提高了读/写速率。该设计满足了大部分数据存储需求,适用于工业监测控制,一般消费类电子产品等。

相关推荐

一种嵌入式系统升级的设计和实现

嵌入式  SD卡  2011-07-28

基于Avalon总线的SD卡读写控制器的设计

SD卡  Avalon总线  2011-05-24

基于CortexM3的SD卡图片浏览器

SD卡  图片浏览器  2011-01-26

Maxim推出高速USB至SD卡桥接器

Maxim  USB  SD卡  桥接器  2009-11-04

ATmega128L单片机的MiCro SD卡读写

ATmega128L  MiCro SD卡  SPI  2009-07-24

基于eCos系统的SPCE3200中SD卡驱动程序的开发

eCos系统  SPCE3200  SD卡  驱动程序  2009-06-21
在线研讨会
焦点