嗨嘍,大家好,我是程序猿老王,程序猿老王就是我。
今天給大家詳細的介紹一下u-boot命令之EMMC和SD卡操作的mmc命令使用。希望這篇文章對大家有所幫助。
uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般認為 EMMC和 SD 卡是同一個東西,所以沒有特殊說明,統(tǒng)一使用 MMC 來代指 EMMC 和 SD 卡。
uboot 中常用于操作 MMC 設備的命令為“mmc”。
mmc 是一系列的命令,其后可以跟不同的參數(shù),在u-boot的命令行輸入“?mmc”即可查看 mmc 有關的命令,如下:
= > ? mmc
mmc - MMC sub system
Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan [mode]
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] [mode] - show or set current mmc device [partition] and set mode
- the required speed mode is passed as the index from the following list
[MMC_LEGACY, MMC_HS, SD_HS, MMC_HS_52, MMC_DDR_52, UHS_SDR12, UHS_SDR25,
UHS_SDR50, UHS_DDR50, UHS_SDR104, MMC_HS_200, MMC_HS_400, MMC_HS_400_ES]
mmc list - lists available devices
mmc wp [PART] - power on write protect boot partitions
arguments:
PART - [0|1]
: 0 - first boot partition, 1 - second boot partition
if not assigned, write protect all boot partitions
mmc hwpartition < USER > < GP > < MODE > - does hardware partitioning
arguments (sizes in 512-byte blocks):
USER - < user > < enh > < start > < cnt > < wrrel > {on|off} >
: sets user data area attributes
GP - < {gp1|gp2|gp3|gp4} > < cnt > < enh > < wrrel > < {on|off} >
: general purpose partition
MODE - < {check|set|complete} >
: mode, complete set partitioning completed
WARNING: Partitioning is a write-once setting once it is set to complete.
Power cycling is required to initialize partitions after set to complete.
mmc setdsr < value > - set DSR register value
從上面列出的參數(shù)詳情可以看出, mmc 后面跟不同的參數(shù)可以實現(xiàn)不同的功能,如下所示:
命令 | 功能 |
---|---|
mmc info | 顯示MMC/SD卡設備的詳細信息,包括容量、速度等 |
mmc read | 從MMC/SD卡讀取數(shù)據(jù)到指定的加載地址 |
mmc wirte | 將指定加載地址的數(shù)據(jù)寫入MMC/SD卡的指定扇區(qū) |
mmc erase | 擦除MMC/SD卡上指定扇區(qū)的數(shù)據(jù) |
mmc rescan | 重新掃描MMC/SD卡設備,以便在U-Boot中重新識別它們mmc part顯示當前選擇的MMC/SD卡設備的分區(qū)表信息 |
mmc dev | 選擇并初始化指定編號的MMC/SD卡設備 |
mmc list | 列出系統(tǒng)中檢測到的所有MMC設備的信息 |
mmc wp | 設置 MMC/SD卡的寫保護狀態(tài) |
mmc hwpartition | MMC/SD卡上進行分區(qū)操作 |
mmc setdsr | 設置MMC/SD卡的數(shù)據(jù)寄存器(DSR)的值 |
mmc命令中最常用的8個命令如下:
- mmc info 命令
- mmc rescan 命令
- mmc list 命令
- mmc dev 命令
- mmc part 命令
- mmc read 命令
- mmc write 命令
- mmc erase 命令
1、mmc info 命令
mmc info命令用于顯示當前選定的 MMC 設備的相關信息,包括設備編號、制造商 ID、OEM、卡名稱、總容量、總扇區(qū)數(shù)、塊大小、傳輸速度、版本信息、是否支持高容量(High Capacity)等,如下所示:
= ?> mmc info
Device: FSL_SDHC
Manufacturer ID: 3
OEM: 5344
Name: SC16G
Bus Speed: 49500000
Mode: SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.8 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
每個字段的解釋如下:
- Device: FSL_SDHC:設備類型,這里是 FSL_SDHC,指示是由飛思卡爾(Freescale)提供的 SD 控制器
- Manufacturer ID: 3:制造商 ID,表示制造商的標識號
- OEM: 5344:OEM 信息,指示原始設備制造商的標識號
- Name: SC16G:MMC 卡名稱,這里是 SC16G
- Bus Speed: 49500000:總線速度,表示數(shù)據(jù)傳輸?shù)乃俾?/li>
- Mode: SD High Speed (50MHz):模式,指示 MMC 卡所處的傳輸模式,這里是 SD 高速模式,傳輸速率為 50MHz
- Rd Block Len: 512:讀取塊長度,表示 MMC 卡的塊大小
- SD version 3.0:SD 卡版本,這里是版本 3.0
- High Capacity: Yes:是否支持高容量,指示 MMC 卡是否支持高容量存儲
- Capacity: 14.8 GiB:容量,表示 MMC 卡的總容量
- Bus Width: 4-bit:總線寬度,表示 MMC 卡的數(shù)據(jù)傳輸總線寬度
- Erase Group Size: 512 Bytes:擦除組大小,表示 MMC 卡的擦除操作的最小單位大小
輸出中的信息可能會有所不同,具體取決于系統(tǒng)中存在的 MMC 設備和 U-Boot 版本。
2、mmc rescan 命令
mmc rescan命令用于重新掃描系統(tǒng)中的 MMC 設備,并更新設備的編號、容量、速度等信息。這對于在 U-Boot 中添加或移除 MMC 設備后進行設備狀態(tài)更新很有用。
mmc rescan
3、mmc list 命令
mmc list命令用于列出檢測到的 MMC 設備,如下所示:
= > mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1
從上面可以看出,當前開發(fā)板有兩個 MMC 設備:
- FSL_SDHC:0 是 SD卡
- FSL_SDHC:1(eMMC)是 EMMC。
4、 mmc dev 命令
mmc dev命令用于將所選的 MMC 設備設置為當前設備,并在后續(xù)的操作中使用該設備。這對于在多個 MMC 設備存在的系統(tǒng)中選擇要操作的設備非常有用。命令用法如下:
mmc dev [dev] [part]
參數(shù)含義如下:
- [dev]用來設置要切換的MMC設備號
- [part]是分區(qū)號
[part]分區(qū)號也可以不寫,不寫的話默認為0分區(qū),如下所示:
= > mmc dev 1 /*切換到EMMC,0為SD卡, 1為eMMC*/
switch to partitions #0, OK
mmc1(part 0) is current device
切換到 eMMC 成功, mmc0 為當前的 MMC 設備,輸入命令“mmc info”可查看 eMMC 的信息,如下所示:
= ?> mmc dev 1
switch to partitions #0, OK
mmc1(part 0) is current device
= ?> mmc info
Device: FSL_SDHC
Manufacturer ID: 15
OEM: 0
Name: 8GTF4R
Bus Speed: 49500000
Mode: MMC High Speed (52MHz)
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.3 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 512 KiB ENH
Boot area 0 is not write protected
Boot area 1 is not write protected
每個字段的解釋如下:
- Device: FSL_SDHC: 設備類型,這里指示為飛思卡爾(Freescale)提供的 SD 控制器
- Manufacturer ID: 15: 制造商 ID,表示制造商的標識號
- OEM: 0: OEM 信息,指示原始設備制造商的標識號
- Name: 8GTF4R: MMC 卡名稱,這里是 "8GTF4R"
- Bus Speed: 49500000: 總線速度,表示數(shù)據(jù)傳輸?shù)乃俾?/li>
- Mode: MMC High Speed (52MHz): 模式,指示 MMC 卡所處的傳輸模式,這里是 MMC 高速模式,傳輸速率為 52MHz
- Rd Block Len: 512: 讀取塊長度,表示 MMC 卡的塊大小
- MMC version 5.1: MMC 卡版本,這里是版本 5.1
- High Capacity: Yes: 是否支持高容量,指示 MMC 卡是否支持高容量存儲
- Capacity: 7.3 GiB: 容量,表示 MMC 卡的總容量
- Bus Width: 4-bit: 總線寬度,表示 MMC 卡的數(shù)據(jù)傳輸總線寬度
- Erase Group Size: 512 KiB: 擦除組大小,表示 MMC 卡的擦除操作的最小單位大小
- HC WP Group Size: 8 MiB: 高容量寫保護組大小,表示高容量 MMC 卡的寫保護操作的最小單位大小
- User Capacity: 7.3 GiB WRREL: 用戶可用容量,表示用戶可用的存儲容量,考慮了保留區(qū)域和寫保護
- Boot Capacity: 4 MiB ENH: 引導區(qū)容量,表示 MMC 卡用于引導目的的存儲容量
- RPMB Capacity: 512 KiB ENH: RPMB(Replay Protected Memory Block)容量,表示 MMC 卡用于安全存儲和認證的特定存儲容量
- Boot area 0 is not write protected: 引導區(qū)域 0 未寫保護
- Boot area 1 is not write protected: 引導區(qū)域 1 未寫保護
5、mmc part 命令
mmc part命令用于查看當前 MMC 設備的分區(qū)信息,可以看到每個分區(qū)的起始扇區(qū)、大小和類型,如下所示:
= > mmc part
Partition Map for MMC device 1 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 20480 262144 e94b5ec8-01 0c
2 282624 14987264 e94b5ec8-02 83
輸出中的每一行表示一個分區(qū)的信息,包括以下字段:
- Part: 分區(qū)編號
- Start Sector: 分區(qū)的起始扇區(qū)
- Num Sectors: 分區(qū)的扇區(qū)數(shù)量
- UUID: 分區(qū)的唯一標識符
- Type: 分區(qū)的類型
從上面可以看出,此時 EMMC 有兩個分區(qū):
- 扇區(qū) 20480~ 262144 為第一個分區(qū)
- 扇區(qū) 282644~14987264 為第二個分區(qū)。
如果 EMMC 里面燒寫了 Linux 系統(tǒng)的話, EMMC 是有3 個分區(qū):
- 第 0 個分區(qū)存放 uboot,
- 第 1 個分區(qū)存放 Linux 鏡像文件和設備樹,
- 第 2 個分區(qū)存放根文件系統(tǒng)。
但是在上圖中只有兩個分區(qū),那是因為第 0 個分區(qū)沒有格式化,所以識別不出來,實際上第 0 個分區(qū)是存在的。一個新的 SD 卡默認只有一個分區(qū),那就是分區(qū) 0。
6、mmc read 命令
mmc read命令用于從 MMC(多媒體卡)設備讀取數(shù)據(jù)并將其加載到指定的內存地址。通過執(zhí)行 mmc read 命令,您可以從 MMC 設備的指定扇區(qū)開始讀取指定長度的數(shù)據(jù),并將其加載到內存中供后續(xù)使用。命令如下所示:
mmc read addr blk# cnt
每個參數(shù)的含義如下:
- addr 是數(shù)據(jù)讀取到 DRAM 中的地址
- blk 是要讀取的塊起始地址(十六進制),一個塊是 512字節(jié),這里的塊和扇區(qū)是一個意思,在 MMC 設備中我們通常說扇區(qū)
- cnt 是要讀取的塊數(shù)量(十六進制)
示例如下:
= > mmc read 0x80800000 0x600 0x10
MMC read: dev # 1, block # 1536, count 16 ... 16 blocks read: OK
從 EMMC 的第 1536(0x600)個塊開始,讀取 16(0x10)個塊的數(shù)據(jù)到 DRAM 的0X80800000 地址處。
7、mmc write 命令
mmc write命令用于將數(shù)據(jù)從內存寫入到 MMC 設備的指定扇區(qū)中。通過執(zhí)行 mmc write 命令,您可以將指定內存地址處的數(shù)據(jù)寫入到 MMC 設備的指定扇區(qū)中。命令如下所示:
mmc write addr blk# cnt
每個參數(shù)的含義如下:
- addr 是要寫入 MMC 中的數(shù)據(jù)在 DRAM 中的起始地址
- blk 是要寫入 MMC 的塊起始地址(十六進制)
- cnt 是要寫入的塊大小,一個塊為 512 字節(jié)
示例如下:
= > mmc write 0x80800000 0x2 0x32E
MMC write: dev # 1, block # 2, count 814 ... 814 blocks written: OK
向 eMMC 中寫入742 個塊,如果有小數(shù)的話就要加 1 個塊。使用命令“mmc write”從 eMMC 分區(qū) 0 第 2 個塊(扇區(qū))開始燒寫,一共燒寫 742(0x2E6)個塊。擴展一下,u-boot可以利用 mmc write更新eMMC中的uboot,可以使用如下命令:
mmc dev 1 0 //切換到 EMMC 分區(qū) 0
tftp 80800000 u-boot.imx //下載 u-boot.imx 到 DRAM
mmc write 80800000 2 32E //燒寫 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分區(qū)配置, EMMC 需要這一步!
注:沒事千萬不要寫 SD 卡或者 EMMC 的前兩個塊(扇區(qū)),里面保存著分區(qū)表!
8、mmc erase 命令
mmc erase命令用于在 MMC 設備上執(zhí)行擦除操作。通過執(zhí)行 mmc erase 命令,您可以擦除 MMC 設備上的指定扇區(qū)或分區(qū)。命令如下:
mmc erase blk# cnt
每個參數(shù)的含義如下:
- blk 為要擦除的起始塊
- cnt 是要擦除的數(shù)量
注:沒事不要用 mmc erase 來擦除 MMC 設備?。。?/strong>
請注意,具體可用的命令和選項可能會根據(jù)所使用的 U-Boot 版本和硬件平臺而有所不同。某些平臺和版本可能不支持此命令。在使用此命令之前,請確保您的 U-Boot 版本和硬件平臺支持它。您可以使用 U-Boot 的 help mmc 命令來獲取更多關于 mmc 命令的詳細信息和可用選項。
今天的內容到這就結束了,感謝大家的收看,如果覺得文章寫的還不錯,可以點擊“贊賞”,來鼓勵一下老王哦,當然,也可以點贊,收藏加關注哦!我們下期再見!
評論
查看更多