eMMC總線拓?fù)?/p>
在eMMC總線中,可以有一個(gè)Host,多個(gè)eMMC設(shè)備??偩€上的所有通信都是以Host發(fā)送一個(gè)Command給eMMC開始的,eMMC對于收到的不同Command會(huì)做出不同的response,當(dāng)然了eMMC對于收到的部分Command可以不做response。Host一次只能與一個(gè)eMMC設(shè)備通信。
在上電啟動(dòng)后,Host會(huì)為所有eMMC設(shè)備依次分配相對地址(RCA,Relative card Address)。當(dāng)Host需要和某一個(gè)eMMC設(shè)備通信時(shí),會(huì)先通過RCA選中該eMMC設(shè)備,只有被選中的eMMC設(shè)備才會(huì)響應(yīng)Host的Command。
eMMC總線協(xié)議
在系統(tǒng)上電復(fù)位后,Host必須使用eMMC總線協(xié)議指定的message來初始化eMMC設(shè)備。每個(gè)message都由下面的一個(gè)標(biāo)記表示:
command:命令,一個(gè)命令是一個(gè)開始操作的標(biāo)記。命令是由Host發(fā)給eMMC設(shè)備的。一個(gè)命令在CMD線上被串行傳輸。
response:響應(yīng),響應(yīng)是由eMMC設(shè)備發(fā)送給Host,用于eMMC設(shè)備對先前收到命令的回復(fù)。一個(gè)響應(yīng)在CMD線上被串行傳輸。
data:數(shù)據(jù),數(shù)據(jù)可以從Host傳輸給eMMC設(shè)備,也可以從eMMC設(shè)備傳輸給Host。數(shù)據(jù)在數(shù)據(jù)線上被傳輸。用于傳輸數(shù)據(jù)的數(shù)據(jù)線可以是1個(gè)(DAT0),4個(gè)(DAT0-DAT3)或者8個(gè)(DAT0-DAT7)。
對于每一個(gè)數(shù)據(jù)線來說,在一個(gè)時(shí)鐘周期可以傳輸1位數(shù)據(jù),也就是SDR模式(single data rate)。當(dāng)然了,在一個(gè)時(shí)鐘周期可以傳輸2位數(shù)據(jù),也就是DDR模式(dual data rate)。
eMMC的讀和寫命令是按照block為單位進(jìn)行的。讀和寫可以是單塊或者多塊。讀和寫數(shù)據(jù)時(shí),數(shù)據(jù)block后面會(huì)跟CRC。
eMMC讀數(shù)據(jù)
Host從eMMC設(shè)備讀取數(shù)據(jù)的流程圖如下圖所示:
Snipaste_2023-10-11_20-52-40
如果Host發(fā)送的是Read Single Block的命令(CMD17),那么eMMC設(shè)備只會(huì)發(fā)送一個(gè)Block的數(shù)據(jù)(一個(gè)Block數(shù)據(jù)的字節(jié)數(shù)可以由Host通過CMD16命令設(shè)定或者為eMMC設(shè)備的默認(rèn)值)。
如果Host發(fā)送的是Read Multiple Block的命令(CMD18),并且在發(fā)送CMD18之前,先發(fā)送一個(gè)SET BLOCK COUNT命令(CMD23)來設(shè)置需要讀取的數(shù)據(jù)塊數(shù)量,那么eMMC設(shè)備在傳輸完指定數(shù)量的數(shù)據(jù)塊之后,會(huì)自動(dòng)結(jié)束數(shù)據(jù)傳輸,不需要Host主動(dòng)發(fā)送Stop Command(CMD12)。
如果Host發(fā)送的是Read Multiple Block的命令(CMD18),并且在發(fā)送CMD18之前,Host沒有發(fā)送設(shè)置讀取數(shù)據(jù)塊數(shù)量的命令,那么eMMC設(shè)備會(huì)持續(xù)發(fā)送數(shù)據(jù),直到Host主動(dòng)發(fā)送Stop Command(CMD12)。
eMMC寫數(shù)據(jù)
Host向eMMC設(shè)備寫入數(shù)據(jù)的流程圖如下圖所示:
Snipaste_2023-10-11_21-05-03
如果Host發(fā)送的是Write Single Block的命令(CMD24),那么eMMC設(shè)備只會(huì)將后續(xù)第一個(gè)Block的數(shù)據(jù)寫入的存儲(chǔ)器中(一個(gè)Block數(shù)據(jù)的字節(jié)數(shù)可以由Host通過CMD16命令設(shè)定或者為eMMC設(shè)備的默認(rèn)值)。
如果Host發(fā)送的是Write Multiple Block的命令(CMD25),并且在發(fā)送CMD25之前,先發(fā)送一個(gè)SET BLOCK COUNT命令(CMD23)來設(shè)置需要寫入的數(shù)據(jù)塊數(shù)量,那么eMMC設(shè)備在接收完指定數(shù)量的數(shù)據(jù)塊之后,會(huì)自動(dòng)結(jié)束數(shù)據(jù)傳輸,不需要Host主動(dòng)發(fā)送Stop Command(CMD12)。
如果Host發(fā)送的是Write Multiple Block的命令(CMD25),并且在發(fā)送CMD25之前,Host沒有發(fā)送設(shè)置寫入數(shù)據(jù)塊數(shù)量的命令,那么eMMC設(shè)備會(huì)持續(xù)地將接收到的數(shù)據(jù)寫入到存儲(chǔ)器中,直到Host主動(dòng)發(fā)送Stop Command(CMD12)。
eMMC設(shè)備在接收到一個(gè)Block的數(shù)據(jù)后,會(huì)進(jìn)行CRC校驗(yàn),然后將校驗(yàn)結(jié)果通過CRC Token發(fā)送給Host。發(fā)送完CRC Token后,如果CRC校驗(yàn)成功,eMMC設(shè)備會(huì)將數(shù)據(jù)寫入到內(nèi)部存儲(chǔ)器,此時(shí)DAT0信號(hào)會(huì)拉低,作為Busy信號(hào)。Host會(huì)持續(xù)檢測DAT0信號(hào),直到為高電平時(shí),才會(huì)接著發(fā)送下一個(gè)Block的數(shù)據(jù)。如果CRC校驗(yàn)失敗,那么eMMC設(shè)備不會(huì)進(jìn)行數(shù)據(jù)寫入,此次傳輸?shù)暮罄m(xù)數(shù)據(jù)都會(huì)被忽略。
eMMC無數(shù)據(jù)和無響應(yīng)命令示意
在Host與eMMC設(shè)備的通信中,有部分命令是不需要進(jìn)行數(shù)據(jù)傳輸?shù)?,還有部分命令不需要eMMC設(shè)備回復(fù)Response,示意圖如下所示:
Snipaste_2023-10-11_21-19-41
eMMC命令
eMMC命令類型
eMMC協(xié)議定義了4種類型的命令,包括:bc、bcr、ac和adtc,這些命令類型的說明如下:
bc:broadcast commands(bc),bc是廣播命令,主機(jī)發(fā)送bc命令給eMMC設(shè)備后,eMMC設(shè)備不需要回復(fù)響應(yīng)(response)。
bcr:broadcast commands with response(bcr),bcr是需要eMMC設(shè)備回復(fù)響應(yīng)的廣播命令。
ac:addressed(point-to-point) commands(ac),ac是數(shù)據(jù)線(DAT lines)無數(shù)據(jù)傳輸?shù)模╪o data transfer)點(diǎn)對點(diǎn)(point-to-point)命令。
adtc:addressed(point-to-point) data transfer commands(adtc),adtc是數(shù)據(jù)線有數(shù)據(jù)傳輸?shù)狞c(diǎn)對點(diǎn)命令。
所有的命令(command)和響應(yīng)(response)都是在CMD線上進(jìn)行傳輸?shù)摹0l(fā)送命令或響應(yīng)時(shí)先發(fā)送起始位(Start bit),最后發(fā)送結(jié)束位(End bit)。
eMMC命令格式
eMMC的Command格式如下圖所示:
Snipaste_2023-10-12_20-26-30
eMMC的Command由48 bits組成,所有的eMMC命令都以01開始,以1結(jié)尾。所有的eMMC命令都是在CMD線上進(jìn)行傳輸?shù)?,發(fā)送命令時(shí)先發(fā)送命令的起始位(Start bit),最后發(fā)送命令的結(jié)束位(End bit)。eMMC命令各個(gè)位的說明如下圖所示:
Snipaste_2023-10-12_20-28-05
Start Bit:起始位,固定為0,在沒有命令傳輸?shù)那闆r下,CMD線上的信號(hào)保持高電平,當(dāng)Host將Start Bit發(fā)送到總線上時(shí),eMMC設(shè)備可以很方便檢測到命令的Start Bit(CMD線上的信號(hào)由高電平變?yōu)榈碗娖剑㈤_始接收Command。
Transmission Bit:傳輸位,固定為1,該位指示CMD線上數(shù)據(jù)的傳輸方向,該位為1,表示CMD線上數(shù)據(jù)的傳輸方向?yàn)閺腍ost到eMMC設(shè)備。
Command Index和Argument:命令索引和命令參數(shù),Command Index和Argument是命令的具體內(nèi)容,不同的命令Command Index不同,不同的命令A(yù)rgument也不相同。
CRC:CRC校驗(yàn)值,包含Start Bit、Transmission Bit、Command Index和Argument內(nèi)容的CRC校驗(yàn)值。
End Bit:結(jié)束位,固定為1。
eMMC命令類別
eMMC的命令被劃分成多種不同的類別。每一種命令類別支持一個(gè)設(shè)備功能的子集。
Class 0是所有eMMC設(shè)備都必須支持的命令類別。其他的命令類別根據(jù)具體的設(shè)備類型可以是必須支持的,也可以是可選的。
eMMC命令類別描述如下:
Snipaste_2023-10-12_21-24-24
Host可以通過讀取CSD寄存器的CCC [95:84]位域,來了解當(dāng)前eMMC設(shè)備對命令類別的支持情況,對應(yīng)的位域值為1,就表示該eMMC設(shè)備支持對應(yīng)的命令類別。
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
88文章
11579瀏覽量
217018 -
總線
+關(guān)注
關(guān)注
10文章
3002瀏覽量
90976 -
總線協(xié)議
+關(guān)注
關(guān)注
0文章
137瀏覽量
15515 -
emmc
+關(guān)注
關(guān)注
7文章
242瀏覽量
55027
原文標(biāo)題:Linux MMC子系統(tǒng) - 2.eMMC 5.1總線協(xié)議淺析(1)
文章出處:【微信號(hào):嵌入式那些事,微信公眾號(hào):嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
emmc,什么是emmc
支持emmc4.51主控能對emmc5.0協(xié)議的片子進(jìn)行讀寫嗎?
AXI總線協(xié)議解析
地址解析協(xié)議ARP

地址解析協(xié)議(ARP),地址解析協(xié)議(ARP)是什么意思
SD/SDIO/eMMC 協(xié)議分析儀
汽車網(wǎng)絡(luò)LIN總線協(xié)議解析

CAN總線協(xié)議是什么?CAN總線協(xié)議有哪些?CAN總線協(xié)議知識(shí)分析

協(xié)議解析網(wǎng)關(guān)的作用
eMMC總線協(xié)議

評論