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

时间:2022-07-08 04:15:25

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

摘要:本文通过分析嵌入式系统的启动过程,设计实现了基于SD/MMC存储卡的直接启动方案。该方案基于AMBA总线,采用硬件描述语言(Verilog HDL)实MSD/MMC启动控制器,利用EDA工具VCS进行仿真,Synplify进行综合,采用Altera公司的FPGA进行验证。全文从系统架构设计出发,详细介绍了启动过程的硬件设计和软件流程,最后给出仿真、综合和FPGA验证结果。

关键词:SD;MMC BootLoader;AMBA;SoC

引言

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存储介质的操作。

直接启动方案由软、硬件两部分组成,对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信号作为芯片调试信号。

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

硬件启动控制器的状态转换如图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;在REEADY状态发送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。

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

启动方案的软件流程

方案的软件启动流程如图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进行了模拟测试,二是在PPGA上进行物理验证测试。

软件模拟

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

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

物理验证

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

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

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

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

结语

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

上一篇:降低嵌入式医疗电子应用中的功耗 下一篇:将网吧里的诗意阅读进行到底