代码编织梦想

一. 简介

由于项目需要使用到eMMC存储器,所以特地的去学习了一下。在网上也找了许多资料,但大多是介绍性的,以及对文档的翻译,没能很好的讲解如何从零编写Verilog代码来控制eMMC。看了很多文章,但大多大同小异,还是无从下手。

故在这里分享我的学习例程,教大家如何编写eMMC驱动,以使用为主,至于一些理论和不相关就不作介绍了,同时可以作为参考,避免踩坑,同时欢迎大家与我交流,共同进步。

本例基于JESD84-B50手册进行学习,也就是eMMC5.0,目前最新的好像是eMMC5.1,但差距应该不大。该版本支持高速,HS200和HS400。

最终实现 驱动 支持 高速,HS200和HS400三种模式

需要手册可以关注 FPGA之旅 回复 JESD84-B50手册 获取

下面就是进入正题吧!

二. eMMC主要功能介绍

(1) eMMC接口

ps: 图例都来原图文档

通过下图可以看到,FPGA和eMMC通信只需要四种信号即可。可以看到接口是如此的简单。

Clock (1bit):时钟,FPGA输入给eMMC的时钟

CMD (1bit ) :inout类型,用于FPGA向eMMC发送命令,以及eMMC向FPGA返回响应

Data (1bit 4bit 8bit) : inout类型,用于向eMMC写入数据和读出数据,可以配置为1/4/8bit三种

Data Strobe (1bit) :eMMC输入给FPGA的时钟,只有在HS400模式中有效(读数据的时候以及写数据后的响应)

请添加图片描述

(2) 命令发送过程

eMMC中,命令的长度固定为48bit,格式如下,其中Content根据不同的命令写入不同的数值,CRC校验数据包括 Start bit ,Transmitter bit 以及 Content,CRC多项式后面稍后再说。

请添加图片描述

每发送一个命令(广播类型的命令除外),eMMC都会返回一个响应,响应有两种不同的数据长度,分别为48bit和136bit。具体表示什么意思,暂不纠结。

请添加图片描述

(3) 数据传输过程

以8 bit的模式说明,也是用到最多的一种,毕竟快嘛。数据传输过程包括两种模式SDR和DDR,时钟单边沿出数据,和双边沿出数据。

SDR模式如下,传输格式 为 :起始位 + 数据 + CRC校验(CRC16) + 停止位。其中block length可以自己配置,默认为512。这里的CRC只包括数据,不包括起始位了。

请添加图片描述

DDR 模式如下,可以看到,在时钟的上下边沿,都有数据输出,注意这里的block length只能配置为512,其他的大小不支持。需要对上边沿的数据 和 下边沿的数据 分别计算CRC,然后再输出。

请添加图片描述

另外,在向eMMC写数据的时候,每一帧数据完成后,eMMC会在DAT0上向FPGA放回一个CRC校验,表示是否成功接收到数据。通过这个CRC判断是否成功写入。

如果接收成功,那么就会接收到Positive CRC(010), 失败的话,则会接收到 Negative CRC(101)

SDR

请添加图片描述

DDR

请添加图片描述

(4) eMMC设备忙

发送命令后,或者写入数据后,设备不能立马完成对应的工作,这时候,eMMC会拉低DAT0,表示busy,参考图如下。
请添加图片描述

(5)CRC校验

eMMC中只包括两种CRC校验多项式,分别是命令的CRC7和数据的CRC16。具体形式如下,后面再介绍如何具体实现。

请添加图片描述
请添加图片描述

到这里,就将eMMC的接口时序详细的说明了一下。更多细节,将在后面一一说明。

(5) eMMC存储区域

eMMC内部有三种存储区域,我们使用的是User Data Area区域,其他两种不作介绍。

请添加图片描述

三 小结

通过这部分的学习,大体对eMMC有了一个初步的了解。对命令和数据的传输过程有了具体的认识。也达到了本篇文章的目的。

下篇,将介绍如何进行上电 初始化。

欢迎关注

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44678052/article/details/127153170

FPGA入门指导手册-----------它是空的(不信你点开看看啊)-爱代码爱编程

FPGA入门指导手册 绪论语法相关记录函数申明状态机毛刺问题实列操作1. 点量一个LED灯(下载编译)flash下载操作(JIC文件下载)2. ModelSim联合仿真操作手册(空)3. PLL操作方式 绪论 本文将会统计FPGA学习期间,使用的过程(尽量精简的方式) 具体信息将会以视频的方式在b站上发表,此处仅以书签的方式统计 软件安装

u-boot2020.04移植(eMMC/SD调试)-爱代码爱编程

文章目录 前奏流程驱动匹配分析需要的属性调试补充结果 前奏 随着u-boot版本的变迁,u-boot的功能也越来越多越来越强大,在较新的u-boot中已经支持很多不同类型的文件系统,告别了以前需要移植者自己手动规划eMMC/SD等镜像存储介质的分区信息(并非真正的磁盘分区,只是一个标号而已),可直接使用相关的命令就可以读取出各种文件系统类型的

Cortex-A15 / Xilinx Artix-7 FPGA处理器设计的评估板-爱代码爱编程

1评估板简介 创龙TL5728F-EVM是一款基于TI Sitara系列AM5728双核ARM Cortex-A15 +浮点双核DSP C66x + Xilinx Artix-7 FPGA处理器设计的高端异构多核评估板,由核心板与底板组成。核心板内部AM5728与Artix-7通过GPMC、I2C通信总线连接。核心板经过专业的PCB Layout和高低温

创龙SOM-TL437xF 核心板简介(二)-爱代码爱编程

续上一贴,今天介绍SOM-TL437xF 核心板具体参数内容。 3软硬件参数 硬件框图  图一 核心板硬件框图    图二 AM437x资源对比图  图三 AM437x处理器功能框图  图四Spartan-6特性 硬件参数 表1 ARM端硬件参数 CPU CPU:TI Sitara AM4376/AM4379 AR

Linux驱动开发-第一章-硬件基础-爱代码爱编程

硬件基础 处理器 1、通用处理器(GPP) 目前主流的通用处理器(GPP)多采用SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,然后在SoC内由电路实现的。 中央处理器的体系架构: 冯·诺依曼结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数

emmc驱动修改_资源共享:eMMC驱动源码-爱代码爱编程

,自己顶一下。好久没到这里溜达溜达了。上来补充一下Emmc驱动的问题。一般emmc会分为以下几个区 BootAreaPartition1、BootAreaPartition2、RPMBPartition、UserDataArea。emmc复位或启动默认访问的UserDataArea, 要想访问其他区域必需使用Switch命令进行相关的配置。以下为访

2021-04-11-爱代码爱编程

2.驱动设计的硬件基础 2.1.处理器 2.1.1.处理器–通用处理器 目前主流的通用处理器(GPP)多采用 SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,ARM 主控芯片的集成度非常高,除了集成多核 ARM 以外,还可能集成图形处理器、视频编解码器、浮点协处理器、GPS、WiFi、蓝牙、基带、Camera 等

1- 嵌入式系统-爱代码爱编程

1.1 嵌入式系统定义 IEEE(美国电气和电子工程师协会)对嵌入式系统的定义:用于控制、监视或者辅助操作机器和设备的装置。 国内普遍定义:以应用为中心,以计算机技术为基础,软件和硬件可剪切,适用于应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 1.2 嵌入式系统的特点 嵌入式主要特点有:专用性、体积小、功耗低、成本低、稳定性高

13_EMMC编程-爱代码爱编程

第十三章 EMMC编程(有误) ​ 参考资料 https://linux.codingbelief.com/zh/storage/flash_memory/emmc/ ​ 资料光盘: 00_UserManual\参考资料\EMMC编程\JESD84-B50-1eMMCStandard.pdf 1.1 EMMC介绍 1.1.1 EMMC简介 ​

嵌入式学习笔记-2022.2.22-爱代码爱编程

ARM裸机(外设的学习) ARM版本号 ARM基本都是RISC架构的哈佛结构 内存与地址统一编址的ARM内核版本号--------ARM SoC版本号--------芯片型号 ARMv1 … ARMv6 ------------------ARM11--------------------S3C6410… ARMv7-----Cortex-M(

TI Sitara AM57x DSP+ARM + Xilinx Artix-7 FPGA开发板 规格书资料-爱代码爱编程

创龙科技TL5728F-EVM是一款基于TI Sitara系列AM5728(双核ARM Cortex-A15 +浮点双核DSP C66x) + Xilinx Artix-7 FPGA处理器设计的高端异构多核评估板,由核心板与评估底板组成。AM5728与Artix-7在核心板内部通过GPMC、I2C通信总线连接,在评估底板通过PCIe通信总线连接。核心板经过

1、 赛灵思-zynq ultrascale+ mpsocs:产品简介_kevin的学习站的博客-爱代码爱编程

目录 1、 赛灵思-Zynq UltraScale+ MPSoCs:产品简介1.1、Zynq UltraScale+ MPSoCs简介1.2、Zynq UltraScale+ MPSoC 处理系统的主要特性1.2.1

正点原子嵌入式linux学习笔记1(petalinux设计和u-爱代码爱编程

Petalinux简介 Petalinux是Xilinx针对嵌入式Linux开发所推出的开发套件、开发工具Petalinux包括U-Boot源码、Linux内核源码以及根文件系统嵌入式Linux系统三巨头:U-Boot、L

emmc硬件设计及驱动配置注意项-爱代码爱编程

eMMC接口需要注意 1.CMD信号的驱动能力要足够,需要正确配置CMD的工作模式,初始化时开漏,数据发送时要推挽 2.sampling tuning可以调整Host端的输入CLK采样点 3.Boot Area

基于fpga模拟emmc工作流程_fpga emmc-爱代码爱编程

1、EMMC工作流程 1.1、上电过程 eMMC在Power on\HW Reset\SW Reset后的流程如图所示。Power ON后,受到eMMC总线长度和供电单元的影响,eMMC总线有一段电压爬升的过程。当Vcc电压(flash供电电压)和Vccq电压(控制器接口电压)达到规定的有效范围内后(可以先升到3.3V(2.7~3.6V),再通过cmd