2007年4月
电子器件
ChineseJournalOfElectronDevices
Vol.30 No.2Apr.2007
AHardwareImplementationofSDCardController
ZUOYuan,LIUXin2ning,SHIChao
(NationalASICSystemEngineeringResearchCenter,Nanjing210096,China)
Abstract:ThedesignofaSDcardcontrollerismadethroughtheanalysisofSDcardphysicallayerspecifi2cation.ThecontrollercanmakethebasiccontrolofSDcard,suchasinitialization,read/writeanderaseoperation.ThecontrollerisappliedinamultimediaSoCchipbasedonAMBAbus.Thedesignisrealizedinhardwaredescriptionlanguage(Verilog)andissimulatedandsynthesizedinVCSandDCofSYNOP2SYSCompany.ThedesignisverifiedinFPGA.Thepassageintroducesthedesignconsiderationandmod2ulepartition,andalsogivestheresultsofsynthesisandverification.Keywords:AMBA;SDBUS;SDController;FPGAEEACC:2240
一种SD卡控制器的硬件实现左 源,刘新宁,师 超(东南大学国家专用集成电路系统工程技术研究中心,南京210096)
摘 要:通过分析SD卡物理层规范,设计了一种采用SD总线的SD卡控制器,该控制器可以实现对于SD卡的基本控制,
如:初始化SD卡、读写数据、擦除数据等操作.该控制器应用于一款采用AMBA总线的多媒体SoC芯片.该设计采用硬件描述语言(Verilog)实现,利用SYNOPSYS公司的EDA工具(VCS和DC)对该控制器进行仿真、综合,最后采用FPGA验证控制器功能正确性.本文阐述了该控制器的设计思路、模块划分以及每个模块的具体设计,最后给出仿真、综合以及FPGA验证的结果.
关键词:AMBA总线;SD总线;SD卡控制器;FPGA
中图分类号:TP333.5 文献标识码:A 文章编号:100529490(2007)0220643203 随着消费类电子产品音视频等多媒体功能的不断增强,系统对于存储介质的安全、容量、性能的需求不断提高.SD存储卡支持符合SDMI标准的版权保护机制,并且具有更快的传输速度和更大的存储容量,同时SD存储卡还向上兼容MMC卡[2].由于SD卡的这些优点,越来越多的电子产品提供SD卡扩展接口.本文设计的SD卡控制器基于一款面向多媒体应用的SoC芯片,该芯片采用AMBA总线架构.
本文通过对SD卡控制器工作原理的分析,确定控制器的总体结构并进行具体的模块划分,最后使用硬件描述语言将设计实现并通过FPGA验证.
1 SD卡控制器的工作原理
SD卡控制器通过SD总线对SD卡进行初始化
以及读写等操作.SD总线包括时钟线CLK,命令线CMD,数据线DAT32DAT0等[2].SD总线上的通信基于命令和数据的比特流,命令和数据的第一位是起始位,最后一位是停止位.控制器通过发出命令发起操作,命令通过命令线传给SD卡,SD卡发出响应作为对于命令的回应,响应也在命令线上传输.控制器接收并分析响应以确定SD卡的状态,并根据SD卡的状态进行下一步的操作.
为了检测传输错误,命令和响应都带有7位
收稿日期:2006206207作者简介:左 源(19822),男,研究生,研究方向为数字集成电路前端设计,zuoyuan_boy@sina.com.
644电 子 器 件
2.1 SD时钟控制模块
第30卷
CRC校验码.在发送命令时控制器需要计算命令的CRC校验码并附在命令之后一起发送,SD卡在接
收命令时重新计算命令的CRC码并比较计算的
CRC校验码和接收到的CRC校验码是否一致来确定传输的正确性,对于响应也采取类似的处理.如果命令或响应在传输过程中有错误发生,SD卡控制器会向处理器发出中断.
在写操作时,控制器发出单数据块写命令(CMD24)或者多数据块写命令(CMD25),在收到SD卡的正确响应后,控制器开始根据SD总线协议
由于APB总线频率一般在70MHz以上,而普通SD卡的正常工作的最大频率为25MHz,因此SD卡时钟需要对APB时钟进行分频.SD卡在初始化模式下时钟频率不能超过400kHz,在正常工作模式下时钟频率不能超过25MHz,驱动软件配置分频控制寄存器使分频电路产生这两个频率范围的时钟.为了降低SD卡控制器的动态功耗,在控制器不工作时应关闭SD时钟,时钟的开关也由驱动软件控制.2.2 命令收发控制器
命令收发控制器控制发送命令和接收响应的时序并完成串并转换.在发送命令时,将命令由并行转换为串行并以SD时钟同步发出;在接收响应时,将串行的响应由串行转换为并行并存储.命令收发控制器的状态跳转如图2所示.
发出写数据.在读操作时,控制器发出单数据块读命令(CMD17)或者多数据块读命令(CMD18),控制器开始等待读数据的起始位,然后根据SD总线协议接收SD卡发出的读数据.控制器要支持1位/4位两种数据宽度,硬件电路按照SD总线协议将有效数据组织成1位/4位宽度并同步收发.同样为了检测数据线上的传输错误,数据的收发也需要CRC校验,所不同的是,命令和响应采用7位CRC校验而数据采用16位CRC校验,这是由于数据比特流要比命令和响应比特流长得多.
控制器通过时钟线为SD卡提供时钟,命令和数据的传输都要与这个时钟同步.同时这个时钟的频率必须可以配置,因为SD卡在初始化状态和正常工作状态需要不同频率的时钟,而且不同SD卡正常工作的最大频率也不一样.
综上所述,SD卡控制器需要为SD卡提供频率可配置的时钟,控制器还要负责发出命令接收响应以及发送/接收数据,为保证传输的正确性控制器还要对命令、响应、数据进行CRC校验.
图2 命令收发状态机
2 模块划分及实现
根据以上对于SD卡控制器工作原理和总体设计的分析,将SD控制器分成图1所示的7个子模块:SD时钟控制模块(CLKCONT)、命令收发控制器(CMDCONTROLLER)、数据收发控制器(DATACONTROLLER)、中断控制器(INTC)、读数据缓冲器(READFIFO)、写数据缓冲器(WRITEFIFO)和AMBA总线接口模块(APBINTERFACE).
所有的命令和响应都采用CRC7校验,计算方法如下[3]:
生成多项式:G(x)=x7+x3+1
M多项式:M(x)=(firstbit)3xn+
(secondbit)3xn-1+...+(lastbit)3x0
CRC7校验码:CRC[6...0]=
Remainder[(M(x)3x7)/G(x)]
其中多项式除法可用除法电路来实现,除法电路由一组移位寄存器和模2加法器或异或单元组成.硬件电路的实现如图3所示,它由7级移位寄存器和两个加法器组成,各移位寄存器初始化为“0”.命令随着时钟同步串行的移入,当命令全部移入后,从寄存器输出CRC7校验码.
图3 CRC7的硬件实现电路
2.3 数据收发控制器
图1 SD控制器模块划分
读操作时,数据控制器将接收的串行数据转换
第2期左 源,刘新宁等:一种SD卡控制器的硬件实现645
为并行数据并存入读缓冲区;写操作时,数据控制器从写缓冲区中取出并行数据后串行发出.数据读写
也需要经过CRC校验,数据采用CRC16校验,CRC16和CRC7的算法本质相同,只是增加了CRC校验的位数从而提高了CRC校验的精度.对SD卡进行写操作时,数据收发控制器还要检测SD卡发回的CRC状态来判断写操作是否成功,若操作失败则需要重传.数据收发控制器的状态跳转如图4所示:
传输完成、响应超时、读写数据CRC出错等.软件可以通过配置中断控制器屏蔽或使能每个中断.2.6 AMBA总线接口模块
ARM内核通过APB总线读写SD卡控制器的寄存器和数据缓冲区,而该模块作为APB总线与SD卡控制器的接口,它将控制器内部的寄存器和数据缓冲区映射到统一的地址空间,使内核可以通过地址访问[1].APB总线上的基本读写操作如图5、图6所示[4]:
图5 写操作时序图
图4 数据收发状态机
2.4 读/写数据缓冲器
由于APB总线上连接多个功能模块,如I2C、
SPI等都需要占用总线进行数据传输,SD卡控制器只能通过发出总线请求在有限时间占有总线.这使得在进行SD卡读写操作时可能由于申请不到总线来不及存储已收到的数据或者来不及获取新的发送数据,增加读/写数据缓冲器实现数据暂存可以很好的解决这个问题.缓冲器的大小需要根据SD总线与APB总线的频率对比以及APB总线的繁忙程度来选择,在本设计中读/写数据缓冲器都采用8级16位宽的FIFO.2.5 中断控制器
图6 读操作时序图
3 仿真结果及FPGA验证
SD卡控制器采用RTL级的VerilogHDL实
现,并在系统中加入生产SD卡的公司提供的仿真
模型,使用SYNOPSYS公司的EDA工具VCS对控制器的功能进行仿真和验证.对SD卡进行初始化的仿真波形图如图7所示,对SD卡进行写操作的仿真波形图如图8所示.从仿真结果可以看出,SD卡控制器符合SD总线的标准,可以对SD卡进行初始化、读写等操作.
当SD卡控制器完成了某项操作或者工作异常
的时候,中断控制器会产生相应的中断,软件可对不同的中断做出相应的处理.中断包括读/写缓冲区已满/空、读/写缓冲区读写出错、命令发送完毕、数据
图7 初始化SD卡的波形图
图8 对SD卡进行写操作的波形图
(下转第650页)
650电 子 器 件第30卷
对于FPGA动态部分重构而言,其配置比特流相对于完全重构要小很多,因此FLASH中可以存
储更多的配置文件.FPGA动态部分重构时须将整个配置文件下载到器件中,CPU再根据需要选择适合的部分配置比特流进行重构.在部分重构时由于未重构部分仍然继续工作,因此PROGRAM信号不能拉低,但是CS和WRITE信号需要置低,除此以外,流程和图5所示的流程图类似.
FPGA动态部分重构不仅能够在运行不间断的情况下更新可重构模块区域内的逻辑功能,而且也能使重构的配置时间大大减少.设FPGA重构时间为t,配置时钟频率为f,配置数据的字节数为n,那么重构时间t的计算公式为
t=
nf
4 结论
目前国际上对于可重构技术的研究广为开展,本论文介绍了一种基于FPGA的动态部分可重构系统.采用Virtex系列FPGA为研究对象,可以将不同设计定位到芯片内同一逻辑资源部分,重构此部分逻辑资源,同时保持其他部分电路功能正常,从而灵活快速的改变系统设计.
本系统可以应用在航天、通信、电力等多种领域,构成动态可重构数字处理系统、动态可重构容错系统、动态可重构自适应进化系统(EHW)等.参考文献:
[1] 覃祥菊,朱明程,张太镒等.FPGA动态可重构技术原理及实现
方法分析[J].电子器件,2004,27(2):2772282.
[2] 朱明程.FPGA动态可重构技术及其应用[J].电子产品世界,
2000,6:13214.
[3] Atmel,Inc,FPSLICon2chipPartialReconfigurationoftheEm2
beddedAT40KFPGA[EB/OL]http://www.atmel.com.[4] Xilinx,Inc.Virtex2E1.8VFieldProgrammableGateArrays
[EB/OL],http://www.xilinx.com.
[5] Xilinx,Inc.XAPP138“VirtexFPGASeriesConfigurationand
(2005),http://www.xilinx.com.Readback[EB/OL]”
[6] Xilinx,Inc.XAPP151“VirtexSeriesConfigurationArchitec2
(2004),http://www.xilinx.com.tureUserGuide[EB/OL]”
[7] Xilinx,Inc.XAPP290“TwoFlowsforPartialReconfiguration:
ModuleBasedorDifference”http://www.xilinx.com.[8] Xilinx,Inc.DevelopmentSystemReferenceGuide[EB/OL],
http://www.xilinx.com.
Virtex2EXCV600EFPGA全部配置比特数为
3961632bit(495204byte),当系统运行在MPC8240
计算机平台时,系统提供的配置时钟频率为33MHz,FPGA一次全部配置时间约为15ms.对可重构模块来说,reconfig_a逻辑功能改变为reconfig_b逻辑功能的部分配置比特流数据大小为93324byte,重构时间约为2.8ms.可见FPGA部分重构比完全重构所需的重构时间要少很多,而且采用基于差别的设计方法实现动态部分重构,可以重构单个配置帧的配置数据,因此部分重构的时间更加快速.
(上接第645页)
在FPGA验证中,采用了ALTERA公司的A2PEXEP20K100芯片.将DMA控制器、AMBA总线、SD卡控制器等模块的RTL级Verilog代码进行综合并烧录入ARM开发板的FPGA中,并且外接一块带有SD卡插槽的扩展板与ARM开发板连接.使用ARM的软件调试工具ARMulator对SD卡控制器的功能进行测试.测试结果表明该控制器可以成功完成对市面上主流SD卡的初始化、读写等操作.
综合后的面积为4万门左右,并且在最坏情况下的最
大工作频率为200MHz,满足整个SoC系统的要求.参考文献:
[1] SteveFurber.ARMSystem2on2ChipArchitecture[M].2nd
edition.PearsonEducationLimited,2000.
[2] SDMemoryCardSpecificationsPart1:PhysicalLayerSpecifi2
cationVersion1.01[S].SDGroup,2002.
[3] RamabadranTenkasiV.andGaitondeSunilS.IowaStateU2
niversity.ATutorialonCRCComputation[C]//IEEEMI2CRO,Aug.1988;8(4):62274.
[4] AMBA总线规范,AMBATMSpecification(Rev2.0)[S].
ARMLimited,1999.3217.
[5] WilliamStallings.计算机组织与结构—性能设计[M].第5
4 结论
根据以上的VCS仿真和FPGA验证结果,可
以说明该SD卡控制器的功能已达到要求.利用SYNOPSYS公司的EDA工具DesignCompiler对该
版.张昆藏,等译.北京:电子工业出版社,2001.1352149.
[6] SanDiskCorporation.SanDiskMultiMediaCardProductMan2
ual[S].Version2.0,2004205.
模块进行综合并进行面积和时序的优化,整个控制器
因篇幅问题不能全部显示,请点此查看更多更全内容