MPC5748G : eMMC調(diào)試筆記

開(kāi)發(fā)板:

開(kāi)發(fā)板

原理圖:

eMMC原理圖

開(kāi)發(fā)工具:S32 Design Studio for Power Architecture

調(diào)試內(nèi)容:MPC5748G通過(guò)SDHC模塊讀寫eMMC

eMMC:

? ? ? ? 嵌入式多媒體卡?(Embedded Multi Media Card)是MMC協(xié)會(huì)訂立、主要針對(duì)手機(jī)或平板電腦等產(chǎn)品的內(nèi)嵌式存儲(chǔ)器標(biāo)準(zhǔn)規(guī)格树酪。eMMC在封裝中集成了一個(gè)控制器恨樟,提供標(biāo)準(zhǔn)接口并管理閃存港庄。eMMC的應(yīng)用是對(duì)存儲(chǔ)容量有較高要求的消費(fèi)電子產(chǎn)品蒲赂。

? ? ? ? 帶有MMC(多媒體卡)接口碳锈、快閃存儲(chǔ)器設(shè)備及主控制器混稽。所有都在一個(gè)小型的BGA 封裝缤言。接口速度高達(dá)每秒52MBytes宝当,eMMC具有快速、可升級(jí)的性能胆萧。同時(shí)其接口電壓可以是1.8v 或者是3.3v庆揩。

SDHC:

? ? ? ? MPC5748G支持一個(gè)超安全數(shù)字主機(jī)控制器(uSDHC:ultra Secure Digital Host Controller)模塊,uSDHC提供主系統(tǒng)與SD/SDIO/ MMC卡通信的接口跌穗。uSDHC充當(dāng)橋梁的作用订晌,以發(fā)送命令的方式,通過(guò)主機(jī)總線傳輸?shù)絊D/SDIO/ MMC卡中蚌吸,執(zhí)行數(shù)據(jù)訪問(wèn)(讀寫操作)锈拨,它遵循SD/SDIO/MMC卡的傳輸協(xié)議。

注意:為了 uSDHC 外部接口的正常運(yùn)行套利,uSDHC_VEND_SPEC [ CMD_OE_PRE_EN ] ?【Vendor Specific Register :此寄存器包含供應(yīng)商特定的控制/狀態(tài)寄存器位應(yīng)該被編程為 1 推励。

設(shè)備寄存器的特定復(fù)位值如下表所示:

uSDHC_BLK_ATT:Block Attributes (uSDHC_BLK_ATT),這個(gè)寄存器用于配置數(shù)據(jù)塊的數(shù)量每一塊的字節(jié)數(shù)肉迫。

uSDHC_PRES_STATE:Present State (uSDHC_PRES_STATE)验辞,該只讀寄存器獲得uSDHC的狀態(tài)。當(dāng)一個(gè)數(shù)據(jù)發(fā)送期間喊衫,DAT lines 處于忙狀態(tài)跌造,主驅(qū)動(dòng)可以發(fā)送?CMD0, CMD12, CMD13 (for memory) ?和 CMD52 (for SDIO)。這些命令能夠被發(fā)送族购,當(dāng) Command Inhibit (DAT)【命令抑制位壳贪,uSDHC_PRES_STATE[CIHB]:如果此狀態(tài)位為0,則表示CMD線未使用寝杖,uSDHC可以使用CMD線發(fā)出SD/MMC命令违施。在寫入傳輸類型寄存器Command Transfer Type (uSDHC_CMD_XFR_TYP)后立即設(shè)置此位。當(dāng)接收到命令響應(yīng)時(shí)瑟幕,此位被清除磕蒲。即使這個(gè)Command Inhibit (DAT) 【CDIHB】被設(shè)置為 1,僅僅 CMD 線能用于發(fā)送命令(如果該位為0)只盹。

打開(kāi)調(diào)試工程:

安裝完成開(kāi)發(fā)工具:S32DS_Power_Win32_v2017.R1_b171019.exe

1辣往、雙擊打開(kāi)開(kāi)發(fā)工具:

軟件開(kāi)發(fā)環(huán)境

2、打開(kāi)File --> New --> S32DS Project ?from Example殖卑,選擇如下工程站削。

選擇調(diào)試工程

3、打開(kāi)SDHC調(diào)試工程如下:

打開(kāi)調(diào)試工程

一孵稽、配置SDHC工程:

1许起、配置SDHC的引腳

配置引腳信息

2、配置SDHC時(shí)鐘

配置時(shí)鐘

3肛冶、配置uSDHC參數(shù)信息

配置uSDHC參數(shù)信息

二街氢、SDHC ?Pads ?初始化:

代碼截圖

1、設(shè)置 Pins?Output Buffer:

(1)?調(diào)用接口描述

調(diào)用接口一
調(diào)用接口二

(2)?寄存器描述

MSCR(Multiplexed Signal Configuration Register):多路信號(hào)配置寄存器睦袖,選擇哪一個(gè)信號(hào)源連接到寄存器相關(guān)聯(lián)的目的地珊肃,即這是一個(gè)芯片引腳拳球,是或可以配置為一個(gè)輸出毁欣。對(duì)于相關(guān)聯(lián)的芯片引腳目的地,該寄存器也可以指定這個(gè)引腳的電氣屬性垄提。

MSCR pin connection?

MSCR?寄存器中的字段根據(jù)其關(guān)聯(lián)的目的地(芯片引腳)變化而變化董习。 對(duì)于?芯片引腳?的?MSCR 寄存器分配烈和,引腳類型,APC (Analog Pad Control)支持皿淋,SSS(Source Signal Select)等等招刹。這個(gè)寄存器只支持32位訪問(wèn)恬试。字節(jié)和半字寫訪問(wèn)不支持。

注:參見(jiàn)I/O信號(hào)描述和輸入多路復(fù)用附屬于 MPC5748GRM 手冊(cè)的表格(excel文件)疯暑。

I/O信號(hào)描述和輸入多路復(fù)用?excel文件 ?位置
寄存器描述训柴,具體看芯片手冊(cè)

2、設(shè)置 Pins?Input Buffer:

(1)?調(diào)用接口描述

調(diào)用接口一
調(diào)用接口二

(2)?寄存器描述

IMCR(Input Multiplexed Signal Configuration Register):輸入多路復(fù)用信號(hào)配置寄存器妇拯,選擇哪一個(gè)信號(hào)源連接到寄存器相關(guān)聯(lián)的目的地幻馁,即這是一個(gè)內(nèi)部模塊端口(internal module port),是或可以配置為一個(gè)輸入越锈。

IMCR module-port connection

IMCR?寄存器中的字段根據(jù)其關(guān)聯(lián)的目的地(module port)變化而變化仗嗦,對(duì)于?IMCR 的分配和SSS (Source Signal Select)的值參見(jiàn)I/O信號(hào)描述和輸入多路復(fù)用表。

寄存器描述甘凭,具體看芯片手冊(cè)

3稀拐、設(shè)置 Pins?Pull 選擇:

(1)?調(diào)用接口描述

調(diào)用接口一
調(diào)用接口二

(2)?寄存器描述見(jiàn)以上描述

三、SDHC ?初始化:

SDHC ?初始化代碼截圖

1对蒲、uSDHC 初始化代碼解析:

(1)去初始化:調(diào)用接口??uSDHC_DRV_Deinit();

去初始化接口
啟用所有自動(dòng)關(guān)閉功能
VEND_SPEC寄存器關(guān)閉時(shí)鐘的位描述
配置 uSDHC 交換的字節(jié)
GPR_CTL寄存器中 USDHC_BS位的描述
禁止所有狀態(tài)和信號(hào)中斷钩蚊,mask=0xFFFFFFFF
禁止 uSDHC 中斷

?(2)uSDHC驅(qū)動(dòng)初始化:調(diào)用接口??uSDHC_DRV_Init(); ? ??

/* Reset ?uSDHC. */

Reset ?uSDHC
SYS_CTRL寄存器中的RSTD、RSTC蹈矮、RSTA位描述

/* Configures the usdhc protocol */

Configures the usdhc protocol ?
PROT_CTRL寄存器中 EMODE砰逻、D3CD位描述
PROT_CTRL寄存器中 DMASEL 位描述

/* Disable all clock auto gated off feature because of DAT0 line logic(card buffer full status) can't be updated correctly when clock auto gated off is enabled. */

禁止時(shí)鐘自動(dòng)關(guān)閉特性
VEND_SPEC寄存器關(guān)閉時(shí)鐘的位描述
配置 uSDHC 交換的字節(jié)
使能中斷
需要使能的錯(cuò)誤中斷
使能中斷函數(shù)
INT_STATUS_EN 寄存器對(duì)應(yīng)發(fā)送中斷位描述
INT_STATUS_EN 寄存器對(duì)應(yīng) command 錯(cuò)誤中斷位描述??
INT_STATUS_EN 寄存器對(duì)應(yīng) data 錯(cuò)誤中斷位描述
INT_SIGNAL_EN 寄存器對(duì)應(yīng)發(fā)送位描述
INT_SIGNAL_EN 寄存器對(duì)應(yīng) command 錯(cuò)誤中斷位描述?
INT_?SIGNAL?_EN 寄存器對(duì)應(yīng) data 錯(cuò)誤中斷位描述
使能 DMA 中斷
INT_STATUS_EN 寄存器 DMAESEN 中斷位描述 ?
INT_STATUS_EN 寄存器 DINTSEN 中斷位描述?
INT_SIGNAL?_EN 寄存器 DMAEIEN 中斷位描述 ?
INT_?SIGNAL?_EN 寄存器 DINTIEN 中斷位描述
使能 uSDHC 中斷
INT_SYS_EnableIRQ 函數(shù)描述

四、eMMC ?初始化:

1泛鸟、判斷 eMMC卡是否插入:

讀取?uSDHC_PRES_STATE 寄存器中的 ?CINST 位蝠咆,判斷卡是否插入。

uSDHC_PRES_STATE 寄存器中?CINST ?位描述

2北滥、如果 eMMC卡插入刚操,則初始化eMMC卡:

(1)設(shè)置 uSDHC 的總線時(shí)鐘為 400KHZ

1)首先得到系統(tǒng)時(shí)鐘:srcClock ?( 例如設(shè)置的系統(tǒng)時(shí)鐘為 40MHZ = 40 000 000 HZ )

2)禁用 uSDHC時(shí)鐘。在更改 eMMC ?時(shí)鐘頻率之前再芋,應(yīng)該禁用它菊霜。

uSDHC_VEND_SPEC[ FRC_SDCLK_ON?] = 0;

3)求 prescaler divisor?的大小。

Clock Frequency = (srcClock ?) / (prescaler x divisor)

例如:Clock Frequency = 400 000 hz济赎;srcClock ?=??40 000 000 HZ

即:prescaler x divisor = 100

參照 MPC5748G數(shù)據(jù)手冊(cè)鉴逞,可知:prescaler <=256;divisor <=16

并且司训,在單數(shù)據(jù)速率模式下构捡,prescaler?只允許以下設(shè)置:

??80h) Base clock divided by 256

? 40h) Base clock divided by 128

? 20h) Base clock divided by 64

? 10h) Base clock divided by 32

? 08h) Base clock divided by 16

? 04h) Base clock divided by 8

? 02h) Base clock divided by 4

? 01h) Base clock divided by 2

? 00h) Base clock divided by 1

所以,設(shè)置?divisor =16 時(shí)壳猜,求出?prescaler =100/16=6.25勾徽,按照上面分析,prescaler =8统扳;當(dāng)?prescaler =8 時(shí)喘帚,divisor =?100/8=12.5畅姊,約等于13。

即:uSDHC_SYS_CTRL[SDCLKFS]=prescaler >>1吹由;

? ? ? ? uSDHC_SYS_CTRL[DVS]=divisor-1涡匀;

同時(shí),設(shè)置?Data Timeout Counter Value:??uSDHC_SYS_CTRL[DTOCV]=0x0E溉知;

注:詳細(xì) uSDHC_SYS_CTR L描述請(qǐng)見(jiàn)手冊(cè)。

4)等待 eMMC 卡的時(shí)鐘穩(wěn)定腕够。

while ( uSDHC_PRES_STATE?[?SDSTB?] == 0?){ ?}级乍;

uSDHC_PRES_STATE寄存器中?SDSTB 位描述

5)使能?uSDHC?時(shí)鐘。

uSDHC_VEND_SPEC[?FRC_SDCLK_ON?] = 1;

(2)發(fā)送80時(shí)鐘周期到卡帚湘,以至于激活卡玫荣。

1)寫1清除 uSDHC_SYS_CTRL 寄存器中的 INITA

即: uSDHC_SYS_CTRL [ INITA?] = 1捅厂;

2)等待卡激活资柔。

while (?uSDHC_SYS_CTRL?[?INITA?] ==?0?) { ?}贿堰;

(3)參考芯片手冊(cè)以及?emmc?協(xié)議發(fā)送 CMD 命令 初始化 eMMC卡羹与。

1)發(fā)送 CMD0 命令纵搁,設(shè)置卡?空閑狀態(tài)腾誉。

command . index =?CMD0? ? ? ? /*!< Go Idle State */

command . argument = 0;

CMD0 命令

2)host發(fā)送CMD1后妄辩,會(huì)從device收到R3眼耀,如果R3中busy bit為0哮伟,表示device還沒(méi)準(zhǔn)備好。host重復(fù)發(fā)送CMD1抡驼,接收R3這個(gè)過(guò)程肿仑。

command . index = CMD1 ? ? ? ? ?/*!< Send Operation Condition */

command?.?argument = 0xFF8000

command?.?responseType = uSDHC_RESPONSE_TYPE_R3

CMD1

3)host?發(fā)送CMD2后馏锡,會(huì)從device收到獲取CID杯道,R2用來(lái)用來(lái)返回 device's CID责蝠。

command . index = CMD2 ? ? ? ? ? ?/*!< All Send CID */

command . argument = 0U;

command . responseType = uSDHC_RESPONSE_TYPE_R2;

CMD2

4)host?發(fā)送?CMD3?用來(lái)給設(shè)置設(shè)備的 relative device address(RCA)

command . index = CMD3 ? ? ? ??/*!< Set Relative Address */

command . argument = 0 ? ? ? ? ?/* Relative Address */

command . responseType = uSDHC_RESPONSE_TYPE_R1;

CMD3

5)host?發(fā)送?CMD9?用來(lái)請(qǐng)求設(shè)備發(fā)送它的?Device-specific data?(CSD) 到 CMD line 上齿拂。參數(shù)指定設(shè)備的RCA [31:16] RCA

command . index = CMD9 ? ? ? ? ?/*!< Send CSD */

command . argument = (card->relativeAddress << 16U) ? ?/* 參數(shù) */

command . responseType = uSDHC_RESPONSE_TYPE_R2

CMD9

6)host?發(fā)送?CMD7?用來(lái)選擇或取消卡

當(dāng)設(shè)備處在Stand-by狀態(tài)创肥,CMD7把設(shè)備從Stand-by State切換到Transfer State值朋;也可以把設(shè)備從Transfer State切換回Stand-by State昨登。

當(dāng)設(shè)備處在Disconnect狀態(tài)丰辣,CMD7把設(shè)備從Disconnect State切換到Programming State。

在以上兩種情況下飘哨,使用當(dāng)前的RCA會(huì)選擇設(shè)備芽隆,任何其他RCA 地址都會(huì)取消選擇胚吁。使用RCA 0x0000表示取消選擇。

command?. index = CMD7 ? ? /*!< Select Card */

command . argument = card->relativeAddress << 16U ?//選擇卡

command . argument?=?0x0000 ? ? //取消選擇

command . responseType = uSDHC_RESPONSE_TYPE_R1

7)host?發(fā)送?CMD23 用來(lái)設(shè)置卡的讀寫塊數(shù)目

參數(shù):

[30] '0' non-packed '1' packed

[24] forced programming, 設(shè)置為1,強(qiáng)迫數(shù)據(jù)直接寫入存儲(chǔ)介質(zhì)半抱,而不是僅寫入cache

[15:0] number of blocks, 定義讀寫塊數(shù)目

command . index = CMD23 ? ? ? ? ? ? ? ?/*!< Set Block Count */

command . argument = blockCount ??

command . responseType = uSDHC_RESPONSE_TYPE_R1

8)host?發(fā)送?CMD16 設(shè)置接下來(lái)所有block命令(讀和寫)的block尺寸窿侈。缺省的塊長(zhǎng)度在CSD中指定。

參數(shù)[31:0] : block長(zhǎng)度

command . index = CMD16?; ? ? ?/*!< Set Block Length */

command . argument = blockSize

command . responseType = uSDHC_RESPONSE_TYPE_R1

9)host?發(fā)送?CMD6?切換設(shè)備的操作模式或者修改EXT_CSD寄存器,SWITCH命令可以用來(lái)寫EXT_CSD或者改變命令集乘瓤。如果SWITCH命令用來(lái)改變命令集衙傀,那么Index和Value被忽略不會(huì)修改EXT_CSD; 如果SWITCH用來(lái)寫EXT_CSD寄存器,Cmd Set被忽略危队。

參數(shù)

[31:26] Set to 0

[25:24] Access聪建, 00 切換command set; 01 設(shè)置Value中指定的位; 10 清除Value中指定的位; 11 寫入Value指定的值。

[23:16] Index茫陆, EXT_CSD的索引值,index值為0~255簿盅,但是僅僅0~191為有效索引值挥下。

[15:8] Value,

[7:3] Set to 0

[2:0] Cmd Set 桨醋,要切換的command set

command . index = CMD6 ? ? ? ? ? ? ??? ?/*!< Switch */

command . argument = 0x3b70100U ? ? ?//參數(shù)

command . responseType = uSDHC_RESPONSE_TYPE_R1b

(4)在非高速模式下設(shè)置設(shè)置?uSDHC最大頻率為?52MHZ棚瘟。參見(jiàn)(1)的設(shè)置方法。

(5)設(shè)置uSDHC的數(shù)據(jù)總線模式為4位喜最。

uSDHC_PROT_CTRL [DTW] = 0x01

位描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偎蘸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禀苦,老刑警劉巖蔓肯,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異振乏,居然都是意外死亡蔗包,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門慧邮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)调限,“玉大人,你說(shuō)我怎么就攤上這事误澳〕馨” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵忆谓,是天一觀的道長(zhǎng)裆装。 經(jīng)常有香客問(wèn)我,道長(zhǎng)倡缠,這世上最難降的妖魔是什么哨免? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮昙沦,結(jié)果婚禮上琢唾,老公的妹妹穿的比我還像新娘。我一直安慰自己盾饮,他們只是感情好采桃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著丘损,像睡著了一般普办。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徘钥,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天泌豆,我揣著相機(jī)與錄音,去河邊找鬼吏饿。 笑死踪危,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猪落。 我是一名探鬼主播贞远,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼笨忌!你這毒婦竟也來(lái)了蓝仲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袱结,沒(méi)想到半個(gè)月后亮隙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垢夹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年溢吻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片果元。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡促王,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出而晒,到底是詐尸還是另有隱情蝇狼,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布倡怎,位于F島的核電站迅耘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏监署。R本人自食惡果不足惜颤专,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焦匈。 院中可真熱鬧,春花似錦昵仅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吕世,卻和暖如春彰触,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背命辖。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工况毅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尔艇。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓尔许,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親终娃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子味廊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349