目录
前言:
由于eMMAC的资料比较少,但是好在仅有的资料比较好,特意在看了以后按自己的逻辑和理解程度梳理了,粗中有细,方便以后回顾。
一. 什么是eMMAC
eMMC 是 embedded MultiMediaCard 的简称。MultiMediaCard,即 MMC, 是一种闪存卡(Flash Memory Card)标准,它定义了 MMC 的架构以及访问 Flash Memory 的接口和协议。而 eMMC 则是对 MMC 的一个拓展标准。
二. 四个接口
CLK: 用于同步的时钟信号
Data Strobe: 此信号是从Device端输出的时钟信号,频率和CLK相同,用于同步从Device端输出的数据。
CMD:此信号用于发送Host 的command和Device的response。
DAT0-7:用于传输数据的8bit总线
三. 数据传输
- 1.host 从 eMMC Device读取数据
具体过程(单 Block读取):
1. host发送Sing Block Read的Command给eMMC Device
2. eMMC Device发送一个Block的数据给host( 附带CRC校验码), eMMC Device会持续发送数据,直到Host发送Stop
command 才结束发送
具体过程(多 Block读取):
1. host发送一个需要读取的Block Count的Command
2. host 发送 Multiple Block Read 的Command 给eMMC Device
3. eMMC Device 在完成指定Block Count(附带CRC校验码)的发送后,会自动结束发送。
- 2. host向eMMC Device写数据
具体过程(单Block写入):
1. host发送Sing Block Write的Command给eMMC Device
2. eMMC Device接收到1个Block后( 附带CRC校验码), 会进行CRC校验。
3.eMMC Device将校验结果通过CRC Token发送给Host。
4.如果CRC校验成功, eMMC Device会将数据写入到内部存储器,此时DAT0信号会被拉低,作为busy信号。Host会持续
检测DAT0信号,直到为高电平时,才会接着发送下一个Block的数据。如果CRC校验失败,那么eMMC Device不会进行数 据写入,此处传输后续的数据都会被忽略。eMMC Device会持续发送数据,直到Host发Stop command 才结束发送
具体过程(多Block写入):
1. host发送一个需要写入的Block Count的Command
2. eMMC Device每接收到1个Block后( 附带CRC校验码), 会进行CRC校验。
3.eMMC Device将每个block的校验结果通过CRC Token发送给Host。
4.如果CRC校验成功, eMMC Device会将数据写入到内部存储器,此时DAT0信号会被拉低,作为busy信号。Host会持续
检测DAT0信号,直到为高电平时,才会接着发送下一个Block的数据。如果CRC校验失败,那么eMMC Device不会进行数 据写入,此处传输后续的数据都会被忽略。 eMMC Device在接收到指定Block Count的数据后,就自动结束数据接收。
四. Data Block
Data Block 由 Start Bit、Data、CRC16 和 End Bit 组成。以下是不同总线宽度和Data Rate下,Data Block的详细格式:
- 1.SDR模式下的Data Block
在一个时钟周期内,CMD 和 DAT0-7 信号上都可以支持传输 1 个比特,即 SDR (Single Data Rate) 模式。
a. 1 Bit Bus SDR
由于SDR模式下,一个时钟周期只传输1个bit,又只用到1条Data line, 因此Data Block的格式如下:
b. 4 Bits Bus SDR
由于用到了4条 Data line, 因此Data Block的格式如下:
c.8 Bits Bus SDR
由于用到了8条 Data line, 因此Data Block的格式如下:
- 2. DDR模式下的Data Block
DDR (Double Data Rate) 模式,即在一个时钟周期内,可以传输 2 个比特。在DDR模式下,每条Data Line在时钟的上升沿和下降沿都会传输数据,其中上升沿传输数据的奇数Bit(1,3,5...), 下降沿传输数据的偶数Bit(2, 4, 6...)
a. 4 Bits Bus DDR
b. 8 Bits Bus DDR
参考资料:
https://linux.codingbelief.com/zh/storage/flash_memory/emmc/emmc_bus_protocol.html