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

2023-11-13

原文地址: http://blog.csdn.net/allen6268198/article/details/7745208
引言

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中实现了低成本、高效率的直接启动。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SD/MMC存储器启动方案在SoC中的设计与实现 的相关文章

  • scl sda 是什么接口_SOC设计控制接口IIC

    IIC全称为Inter Integrated Circuit 集成电路总线 IIC接口只有两根线 SCL SDA SCL为同步时钟线 SDA为数据线 通SPI不同的是 数据线为双向接口 也就是说 发送接收都走这根线 IIC是一种多向控制总线
  • ARM SoC漫谈

    作者 xff1a 重走此间路 链接 xff1a https zhuanlan zhihu com p 24878742 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 芯片厂商向客户介
  • 一文看懂IC芯片生产流程:从设计到制造与封装

    origin http forum esm cn com FORUM POST 1000163993 1201257744 0 HTM ga 1 101949507 338942905 1436813394 芯片制造的过程就如同用乐高盖房子
  • vivado 中手动添加 pynq类型板

    随着人工智能的火热 算法的并行计算越来越受到追捧 而pynq python zynq 作为可以用python为高级语言变相调用fpga的模块的soc板也越来越受到人工智能和硬件相关学生的喜爱 而然 Vivado 2019之前的很多版本是默认
  • 【整理】嵌入式SoC中各种片内资源

    原文地址 http www crifan com summary embedded soc chip internal resource or functions 整理 嵌入式SoC中各种片内资源 2013 年 12 月 18 日 上午 1
  • RISC-V学习笔记【系统设计】

    蜂鸟E200系列处理器简介 特色 开源 免费 高能效比 针对IoT领域设计 支持RV32I E A M C F D等指令子集和机器模式 2级流水线 功耗和性能均优于主流商用的ARM Cortex M处理器 提供完整的配套SoC 包括中断控制
  • LEAKAGE IN NANOMETER CMOS TECHNOLOGIES

    纳米CMOS管技术中的漏电流 https link springer com book 10 1007 0 387 28133 9
  • GlitchFree的时钟切换技术(glitchless clock mux GLCM)

    0 下文给出了两种glitchFree的电路 第一种电路图包含了DFT的相关控制 且是3级上升沿的寄存器打拍 知乎NingHeChuan给出的是两级寄存器分别使用下沿和上沿触发的寄存器打拍 需要分析两种做法的优劣 1 项目中实际使用的 参考
  • 芯片设计中的时钟与约束

    1 同步电路与异步电路 首先来谈谈同步电路与异步电路 那么首先就要知道什么是同步电路 什么是异步电路 对于同步时序电路 不同的文章有不同的说法 大致有下面的定义方法 对于比较严格的定义 一个电路是同步电路 需要满足一下条件 每一个电路元件是
  • Level Shift的影响及使用及位置

    H2L 一般放在Low Voltage 因为H2L LevelShift的supply Voltage是VDDL 如果放在High Voltage就需要将VDDL的power rail route到VDDH domain 如果高低电压差别不
  • An ASIC Low Power Primer by J. bhaskar

    原文链接 https www academia edu 33242660 An ASIC Low Power Primer by J bhaskar Vlsi Design Power Electronics VLSI VLSI and C
  • How to Connect Power Switches

    原文链接 https vlsiconceptsforyou blogspot com 2020 05 how to connect power switches html Wednesday May 20 2020 How to Conne
  • GAN,IGBT, MOSFET

    作者 集微网 校对 团团 集微网 爱集微APP 各大主流应用商店均可下载 集微网消息 功率半导体是电子电力装置电能转换与电路控制的核心器件 根据Yole数据 中国已经成为全球最大的功率半导体消费市场 预计至2021年 全球功率器件市场规模将
  • SIEM的内容

    20200920 昨天看到了与SIEM相关的内容 但是除了一篇文章给我讲解了他们部分的SOC架构与方案 这个算是SIEM的升级版吧 其他的文章都没有给我非常好的反馈 这里来记录一下 文章列表 1 Security Correlation T
  • 【STM32F4】STM32F407+ESP8266连接机智云过程详解

    要求 通过手机上的机智云通用APP 点亮开发板载LED0 LED1 摘要 硬件组成 STM32F407ZGT6 esp8266 乐鑫 软件APP 机智云开发都者中心下载的通用APP Demo Xcom串口调试助手 Keil V5 调试过程详
  • Difference between RTL and Behavioral verilog

    原文链接 https electronics stackexchange com questions 63682 difference between rtl and behavioral verilog Answer 1 ehaviora
  • SD/MMC存储器启动方案在SoC中的设计与实现

    原文地址 http blog csdn net allen6268198 article details 7745208 引言 SD MMC存储器以其成本低廉 存储容量大 性能优良 安全性高等特点越来越广泛地应用于便携式设备和家用电子设备
  • 线路编码(NRZ,NRZI,8B/10B,Manchester等)

    0 前言 编码根据作用和场景不同分为信源编码 信道编码和线路编码 信源编码 降低信源符号之间的相关性和冗余度 通过编码提高每个符号的信息量 具体说 就是针对信源输出符号序列的统计特性来寻找某种方法 把信源输出符号序列变换为最短的码字序列 比
  • 二、RISC-V SoC内核注解——译码 代码讲解

    tinyriscv这个SoC工程的内核cpu部分 采用经典的三级流水线结构进行设计 即大家所熟知的 取值 gt 译码 gt 执行三级流水线 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 上一篇博文中注
  • Linux芯片级移植与底层驱动

    原文地址 http blog csdn net 21cnbao article details 8545088 1 SoC Linux底层驱动的组成和现状 为了让Linux在一个全新的ARM SoC上运行 需要提供大量的底层支撑 如定时器节

随机推荐

  • 一文让你知道关于App推送那些事

    推送相关介绍 在用户未打开App时 服务端向用户推送服务器最新的消息数据 称为推送 消息推送在移动开发中用到的场景非常多 比如典电商类app的商品促销活动 资讯类的app的新闻推送等等 在实际开发中 我们常常会根据产品设计的需要 进行推送功
  • RF4CE安全性:概述

    配对流程 RF4CE配对是一个相当简单的过程 带来一些安全隐患 可能是由于试图简化最终用户的配对过程 首先 我们有发现阶段 外围设备发送具有一些特定属性集的发现请求命令 并等待来自满足这些要求的设备的发现响应命令 配对本身从外围设备发出的配
  • 服务器基础知识

    服务器基础知识 服务器是网络环境中的高性能计算机 它侦听网络上的其他计算机 客户机 提交的服务请求 并提供相应的服务 为此服务器必须具有承担服务并且保障服务的能力 一 服务器的分类 1 塔式服务器 塔式服务器即常见的立式 卧式机箱结构的服务
  • 基于单片机ISP技术原理及在线编程器的实现

    编程接口一般 芯片不焊在电路中 如华邦的51单片机 40引脚 可能是串口下载 STC 焊在板上的USB转串口下载 下面的ATMEL的ISP是模拟SPI下载 用单片机的P1 5P1 6P1 7下载 以ATMEL公司的AT89S51 AT89S
  • 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)

    解决的问题 适配器模式把一个类的接口变换成客户端所期待的另一种接口 从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作 比如说我的hp笔记本 美国产品 人家美国的电压是110V的 而我们中国的电压是220V 要在中国能使用 必须找个
  • Csdn爬虫自动评论

    前言 因为发现自己的csdn博客被机器人自动评论 这些博客很多都是对别人进行评论 然后别人就有可能回访或者点赞关注等等 基本上总积分非常高 为了覆盖掉这些机器评论 本篇主要是实现java爬虫对自己的博客所有文章进行自动评论 一 准备分析工作
  • vscode插件一draw.io绘图工具

    vscode 插件推荐一draw io 日常工作中需要制作时序图 流程图等 这里推荐的是vscode的插件中draw io 先自行在官网下载vscode https code visualstudio com 安装后打开vscode 如图在
  • c++ map 析构函数_C++核心准则C.36:析构函数不应该失败

    C 36 A destructor may not fail析构函数不应该失败 Reason 原因 In general we do not know how to write error free code if a destructor
  • Crazyswarm framework

    Crazyswarm framework 1 Tools Crazyfile Chooser Simulation sim flag 2 软件架构 使用方法 参考论文 应用的论文 3使用教程 参考网页 配置文件 example 基础 轨迹生
  • k8s 部署dubbo

    docker pull chenchuxin dubbo admin docker tag chenchuxin dubbo admin hub redblue ai com dubbo admin cat lt lt END gt dub
  • sql 数据查询返回值问题

    1 create 返回值 若发生错误 返回false 成功则返回创建的数据 2 add 返回值 addAll 返回值 成功 id或true 失败 false 成功 如果主键是自动增长型 返回值为新增记录Id值 addAll为最大值 否则返回
  • Microsoft Store打不开的解决方案

    Microsoft Store无法打开的解决方案 一 方案一 1 按Win i键 点击 网络和internet 2 转到 代理 关闭 使用代理服务器 3 尝试打开 microsoft store 二 方案二 1 按Win R键 输入inet
  • PHP请求微信接口获取用户电话号

    前言情景剧 业务场景是为了在用户登录的时候判断其是否已经成功注册 没有成功注册的话就将获取到的openid和session key加密后作为token传给前端 然后让前台通过组件获得code之后连着token一起传给后端 后端拿着code再
  • 服务机器人串口配置

    服务机器人串口配置 1 确定串口号 2 查看串口号对应的kernels 3 修改rules 1 确定串口号 如下图 以雷达为了例子 插拔之后 可知串口号为 ttyUSB1 2 查看串口号对应的kernels 3 修改rules 更改KERN
  • 搭建Zerotier内网穿透网络及彻底删除zerotier方法

    搭建Zerotier内网穿透网络 1 注册zerotier账号并登录https my zerotier com 2 访问https my zerotier com network 点击Create a Network 之后再Your Net
  • Java 【基础】 模拟log4j,输出当前语句的行数,和类路径

    一直很好奇log4j 是如何获取到当前输出的行数的 今天学到了 原来是堆栈跟踪 把代码贴出来给大家看一下 模拟log4j public static void debug String string System out println 调
  • declare-styleable的使用

    declare styleable是给自定义控件添加自定义属性用的 可以定义多种类型 int Boolean string等等 参考链接
  • 正则表达式去除冗长代码,tppabs

    利用正则表达式去除网页中的冗长没用代码 1 btppabs h 2 tpa http 3 清除css内的 tpa http s gif png jpg 4 tpa
  • org.springframework.http.converter.HttpMessageNotWritableException

    这里说无法将 对应对象转换 原因在于没有导入json 依赖 所以无法转换 org springframework http converter HttpMessageNotWritableException No converter fou
  • SD/MMC存储器启动方案在SoC中的设计与实现

    原文地址 http blog csdn net allen6268198 article details 7745208 引言 SD MMC存储器以其成本低廉 存储容量大 性能优良 安全性高等特点越来越广泛地应用于便携式设备和家用电子设备