FPGA驱动eMMC系列(一)-------简介

简介: 笔记

一. 简介


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


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


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


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


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

回复eMMC代码V1 获取完整工程,目前支持高速和HS200.HS400有点问题,可能是我PCB的问题。


下面就是进入正题吧!


FPGA驱动eMMC系列(二)-------上电初始化


二. 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模式中有效(读数据的时候以及写数据后的响应)

10.png



(2) 命令发送过程

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

11.png



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

12.png



(3) 数据传输过程

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


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

13.png



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

14.png



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


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


SDR

15.png



DDR

16.png



(4) eMMC设备忙

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

17.png


(5)CRC校验

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

18.png


20.png


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


(5) eMMC存储区域

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

21.png



三 小结


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


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


公众号:FPGA之旅

目录
相关文章
|
7月前
|
芯片 异构计算
【FPGA】高云FPGA之数字钟实验->HC595驱动数码管(一)
【FPGA】高云FPGA之数字钟实验->HC595驱动数码管
213 2
|
7月前
|
芯片 异构计算
【FPGA】高云FPGA之数字钟实验->HC595驱动数码管(三)
【FPGA】高云FPGA之数字钟实验->HC595驱动数码管
164 4
|
5月前
|
C语言 芯片 异构计算
FPGA新起点V1开发板(六-语法篇)——verilog简介+基础语法
FPGA新起点V1开发板(六-语法篇)——verilog简介+基础语法
|
5月前
|
数据采集 计算机视觉 异构计算
FPGA进阶(2):基于I2C协议的EEPROM驱动控制
FPGA进阶(2):基于I2C协议的EEPROM驱动控制
78 0
|
5月前
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(二)
FPGA进阶(1):基于SPI协议的Flash驱动控制
65 0
|
5月前
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
215 0
|
5月前
|
异构计算
FPGA强化(9):TFT_LCD液晶屏驱动
FPGA强化(9):TFT_LCD液晶屏驱动
65 0
|
5月前
|
异构计算
FPGA强化(8):HDMI显示器驱动
FPGA入门(8):VGA显示器驱动
47 0
|
7月前
|
存储 芯片 异构计算
【FPGA】高云FPGA之数字钟实验->HC595驱动数码管(二)
【FPGA】高云FPGA之数字钟实验->HC595驱动数码管
180 4