SD-Host控制器设计架构
SD Host功能列表

- SD Host挂接在SoC中,与外部的SD card进行交互
- 有控制寄存器和状态寄存器,SoC往往有CPU,通过CPU进行配置寄存器,有些SoC没有CPU,需要使用I2C或者SPI可以进行写寄存器
- 内建DMA-数据需要从外部将数据读取到buffer中,然后再对于SD卡进行写操作;对于读操作,首先先将SD卡读取到控制器中buffer中,再从buffer中将数据存储到SoC中的存储单元中,数据搬移需要使用DMA
- DMA也是挂接在AHB总线上的
- 数据缓存的FiFo和内嵌DMA模块
- SD卡的时钟频率比较低,所以需要分频电路
- 读操作,硬件停时钟功能,当读数据的时候,fifo读满之后,不能继续读取sd card中的内容,在等待DMA搬移数据的过程中,可以停止时钟,DMA搬移完fifo中的数据后,可以打开时钟
架构
- 先将外部需要的接口画出来:AHB总线和SD总线
- SD Host是基于AHB总线的,并且有一些控制和状态寄存器,所以需要设置ahb_slave_if模块,处理AHB信号
- ahb_slave_if中有控制寄存器,进行任务驱动,产生任务信息给到sd_ctrl模块
- 设置一个sd_ctrl模块发起对于sd总线的请求
- sd_ctrl与sd总线的交互除了有命令总线还有数据总线,都是双向的
- ahb时钟比较快,sd时钟比较慢,所以需要有 一个时钟分频模块

- 根据配置信息,产生命令,启动SD ctrl进行一些命令的发送
- 需要有一个缓存存储数据(FiFo),对于读数据,sd_ctrl控制数据总线,读取数据从sd总线上读取出来存储到fifo中,fifo中的数据满了之后,通过DMA将数据存储到SoC中的存储单元中
- DMA-搬运数据的时候是一个master,控制总线,发送数据
- ahb_slave_if模块是slave


sd_ctrl模块


- 对于sd card进行读写,当上电之后,sd card处于idle状态,需要通过命令发送跳转到data transfer state,才可以进行数据的读写,如果想要让sd card处于data transfer状态,需要配置很多命令才可以
- sd协议的状态机比较复杂,有两种设计思路
1.通过硬件实现所有的状态机,包括卡识别模式和数据传输模式
每一步操作都需要很多的指令,首先需要在ahb_slave_if模块中通过软件配置所有的操作,需要定义整个过程的操作以及每个操作所需的指令是什么;比如:在standby模式下有时候需要设置CMD4,有时候需要配置CMD9,在standby的时候,是否需要配置这写命令需要软件配置,硬件实现全部的功能
优点:集中式的配置,事先将所有的操作都配置好,发起启动信号之后,由硬件进行执行,和CPU交互频率较低,CPU负担较轻
缺点:硬件实现非常复杂,后期更改软件灵活性差
2.将硬件的执行力度降低,硬件操作的时候有两种:一种进行数据传输或者只进行命令传输,可以以一条指令的数据传输为粒度进行设计状态机,硬件只实现一条CMD的发送和response的接收,只实现一条CMD对应的data的发送和接收
整个流程的控制权全部交给CPU,也就是软件,硬件只实现最小粒度的命令发送和接收,以及数据发送和接收
优点:硬件实现代价小,软件的灵活性非常大
缺点:CPU需要和SD Host进行大量的交互,CPU负担较重

- cmd发送和response返回都是类似的
CPU与SD Host通过中断进行交互,SD Host也会发送中断给到中断控制器,CPU收到中断之后,需要进入中断处理程序处理中断 - CPU与IP通过中断通信,SD Host发送中断出来,给到中断控制器,每一条指令,中断控制器将中断上报给CPU,CPU进行响应中断,决策下一步做什么
- IDLE的时候,CPU发送ACMD41,CPU会等待中断,card接收到ACMD41之后,会返回一个response给到host,host接收到reponse之后,会返回中断给到CPU,CPU收到中断之后,CPU会查询SD Host中的寄存器,如果读取的寄存器的值是busy的,CPU会再次发送ACMD41

CMD发送
- CMD发送的时序是类似的,可以设置一个状态机,实现CMD的发送和response接收
- 接收来自ahb_salve_if的配置
- 再设置一个状态机,实现data的发送和接收


SD Host控制功能列表

SD Host控制器软硬件模块划分


- 对于复杂的流程交给软件控制,硬件只进行一条命令及数据处理
- AHB有两个接口,一个master接口,DMA主动发起请求;写操作,DMA从外部搬移数据发送出去,读操作,从FIFO中读取数据,将数据发送给AHB总线;一个从接口(AHB_slave_if)
- 软件主要配置寄存器,然后等待中断
- 硬件工程师写好程序,根据不同的操作执行不同的函数,配置不同的寄存器进行不同的操作
- 硬件给出不同操作的状态位(更新状态寄存器中的值)或者产生中断信号
SD Host控制器模块功能描述

- 通过异步fifo实现不同时钟域之间数据的传递
- 分频参数通过ahb_slave_if中进行配置
SD Host模块功能简述

- 卡识别模式和data transfer模式下时钟频率是不同的
SD Host架构设计文档





SD-Host控制器设计架构的更多相关文章
- Kubernetes系列02—Kubernetes设计架构和设计理念
本文收录在容器技术学习系列文章总目录 1.Kubernetes设计架构 Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分 ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- 13 JSP、MVC开发模式、EL表达式和JSPL标签+软件设计架构---学习笔记
1.JSP (1)JSP概念:Java Server Pages 即java服务器端页面可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码用于简化书写!!! (2)原理 ...
- (转)Kubernetes设计架构
转:https://www.kubernetes.org.cn/kubernetes设计架构 Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, ...
- Android App的设计架构:MVC,MVP,MVVM与架构AAAAA
1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...
- MVC:开发模式&&三层架构:软件设计架构
MVC:开发模式 jsp演变历史 早期只有servlet,只能使用response输出标签数据,非常麻烦 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码 ...
- Goodle Clean设计架构
Goodle Clean设计架构 23 * @param <P> the response type 24 */ 25 public abstract class UseCase<Q ...
- 基于FPGA的XPT2046触摸控制器设计
基于FPGA的XPT2046触摸控制器设计 小梅哥编写,未经许可,文章内容和所涉及代码不得用于其他商业销售的板卡 本实例所涉及代码均可通过向 xiaomeige_fpga@foxmail.com 发 ...
- 基于FPGA的SPI FLASH控制器设计
1.SPI FLASH的基本特征 本文实现用FPGA来设计SPI FLASH,FLASH型号为W25Q128BV.支持3种通信方式,SPI.Dual SPI和Quad SPI.FLASH的存储单元无法 ...
- 2014.04.28基于CPLD的LCOS场序彩色视频控制器设计
基于CPLD的LCOS场序彩色视频控制器设计 作者:宋丹娜,代永平,刘艳艳,商广辉 发表刊物:液晶与显示,2009 学习时间:2014.04.28 文章讲述了-- (和上一篇论文有些相似之处) 1. ...
随机推荐
- MinIO客户端之rm
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc rm 删除指定的对象. 准备待删除的对象,查看对象,命令如下: ./mc ls local1/bkt2/ 控 ...
- libGDX游戏开发之游戏纹理精灵切割(十六)
libGDX游戏开发之游戏纹理精灵切割(十六) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和 ...
- 简单介绍JDK、JRE、JVM三者区别
简单介绍JDK vs JRE vs JVM三者区别 文编|JavaBuild 哈喽,大家好呀!我是JavaBuild,以后可以喊我鸟哥,嘿嘿!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加油学习, ...
- Spring源码学习笔记5——注册BeanPostProcessor,初始化事件多播器,注册事件监听器
一丶前言 上篇Spring容器回调完所有的BeanFactoryPostPocessor,之后可以做到替换所有占位符,解析所有配置类等工作,这篇还会迎来一个Spring留给我们扩展的一个接口,涉及到A ...
- 浅析AIGC for MMKG
摘要:AIGC和多模态知识图谱(MMKG)中的知识获取又是怎么实现的呢?他们之间有什么关联呢? 本文分享自华为云社区<GPT-4发布,AIGC时代的多模态还能走多远?系列之四 AIGC for ...
- Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发?
摘要:为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云. 本文分享自华为云社区<[华为 ...
- 重磅!KubeEdge单集群突破10万边缘节点|云原生边缘计算峰会前瞻
摘要:<KubeEdge单集群突破10万边缘节点 | 技术报告>将会在6月25日即将开展的云原生边缘计算峰会(KubeEdge Summit 2022)中进行应用解析.我们先来一睹为快吧! ...
- GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
摘要:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战.华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性 ...
- 讲透学烂二叉树(三):二叉树的遍历图解算法步骤及JS代码
二叉树的遍历是指不重复地访问二叉树中所有结点,主要指非空二叉树,对于空二叉树则结束返回. 二叉树的遍历分为 深度优先遍历 先序遍历:根节点->左子树->右子树(根左右),有的叫:前序遍历 ...
- 十大 CI/CD 安全风险(一)
CI/CD 环境.流程和系统是现代软件组织的核心.他们将代码从开发工程师的工作站传递到生产环境.结合 DevOps 和微服务架构的兴起,CI/CD 系统和流程重塑了工程生态系统: 技术堆栈更加多样化, ...