分享

一种SD/MMC存储器启动方案在SoC中的设计与实现

 amine 2010-06-05
一种SD/MMC存储器启动方案在SoC中的设计与实现
作者:葛伟 刘新宁    来源:电子设计应用2009年第2期 
 
      


引言

SD/MMC存储器以其成本低廉、存储容量大、性能优良、安全性高等特点越来越广泛地应用于便携式设备和家用电子设备。目前很多移动嵌入式产品采用了外置Nor Flash作为Boot Flash外加SD存储器作为扩展存储容量的系统方案,或者利用芯片的管理与非器件和MMC存储器进行启动的方法,这些传统的启动方案都会使用到两种或以上的存储介质,大大增加了芯片互联的不稳定性,增大了系统面积和成本。本文全面考虑嵌入式芯片启动过程中涉及到的软、硬件问题,基于AMBA总线架构,通过硬件语言设计、软件仿真,以及FPGA验证,设计实现了一种基于SD/MMC存储器的直接启动方案,使得设计者可以使用SD/MMC作为单一的、非易失性的存储介质,使系统的成本更低、性能更优、扩展性更强。


系统架构及软、硬件设计

SoC的启动设计是一个系统且复杂的过程,需要根据总线技术综合考虑构建整个系统架构。本文中SD/MMC存储器的直接启动方案基于AMBA总线架构,除了设计SD/MMC启动控制器,还需要协调内核、ESRAM(片上存储器)、EMI(外部存储器接口)、PMU(功耗管理单元)、DMA(直接存储器存取)等完成整个启动过程。如图1所示,内核、ESRAM、EMI连接在高速AHB总线上,DMA模块实现数据在外设和存储器之间的直接传输,PMU和INTC(中断控制器)连接在APB总线上,SD/MMC控制器实现对SD/MMC存储介质的操作。

图1    SD/MMC直接启动系统架构框图

直接启动方案由软、硬件两部分组成,对SD/MMC存储介质完成初始化之后由DMA控制器将启动代码载入到芯片内置存储空间ESRAM,并且将ESRAM映射到零地址,内核开始执行指令;软件代码实现系统的启动配置,完成硬件初始化,设置中断向量表,配置系统时钟、中断控制器、内存控制器、DMA控制器等,并且完成堆栈设置以及地址重映射等功能。


系统架构的设计

为了成功实现从SD/MMC存储器的启动,在整个硬件系统中考虑以下几个方面的实现:

1. 对于不同的启动模式,在上电复位以后,需要对AMBA总线的地址译码电路进行不同的设计,实现不同的零地址映射。

2. 在功耗管理模块中应保证系统启动时与启动相关的功能模块如ESRAM、DMA、SD/MMC控制器的时钟是默认打开的。

3. SD/MMC存储器在上电之后需要进行初始化配置,因而在上电之后,默认由DMA控制总线,直到完成数据载入的传输之后释放总线,CPU核从零地址开始执行程序。

4. 由于启动过程中涉及到通过DMA实现代码的搬运,因而DMA的初始参数配置和时序配置应满足完成代码传输的需要。

5. 由于SD/MMC启动对于程序员的设计而言是一个黑盒子,因而在保证启动控制器设计稳定性的同时,应该考虑设计中友善的接口,在启动失败时应有指示信号以便于程序员调试。


启动方案的硬件设计

SD/MMC控制器的顶层设计如图2所示,为了实现上电启动以后,SD/MMC控制器模块对SD/MMC存储器的初始化以及数据载入,在已有的代码基础上加入SD/MMC启动控制器,新建SD/MMC_顶层设计实现两个模块的连接。作为整个芯片设计的启动方案之一,模块设计中采用Boot_en信号作为使能信号,并在启动失败时输出Boot_error信号作为芯片调试信号。

图2    SD/MMC控制器的顶层设计

硬件设计的启动控制器对存储卡进行初始化,并且通过初始化过程中存储卡对初始化命令的不同响应,判断存储卡的种类,完成单线多块(4K)数据的传输。

图3     硬件启动控制器的状态转换图

硬件启动控制器的状态转换如图3所示,在系统上电复位和时钟稳定之后,硬件启动控制器进入BOOT_IDLE状态对Boot_en信号采样,当信号有效则进入START状态,否则进入IDLE状态;在START状态首先检查是否有SD/MMC卡连接在卡槽上,之后完成模块输入时钟配置、清除状态寄存器、更新输出时钟等操作,此时应注意将初始化过程中的输出时钟频率设定在低于400kHz;在完成以上设置之后发送CMD0命令,应考虑到在上电后存储卡需要初始化延时(74个输出时钟周期,最大时间不超过1ms),因而在CMD0发送之前等待80个时钟时钟周期;由于CMD0没有返回值,因而在命令发送完成后需要等待至少8个输出时钟周期,进入CRESET_SDAPPCMD状态,发送CMD55命令,如果接收到响应,则表示SD卡连接在卡槽上,进入CRESET_SDOPCOND状态,继续完成ACMD41命令的发送,倘若命令发送超时,说明卡槽中连接的是MMC卡,进入CRESET_MMC状态发送CMD1命令;对ACMD41或者CMD1在命令线上返回的OCR寄存器值,如果包含Busy位(置0),表示显示卡仍然在上电启动或者重启过程,还没有为后面的初始化准备好通信,需要重新发送命令,直到Busy位被清除(置1),进入READY状态。

对于单张卡,上电启动过程的最大周期不可以超过1s,所以当命令返回错误的时间或者Busy未被清除的时间超过1s时,则判定启动过程失败,进入IDLE状态并且显示Boot_error;在READY状态发送CMD2命令,获取存储卡的CID信息,之后进入IDENT状态,针对已经判定的存储卡类型,对SD存储卡发送CMD3命令获取RCA,对MMC存储卡则通过CMD3命令指定RCA;当完成CMD3的发送后,状态机进入STANDBY状态,此时可以更新输出时钟,使存储卡工作于更高的工作频率,并发送CMD7命令将存储卡的状态由等待(stand_by)转换到传输(transfer);在TRANS状态,设置SD/MMC控制器的发送FIFO和接收FIFO阈值、发送数据的大小,并发送CMD17及CMD12用于传输4K数据,如果数据传输过程中出现数据CRC校验错误或读数据超时,将会显示Boot_error。


表1    SD/MMC启动控制器的发送命令

整个启动过程中涉及到的SD/MMC命令如表1所示。

图4     软件启动流程


启动方案的软件流程

方案的软件启动流程如图4所示,在SD/MMC控制器完成数据的载入之后,CPU核获得AMBA总线的控制权,开始执行启动程序。首先在零地址读取中断向量异常表,显示切换到SVC模式,这时应该禁止所有中断,包括中断控制器的IRQ和FIQ中断,以及屏蔽CPU核中的中断使能位。由于启动数据载入之后,SD/MMC控制器和DMA控制器会指示出相应中断状态,此时应先清除中断状态,再配置PMU和EMI控制器,使系统切换到正常工作状态。此时可以从SD/MMC存储器将体积更大的可执行镜像文件载入到速度和容量更大的DDRAM中,配置重映射寄存器之后,在新的存储介质DDRAM中运行可执行文件。


仿真结果及FPGA验证

用RTL级的Verilog HDL实现硬件代码,并完成启动软件的设计后,采用两种方式对设计进行了功能和时序的验证。一是使用Synopsys公司的EDA工具VCS进行了模拟测试,二是在FPGA上进行物理验证测试。

图5    硬件初始化及数据载入仿真波形图


软件模拟

进行模拟时,采用系统级仿真,通过加载可执行的二进制代码,仿真整个系统启动过程的实际环境。由于受仿真模型的限制,在测试过程中需要将可执行的代码写入SD/MMC Model,然后重新启动系统。在重置RESET信号的同时,更改系统启动模式,如图5所示, 在15000000ns时刻,系统重置,SD/MMC启动控制器在完成对卡的初始化之后,在18000000ns时,DMA开始数据载入。

图6    软件启动仿真波形图

图6所示,在30400000ns,数据传输完成,AMBA的控制权由DMA(图6中hgrant_m8)转交给CPU内核(图6中hgrant_m1),在完成系统的初始化配置之后,再次从SD/MMC存储器中读出可执行的工程镜像或内核操作代码。由仿真波形可见,模拟结果正确,满足设计要求。


物理验证

受实验条件所限,在FPGA验证过程中采用Altera公司Nios II嵌入式处理器,通过Avalon-AHB模块将处理器接口的Avalon总线信号转换到AHB总线,尽可能保证物理实验与仿真环境的一致性。去掉功耗控制器而简单的采用PLL倍频提供系统时钟,另外由于EMI控制模块涉及到FPGA中不可实现的专用时钟电路,因而实验中省略了外部存储器模块和地址重映射过程,主要侧重于数据传输和Boot Loader的验证。

图7     FPGA验证平台构架框图

FPGA验证平台采用Altera Stratix II FPGA和外接SD/MMC卡槽,存储卡采用Kingston公司的SD卡和Kingmax公司的MMC卡,如图7所示。采用Synplify Pro综合,Quartus II 作为下载工具。
表2      Quartus综合报告

表2所示,原始控制器中增加SD/MMC启动控制器所占用的资源不超过20%,即可获得一种高效的启动方式。

FPGA调试中采用8MHz系统时钟,在9ms内完成载入4KB启动代码,通过向监视寄存器中写入标志位,判定系统启动负载过程运行正常,通过对比载入前后的启动代码,可以判定整个硬件启动代码载入正确。通过FPGA板级硬件调试证明,设计启动方案功能正确,验证结果满足设计需求。


结语

通过软件仿真和FPGA验证,基于SD/MMC单一存储器的启动方案能够正确的实现代码载入和程序启动,启动速度和效率都能满足工程需求,在SoC中实现了低成本、高效率的直接启动。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多