0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux MMC開(kāi)發(fā)指南

嵌入式Linux那些事 ? 來(lái)源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 10:21 ? 次閱讀

Linux MMC 開(kāi)發(fā)指南

1 前言

1.1 文檔簡(jiǎn)介

介紹 Linux 內(nèi)核中 SD/MMC 子系統(tǒng)的接口及使用方法,為 SD/MMC 設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)提供參考。

1.2 目標(biāo)讀者

SD/MMC 驅(qū)動(dòng)的開(kāi)發(fā)/維護(hù)人員。

1.3 適用范圍

產(chǎn)品名稱(chēng) 內(nèi)核版本 驅(qū)動(dòng)文件
A133 Linux-5.4 sunxi_mmc*
h616 Linux-5.4 sunxi_mmc*
v853 Linux-4.9 sunxi_mmc*
R853 Linux-4.9 sunxi_mmc*
F133 Linux-5.4 sunxi_mmc*

2 模塊介紹

2.1 模塊功能介紹

Linux 提供了 MMC 子系統(tǒng)來(lái)實(shí)現(xiàn)對(duì)各種 SD/MMC/EMMC/SDIO 設(shè)備訪問(wèn),MMC 子系統(tǒng)由上到下可以分為三層,MMC/SD card 層,MMC/SD core 層以及 MMC/SD host 層,它們之間的層次關(guān)系如下所示。

MMC/SD card 層負(fù)主要是按照 LINUX 塊設(shè)備驅(qū)動(dòng)程序的框架實(shí)現(xiàn)一個(gè)卡的塊設(shè)備驅(qū)動(dòng)。負(fù)責(zé)塊設(shè)備請(qǐng)求的處理,以及請(qǐng)求隊(duì)列的管理。

MMC/SD core 層負(fù)責(zé)通信協(xié)議的處理,包括 SD/MMC/eMMC/SDIO,為上一層提供具體讀寫(xiě)接口,同時(shí)為下一層提供 host 端接口。

MMC/SD host 層是實(shí)現(xiàn)對(duì) SD/MMC 控制器相關(guān)的操作,直接操作硬件,也是主要實(shí)現(xiàn)部分。

2.2 相關(guān)術(shù)語(yǔ)介紹

2.2.1 硬件術(shù)語(yǔ)

術(shù)語(yǔ) 解釋說(shuō)明
Sunxi 指 Allwinner 的一系列 SOC 硬件平臺(tái)。
SD Secure Digital Memory Card
MMC Multimedia Card
eMMC Embedded MultiMediaCard
host 指具體的 SD/MMC 控制器

2.2.2 軟件術(shù)語(yǔ)

無(wú)

2.3 模塊配置介紹

2.3.1 sys_config.fex 配置說(shuō)明

[card0_boot_para]

card_ctrl = 0

card_high_speed = 1

card_line = 4

sdc_d1 = port:PF0<2><1><3>

sdc_d0 = port:PF1<2><1><3>

sdc_clk = port:PF2<2><1><3>

sdc_cmd = port:PF3<2><1><3>

sdc_d3 = port:PF4<2><1><3>

sdc_d2 = port:PF5<2><1><3>

各個(gè)配置項(xiàng)的意義如下:

配置項(xiàng) 配置項(xiàng)含義
card_ctrl 0:選擇卡量產(chǎn)相關(guān)的控制器
card_high_speed 速度模式 0 為低速,1 為高速
card_line 代表卡總線寬度,分別有 1,4,8
sdc_d1 sdc data1 的 GPIO 配置
sdc_d0 sdc data0 的 GPIO 配置
sdc_clk sdc clk 的 GPIO 配置
sdc_cmd sdc cmd 的 GPIO 配置
sdc_d3 sdc data3 的 GPIO 配置
sdc_d2 sdc data2 的 GPIO 配置

[card2_boot_para]

card_ctrl = 2

card_high_speed = 1

card_line = 8

sdc_clk = port:PC5<3><1><3>

sdc_cmd = port:PC6<3><1><3>

sdc_d0 = port:PC10<3><1><3>

sdc_d1 = port:PC13<3><1><3>

sdc_d2 = port:PC15<3><1><3>

sdc_d3 = port:PC8<3><1><3>

sdc_d4 = port:PC9<3><1><3>

sdc_d5 = port:PC11<3><1><3>

sdc_d6 = port:PC14<3><1><3>

sdc_d7 = port:PC16<3><1><3>

sdc_emmc_rst = port:PC1<3><1><3>

sdc_ds = port:PC0<3><2><3>

sdc_ex_dly_used = 2

sdc_io_1v8 = 1

各個(gè)配置項(xiàng)的意義如下:

配置項(xiàng) 配置項(xiàng)含義
card_ctrl 0:選擇卡量產(chǎn)相關(guān)的控制器
card_high_speed 速度模式 0 為低速,1 為高速
card_line 代表卡總線寬度,分別有 1,4,8
sdc_clk sdc clk 的 GPIO 配置
sdc_cmd sdc cmd 的 GPIO 配置
sdc_d0 sdc data0 的 GPIO 配置
sdc_d1 sdc data1 的 GPIO 配置
sdc_d3 sdc data3 的 GPIO 配置
sdc_d4 sdc data4 的 GPIO 配置
sdc_d5 sdc data5 的 GPIO 配置
sdc_d6 sdc data6 的 GPIO 配置
sdc_d7 sdc data7 的 GPIO 配置
sdc_emmc_rst emmc 復(fù)位信號(hào)的 GPIO 配置
sdc_ds sdc ds 線的 GPIO 配置
sdc_ex_dly_used 采樣模式控制,2: tune 采樣點(diǎn);1:固定采樣點(diǎn)方式,燒寫(xiě)階段和啟動(dòng)階段,通過(guò) sys_config 配置采樣點(diǎn);其它值:燒寫(xiě)階段和啟動(dòng)階段使用預(yù)設(shè)的采樣點(diǎn),通常用 2,不建議修改
sdc_io_1v8 1: 表示 eMMC IO 電平是 1.8V ,需要根據(jù)實(shí)際 emmc io 供電配置
sdc_force_boot_tuning 1: 強(qiáng)制啟動(dòng) tuning
sdc_tm4_win_th Tune 采樣最小可選窗口
sdc_dis_host_caps 禁止某一種速度模式,bit1:Host 不支持 HS-SDR;Bit3:Host不支持 8 線模式;bit6:Host 不支持 HS-DDR;bit7:Host 不支持HS200;bit8:Host 不支持 HS400;其他值,不建議使用

2.3.2 Device Tree 配置說(shuō)明

2.3.2.1 1.uboot 階段

放到板級(jí)目錄下面:uboot-board.dts

2.3.2.1.1(1)sdc0

&sdc0_pins_a {

allwinner,pins = "PF0", "PF1", "PF2",

"PF3", "PF4", "PF5";

allwinner,function = "sdc0";

allwinner,muxsel = <2>;

allwinner,drive = <3>;

allwinner,pull = <1>;

};

&card0_boot_para {

/* reg = <0x0 0x2 0x0 0x0>; */

device_type = "card0_boot_para";

card_ctrl = <0x0>;

card_high_speed = <0x1>;

card_line = <0x4>;

pinctrl-0 = <&sdc0_pins_a>;

};

配置項(xiàng) 配置項(xiàng)含義
card_ctrl 0:選擇卡量產(chǎn)相關(guān)的控制器
card_high_speed 速度模式 0 為低速,1 為高速
card_line 代表卡總線寬度,分別有 1,4,8
pinctrl-0 代表卡的 pin 設(shè)置
sdc0_pins_a 具體卡的 pin 設(shè)置,allwinner,pins 代表具體的 pin 名字,allwinner,function 表示 pin 選擇的功能,這里選擇 sdc0,allwinner,muxsel 代表 sdc0 對(duì)應(yīng) spec 里面的功能值,allwinner,drive 代表去掉能力,allwinner,pull 代表上下拉

2.3.2.1.2 (2)sdc2

&sdc2_pins_a {

allwinner,pins = "PC1", "PC5", "PC6",

"PC8", "PC9", "PC10", "PC11",

"PC13", "PC14", "PC15", "PC16";

allwinner,function = "sdc2";

allwinner,muxsel = <3>;

allwinner,drive = <3>;

allwinner,pull = <1>;

};

&sdc2_pins_b {

allwinner,pins = "PC0", "PC1", "PC5", "PC6",

"PC8", "PC9", "PC10", "PC11",

"PC13", "PC14", "PC15", "PC16";

allwinner,function = "io_disabled";

allwinner,muxsel = <7>;

allwinner,drive = <1>;

allwinner,pull = <1>;

};

&sdc2_pins_c {

allwinner,pins = "PC0";

allwinner,function = "sdc2";

allwinner,muxsel = <3>;

allwinner,drive = <3>;

allwinner,pull = <2>;

};

&card2_boot_para {

/*reg = <0x0 0x3 0x0 0x0>; */

device_type = "card2_boot_para";

card_ctrl = <0x2>;

card_high_speed = <0x1>;

card_line = <0x8>;

pinctrl-0 = <&sdc2_pins_a &sdc2_pins_c>;

sdc_ex_dly_used = <0x2>;

sdc_io_1v8 = <0x1>;

sdc_tm4_win_th = <0x08>;

sdc_tm4_hs200_max_freq = <150>;

sdc_tm4_hs400_max_freq = <100>;

sdc_type = "tm4";

};

配置項(xiàng) 配置項(xiàng)含義
card_ctrl 0:選擇卡量產(chǎn)相關(guān)的控制器
card_high_speed 速度模式 0 為低速,1 為高速
card_line 代表卡總線寬度,分別有 1,4,8
sdc_ex_dly_used 采樣模式控制,2: tune 采樣點(diǎn);1:固定采樣點(diǎn)方式,燒寫(xiě)階段和啟動(dòng)階段,通過(guò) sys_config 配置采樣點(diǎn);其它值:燒寫(xiě)階段和啟動(dòng)階段使用預(yù)設(shè)的采樣點(diǎn),通常用 2
sdc_io_1v8 1: 表示 eMMC IO 電平是 1.8V, 需要根據(jù)實(shí)際 emmc io 供電配置
sdc_tm4_win_th Tune 采樣最小可選窗口
sdc_tm4_hs200_max_freq/ 代表 emmc 的 hs200/hs400 最大頻率設(shè)置, 不建議修改
sdc_tm4_hs400_max_freq
sdc2_pins_a, sdc2_pins_c 具體卡的 pin 設(shè)置,allwinner,pins 代表具體的 pin 名字,allwinner,function 表示 pin 選擇的功能,這里選擇 sdc0,allwinner,muxsel 代表sdc0 對(duì)應(yīng) spec 里面的功能值,allwinner,drive代表去掉能力,allwinner,pull 代表上下拉

2.3.2.2 2. 內(nèi)核階段

存放在 board.dts 或者內(nèi)核目錄下面 arch/armXX/boot/dts/sunxi/sunxiXiwXpX 中在不同的 Sunxi 硬件平臺(tái)中,SD/MMC 控制器的數(shù)目也不一定相同,但對(duì)于每一個(gè) SD/MMC 控制器來(lái)說(shuō),在 board.dts 中配置的參數(shù)相似。各個(gè)項(xiàng)目的意義如下

2.3.2.2.1 [sdc0] 通常用作 SD 卡

sdc0: sdmmc@04020000 {

device_type = "sdc0";

cd-used-24M;

disable-wp;

pinctrl-0 = <&sdc0_pins_a>;

bus-width = <4>;

cd-gpios = <&pio PF 6 6 1 3 0xffffffff>;

/*non-removable;*/

/*broken-cd;*/

/*cd-inverted*/

/*data3-detect;*/

cap-sd-highspeed;

sd-uhs-sdr50;

sd-uhs-ddr50;

sd-uhs-sdr104;

no-sdio;

no-mmc;

sunxi-power-save-mode;

/*sunxi-dis-signal-vol-sw;*/

max-frequency = <150000000>;

ctl-spec-caps = <0x8>;

vmmc-supply = ;

vqmmc33sw-supply = ;

vdmmc33sw-supply = ;

vqmmc18sw-supply = ;

vdmmc18sw-supply = ;

status = "okay";

};

各個(gè)配置項(xiàng)的意義如下:

配置項(xiàng) 配置項(xiàng)含義
device_type phy 索引值的選擇
cd-used-24M 使用 24M 時(shí)鐘檢測(cè)插拔卡中斷
disable-wp 卡設(shè)置寫(xiě)保護(hù),ro
pinctrl-0 第一組 pin 腳的 GPIO 配置
bus-width bus-width
cd-gpios 卡檢測(cè)的 GPIO 配置
non-removable 不可移除
broken-cd sd 卡檢測(cè)方式:輪訓(xùn)
cd-inverted 卡檢測(cè)的高電平有效還是低電平有效
data3-detect data3 線檢測(cè)卡
cap-sd-highspeed SD 卡的 High speed
sd-uhs-sdr50 SD 卡的 uhs-sdr50
sd-uhs-ddr50 SD 卡的 uhs-ddr50
sd-uhs-sdr104 SD 卡的 uhs-sdr104
no-sdio 無(wú) sdio
no-mmc 無(wú) mmc
sunxi-power-save-mode 發(fā)送數(shù)據(jù)或者命令才有時(shí)鐘輸出
sunxi-dis-signal-vol-sw 關(guān)閉電壓切換
max-frequency 最大頻率
ctl-spec-caps 控制 spec 能力
vmmc-supply 供電電壓、工作電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vqmmc33sw-supply 3.3V 的 IO 電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vdmmc33sw-supply 3.3V 的卡檢測(cè)電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vqmmc18sw-supply 1.8V 的 IO 電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vdmmc18sw-supply 1.8V 的卡檢測(cè)電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
status 設(shè)備樹(shù)的狀態(tài)

2.3.2.2.2 [sdc1] 通常用作 SDIO WIFI

sdc1: sdmmc@04021000 {

pinctrl-0 = <&sdc0_pins_a>;

bus-width = <4>;

cap-sd-highspeed;

sd-uhs-sdr50;

sd-uhs-ddr50;

sd-uhs-sdr104;

no-sd;

no-mmc;

/*sunxi-power-save-mode;*/

/*sunxi-dis-signal-vol-sw;*/

cap-sdio-irq;

keep-power-in-suspend;

ignore-pm-notify;

max-frequency = <150000000>;

ctl-spec-caps = <0x8>;

sunxi-dly-208M = <1 1 0 0 0 1>;

vmmc-supply = ;

vqmmc33sw-supply = ;

vdmmc33sw-supply = ;

vqmmc18sw-supply = ;

vdmmc18sw-supply = ;

status = "okay";

};

各個(gè)配置項(xiàng)的意義如下:

配置項(xiàng) 配置項(xiàng)含義
pinctrl-0 第一組 pin 腳的 GPIO 配置
bus-width 線寬
cap-sd-highspeed SDIO 卡的 High speed
sd-uhs-sdr50 SDIO 卡的 uhs-sdr50
sd-uhs-ddr50 SDIO 卡的 uhs-ddr50
sd-uhs-sdr104 SDIO 卡的 uhs-sdr104
no-sd 無(wú) sd
no-mmc 無(wú) mmc
sunxi-power-save-mode 發(fā)送數(shù)據(jù)或者命令才有時(shí)鐘輸出
sunxi-dis-signal-vol-sw 關(guān)閉電壓切換
cap-sdio-irq 開(kāi)啟 SDIO 中斷
keep-power-in-suspend 休眠時(shí)保持電源
ignore-pm-notify 忽略電源管理的通知
max-frequency 最大頻率
ctl-spec-caps 控制 spec 能力
sunxi-dly-208M <1(cmd driver phase) 1(data driver phase) 00 0(data sample phase) 0(cmd sample phase)>
vmmc-supply 供電電壓、工作電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vqmmc33sw-supply 3.3V 的 IO 電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vdmmc33sw-supply 3.3V 的卡檢測(cè)電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vqmmc18sw-supply 1.8V 的 IO 電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vdmmc18sw-supply 1.8V 的卡檢測(cè)電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
status 設(shè)備樹(shù)的狀態(tài)

2.3.2.2.3 [sdc2] 通常用作 eMMC

sdc2: sdmmc@04022000 {

pinctrl-0 = <&sdc0_pins_a &sdc0_pins_c>;

bus-width = <8>;

non-removable;

cap-mmc-highspeed;

mmc-ddr-1_8v;

mmc-hs200-1_8v;

mmc-hs400-1_8v;

no-sdio;

no-sd;

sunxi-power-save-mode;

sunxi-dis-signal-vol-sw;

max-frequency = <100000000>;

ctl-spec-caps = <0x308>;

vmmc-supply = ;

vqmmc-supply = ;

fixed-emmc-driver-type = <0x1>;

sdc_tm4_sm0_freq0 = <0>;

status = "disabled";

};

各個(gè)配置項(xiàng)的意義如下:

配置項(xiàng) 配置項(xiàng)含義
pinctrl-0 第一組 pin 腳的 GPIO 配置
bus-width 線寬
non-removable 不可移除
cap-mmc-highspeed MMC 卡的 High speed
mmc-ddr-1_8v MMC 卡的 ddr50
mmc-hs200-1_8v MMC 卡的 hs200
mmc-hs400-1_8v MMC 卡的 hs400
no-sdio 無(wú) sdio
no-sd 無(wú) sd
sunxi-power-save-mode 發(fā)送數(shù)據(jù)或者命令才有時(shí)鐘輸出
sunxi-dis-signal-vol-sw 關(guān)閉電壓切換
max-frequency 最大頻率
vmmc-supply 供電電壓、工作電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
vqmmc-supply IO 電壓,需要根據(jù)實(shí)際 pmu 供電方案修改
fixed-emmc-driver-type 驅(qū)動(dòng)能力等級(jí)調(diào)整,對(duì)應(yīng)設(shè)置 Extended CSD register 中 HS_TIMING
sdc_tm4_sm0_freqn host timing setting
status 設(shè)備樹(shù)的狀態(tài)

2.3.3 kernel menuconfig 配置說(shuō)明

在命令行中進(jìn)入內(nèi)核 longan 根目錄,執(zhí)行./build.sh menuconfig 進(jìn)入配置界面,并按以下步驟操作:

1.menuconfig 主界面

poYBAGQFTjyAa3BQAAD4QXxH6B4179.png

圖 2-1: menuconfig 主界面

進(jìn)入 Device Drivers,并選中 MMC/SD/SDIO card support 為 “ * ”

pYYBAGQFTj2AMOcrAADv13w4Nds014.png

圖 2-2: Device drivers 界面

選擇 Allwinner sunxi SD/MMC Host Controller support 為 “ * ”,編譯進(jìn)內(nèi)核(M 為編譯進(jìn)模塊)

poYBAGQFTj6AV4vkAAC4YZvMOj0971.png

圖 2-3: sdmmc 支持界面

2.4 源碼結(jié)構(gòu)介紹

SD/MMC 總線驅(qū)動(dòng)的源代碼位于內(nèi)核在 drivers/mmc/host 目錄下:drivers/mmc/host

├── sunxi-mmc.c // 集中了所有的的控制器的公共部分以及主要的控制邏輯代碼,以及大部分的資源申請(qǐng)和使用,包括中斷,pin,ccmu 等

├── sunxi-mmc.h // 為 Sunxi 平臺(tái)的 SD/MMC 控制器驅(qū)動(dòng)定義了一些公共的宏、數(shù)據(jù)結(jié)構(gòu)

|—— sunxi-mmc-v4p1x.c // 部分平臺(tái)的 sdc0、sdc1 的控制器差異部分驅(qū)動(dòng)代碼

|—— sunxi-mmc-v4p1x.h // 部分平臺(tái)的 sdc0、sdc1 的控制器驅(qū)動(dòng)定義了一些的宏、數(shù)據(jù)結(jié)構(gòu)

|—— sunxi-mmc-v4p5x.c // sdc2 的控制器差異部分驅(qū)動(dòng)代碼

|—— sunxi-mmc-v4p5x.h // sdc2 的控制器驅(qū)動(dòng)定義了一些的宏、數(shù)據(jù)結(jié)構(gòu)

|—— sunxi-mmc-v5p3x.c /部分平臺(tái)的 sdc0、sdc1 的控制器差異部分驅(qū)動(dòng)代碼

|—— sunxi-mmc-v5p3x.h//部分平臺(tái)的 sdc0、sdc1 的控制器驅(qū)動(dòng)定義了一些的宏、數(shù)據(jù)結(jié)構(gòu)

|—— sunxi-mmc-debug.c 用于 debug 的代碼

|—— sunxi-mmc-export.c 提供給其他模塊的獨(dú)立接口

2.5 驅(qū)動(dòng)框架介紹

如源碼結(jié)構(gòu)介紹

3 模塊接口說(shuō)明

對(duì)外函數(shù)接口

3.1 sunxi_mmc_rescan_card()

? 作用:用于其他模塊手動(dòng)掃描 sd/sdio,主要提供給 wifi 驅(qū)動(dòng)使用

? 參數(shù):

? 參數(shù) 1:id 對(duì)于的物理控制器 id

? 返回:

? 無(wú)

4 模塊使用范例

無(wú)

5 FAQ

pYYBAGQFTj-ARmB6AAMhzGUP_GI172.png

1、問(wèn):sd 卡和 wifi 經(jīng)常出現(xiàn) retry:start 等打印的原因和原理;

答:出現(xiàn)這種情況是因?yàn)?sdio 通信失敗了,一般是數(shù)據(jù) crc 校驗(yàn)錯(cuò)誤;對(duì)于這種錯(cuò)誤主要懷疑,

硬件信號(hào)受到干擾;而這個(gè) retry 機(jī)制是通過(guò)重發(fā)改變相位等方法來(lái)規(guī)避單次通信失??;在通信

無(wú)法回復(fù)的情況下,會(huì)出現(xiàn)大量的 retrylog,此時(shí)請(qǐng)檢查硬件信號(hào),供電等關(guān)鍵信息

5.1 調(diào)試方法

5.1.1 調(diào)試工具

5.1.2 調(diào)試節(jié)點(diǎn)

5.1.2.1 1. 寄存器信息

linux5.4 內(nèi)核

a.sdc2

(1).sdc2 gpio 寄存器信息

cat /sys/devices/platform/soc@2900000/4022000.sdmmc/sunxi_dump_gpio_register

(2).sdc2 ccmu 寄存器信息

cat /sys/devices/platform/soc@2900000/4022000.sdmmc/sunxi_dump_ccmu_register

(3).sdc2 host 寄存器信息

cat /sys/devices/platform/soc@2900000/4022000.sdmmc/sunxi_dump_host_register

b.sdc0

(1).sdc0 gpio 寄存器信息

cat /sys/devices/platform/soc@2900000/4020000.sdmmc/sunxi_dump_gpio_register

(2).sdc0 ccmu 寄存器信息

cat /sys/devices/platform/soc@2900000/4020000.sdmmc/sunxi_dump_ccmu_register

(3).sdc0 host 寄存器信息

cat /sys/devices/platform/soc@2900000/4020000.sdmmc/sunxi_dump_host_register

(4)手動(dòng)掃描卡接口

echo 1 > /sys/devices/platform/soc@2900000/4020000.sdmmc/sunxi_insert

c.sdc1

(1).sdc1 gpio 寄存器信息

cat /sys/devices/platform/soc@2900000/4021000.sdmmc/sunxi_dump_gpio_register

(2).sdc1 ccmu 寄存器信息

cat /sys/devices/platform/soc@2900000/4021000.sdmmc/sunxi_dump_ccmu_register

(3).sdc1 host 寄存器信息

cat /sys/devices/platform/soc@2900000/4021000.sdmmc/sunxi_dump_host_register

linux4.9 內(nèi)核

a.sdc2

(1).sdc2 gpio 寄存器信息

cat /sys/devices/platform/soc/sdc2/sunxi_dump_gpio_register

(2).sdc2 ccmu 寄存器信息

cat /sys/devices/platform/soc/sdc2/sunxi_dump_ccmu_register

(3).sdc2 host 寄存器信息

cat /sys/devices/platform/soc/sdc2/sunxi_dump_host_register

b.sdc0

(1).sdc0 gpio 寄存器信息

cat /sys/devices/platform/soc/sdc0/sunxi_dump_gpio_register

(2).sdc0 ccmu 寄存器信息

cat /sys/devices/platform/soc/sdc0/sunxi_dump_ccmu_register

(3).sdc0 host 寄存器信息

cat /sys/devices/platform/soc/sdc0/sunxi_dump_host_register

(4)手動(dòng)掃描卡接口

echo 1 > /sys/devices/platform/soc/sdc0/sunxi_insert

c.sdc1

(1).sdc1 gpio 寄存器信息

cat /sys/devices/platform/soc/sdc1/sunxi_dump_gpio_register

(2).sdc1 ccmu 寄存器信息

cat /sys/devices/platform/soc/sdc1/sunxi_dump_ccmu_register

(3).sdc1 host 寄存器信息

cat /sys/devices/platform/soc/sdc1/sunxi_dump_host_register

5.1.2.2 2.emmc 信息

(1)獲取路徑:cd /sys/block/mmcblk0/device. 這里包含了大部分的 emmc 信息

block ffu_capable preferred_erase_size cid fwrev prv cmdq_en hwrev raw_rpmb_size_mult csd life_time rca date manfid rel_sectors driver mmcblk0rpmb rev dsr name serial enhanced_area_offset ocr subsystem enhanced_area_size oemid type enhanced_rpmb_supported power uevent erase_size pre_eol_info

(2)cat 需要的信息,

例如獲取壽命信息

cat life_time

cat pre_eol_info

獲取 emmc 名字

cat namd

獲取生產(chǎn)日期

cat data

獲取唯一識(shí)別碼

cat cid

獲取制造商 id

cat manfid

5.1.2.3 3、性能驗(yàn)證節(jié)點(diǎn)

該節(jié)點(diǎn)主要是用來(lái)記錄底層存儲(chǔ)的讀寫(xiě)性能,該節(jié)點(diǎn)記錄的數(shù)據(jù)不參含調(diào)度以及文件系統(tǒng)的影響。

為了描述方便,這里設(shè)定 base 目錄這一概念,其中 X 代表控制器號(hào);

內(nèi)核 linux4.9 base=/sys/devices/platform/soc/sdcX

內(nèi)核 linux5.4 base=/sys/devices/platform/soc@2900000/402X000.sdmmc

(1) 開(kāi)始測(cè)量:echo 1 > /$base/sunxi_host_perf

(2) 進(jìn)行讀寫(xiě)操作

(3) 獲取測(cè)試結(jié)果:cat /$base/sunxi_host_perf

pYYBAGQFTj-ASeCoAABNln9QNvI823.png

圖 5-1: sunxi_host_perf

(4) 速度計(jì)算:1073741824byte/105978400us = 9.66MB/s

(5) 清除測(cè)量數(shù)據(jù):echo 0 > /$base/sunxi_host_perf

動(dòng)態(tài)設(shè)置

以下動(dòng)態(tài)設(shè)置的節(jié)點(diǎn)均于 base 目錄下:

sunxi_host_perf 總開(kāi)關(guān),打開(kāi)后下面設(shè)置才有效

sunxi_host_filter_w_sector:?jiǎn)喂P數(shù)據(jù)傳輸?shù)臄?shù)據(jù)大于等于這個(gè)數(shù)據(jù)量,

sunxi_host_filter_w_speed 才生效,單位是扇區(qū)

sunxi_host_filter_w_speed:速度低于這個(gè)值就打印出來(lái),單位是 B/S

參考

echo 20971520 > /$base/sunxi_host_filter_w_speed

echo 8 > /$base/sunxi_host_filter_w_sector

echo 1 > /$base/sunxi_host_perf

效果

20190322_17:24:37.207 [ 64.922940] c=25,a=0x 3fc00,bs= 2560,t= 105463us,sp=12136KB/s

20190322_17:24:37.586 [ 65.301113] c=25,a=0x 43800,bs= 2560,t= 92740us,sp=13802KB/s

20190322_17:24:37.829 [ 65.544155] c=25,a=0x 46000,bs= 2560,t= 94162us,sp=13593KB/s

20190322_17:24:37.967 [ 65.682744] c=25,a=0x 47400,bs= 2560,t= 77371us,sp=16543KB/s

20190322_17:24:38.041 [ 65.755126] c=25,a=0x 47e00,bs= 2560,t= 64860us,sp=19734KB/s

開(kāi)機(jī)默認(rèn)啟動(dòng)

在 dts 或者 sysconfig.fex 里面加入下面配置

per_enable:總開(kāi)關(guān),打開(kāi)后下面設(shè)置才有效

fiter_sector :傳輸?shù)臄?shù)據(jù)大于等于這個(gè)數(shù)據(jù)量,

fiter_speed 才生效,單位是扇區(qū)

fiter_speed:速度低于這個(gè)值就打印出來(lái),單位是 B/S

參考

poYBAGQFTkCAeULcAAOgVVWXHgE422.png

圖 5-2: sysconfig 性能測(cè)試配置

效果

20190322_17:24:37.207 [ 64.922940] c=25,a=0x 3fc00,bs= 2560,t= 105463us,sp=12136KB/s

20190322_17:24:37.586 [ 65.301113] c=25,a=0x 43800,bs= 2560,t= 92740us,sp=13802KB/s

20190322_17:24:37.829 [ 65.544155] c=25,a=0x 46000,bs= 2560,t= 94162us,sp=13593KB/s

20190322_17:24:37.967 [ 65.682744] c=25,a=0x 47400,bs= 2560,t= 77371us,sp=16543KB/s

20190322_17:24:38.041 [ 65.755126] c=25,a=0x 47e00,bs= 2560,t= 64860us,sp=19734KB/s

5.2 常見(jiàn)問(wèn)題

參考《MMC 量產(chǎn)問(wèn)題快速排查指南》《eMMC 硬件排查指南》

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1360

    瀏覽量

    40185
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8447

    瀏覽量

    150724
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11209

    瀏覽量

    208721
  • MMC
    MMC
    +關(guān)注

    關(guān)注

    0

    文章

    76

    瀏覽量

    30443
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EAC0945 linux開(kāi)發(fā)指南

    EAC0945 linux開(kāi)發(fā)指南
    發(fā)表于 09-28 12:40

    EAC0945 linux開(kāi)發(fā)指南

    `EAC0945 linux開(kāi)發(fā)指南`
    發(fā)表于 10-31 12:18

    Rockchip Linux SDK uboot logo開(kāi)發(fā)指南

    arm嵌入式vs-rk3399 板卡uboot logo 開(kāi)發(fā)指南概述:本文檔主要介紹 rockchip linux sdk uboot logo 顯示的相關(guān)功能、配置以及開(kāi)發(fā)過(guò)程中的注意事項(xiàng)。適用于 rockhip
    發(fā)表于 10-09 08:12

    CPLD FPGA高級(jí)應(yīng)用開(kāi)發(fā)指南

    CPLD FPGA高級(jí)應(yīng)用開(kāi)發(fā)指南
    發(fā)表于 04-15 10:56 ?58次下載
    CPLD FPGA高級(jí)應(yīng)用<b class='flag-5'>開(kāi)發(fā)指南</b>

    Tiny6410 Linux開(kāi)發(fā)指南詳解

    Tiny6410 Linux 開(kāi)發(fā)指南
    發(fā)表于 07-08 17:12 ?210次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)指南</b>詳解

    A64開(kāi)發(fā)板LCD開(kāi)發(fā)指南

    A64開(kāi)發(fā)板LCD開(kāi)發(fā)指南,驅(qū)動(dòng)開(kāi)發(fā)指南
    發(fā)表于 06-21 17:02 ?0次下載

    彩光燈開(kāi)發(fā)指南

    彩光燈開(kāi)發(fā)指南
    發(fā)表于 12-29 20:15 ?0次下載

    Linux的平臺(tái)下Mini210S裸機(jī)程序開(kāi)發(fā)指南

    Linux的平臺(tái)下Mini210S裸機(jī)程序開(kāi)發(fā)指南
    發(fā)表于 10-29 10:52 ?59次下載
    <b class='flag-5'>Linux</b>的平臺(tái)下Mini210S裸機(jī)程序<b class='flag-5'>開(kāi)發(fā)指南</b>

    Rockchip Linux SDK的開(kāi)發(fā)指南的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Rockchip Linux SDK的開(kāi)發(fā)指南的詳細(xì)資料說(shuō)明。
    發(fā)表于 01-10 17:17 ?74次下載
    Rockchip <b class='flag-5'>Linux</b> SDK的<b class='flag-5'>開(kāi)發(fā)指南</b>的詳細(xì)資料說(shuō)明

    迅為RK3399開(kāi)發(fā)板嵌入式linux開(kāi)發(fā)指南

    迅為RK3399開(kāi)發(fā)板嵌入式linux開(kāi)發(fā)指南迅為RK3399開(kāi)發(fā)板發(fā)布《北京迅為嵌入式linux開(kāi)發(fā)指
    發(fā)表于 11-01 16:58 ?76次下載
    迅為RK3399<b class='flag-5'>開(kāi)發(fā)</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開(kāi)發(fā)指南</b>

    nRF52832開(kāi)發(fā)指南-上冊(cè)

    nRF52832開(kāi)發(fā)指南-上冊(cè)
    發(fā)表于 06-16 14:15 ?75次下載

    Tina_Linux_系統(tǒng)軟件開(kāi)發(fā)指南

    Tina_Linux_系統(tǒng)軟件開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?1746次閱讀
    Tina_<b class='flag-5'>Linux</b>_系統(tǒng)軟件<b class='flag-5'>開(kāi)發(fā)指南</b>

    Tina Linux配置開(kāi)發(fā)指南

    Tina Linux配置開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.6w次閱讀
    Tina <b class='flag-5'>Linux</b>配置<b class='flag-5'>開(kāi)發(fā)指南</b>

    Linux NOR開(kāi)發(fā)指南

    Linux NOR開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?908次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開(kāi)發(fā)指南</b>

    【北京迅為】itop-龍芯2k1000開(kāi)發(fā)指南Linux基礎(chǔ)入門(mén)vim 編輯器

    【北京迅為】itop-龍芯2k1000開(kāi)發(fā)指南Linux基礎(chǔ)入門(mén)vim 編輯器
    的頭像 發(fā)表于 10-25 14:56 ?229次閱讀
    【北京迅為】itop-龍芯2k1000<b class='flag-5'>開(kāi)發(fā)指南</b><b class='flag-5'>Linux</b>基礎(chǔ)入門(mén)vim 編輯器