• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-uboot常用命令之eMMC/SD卡命令

05/26 17:40
399
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

eMMC和SD卡(TF卡)是同一類(lèi)設(shè)備,以下命令二者是通用,本章節(jié)主要以eMMC舉例說(shuō)明命令的使用。

使用help mmc可以看到mmc相關(guān)命令列表以及其對(duì)應(yīng)命令用法:

=> help mmc

一、mmc dev

使用mmc list可以看到當(dāng)前系統(tǒng)掛載的所有mmc設(shè)備:

=> mmc list

FSL_SDHC: 0

FSL_SDHC: 1 (eMMC)

本系統(tǒng)的mmc設(shè)備有設(shè)備0和設(shè)備1,設(shè)備1是eMMC設(shè)備,設(shè)備0就是TF卡設(shè)備。

使用mmc dev命令可以查看當(dāng)前選中正在使用的mmc設(shè)備,mmc dev使用方法為:

mmc dev [dev] [part]

[dev]是指要選擇的設(shè)備;

[part]是指所選設(shè)備的分區(qū);

如果不加[dev]和[part]兩個(gè)參數(shù),則顯示當(dāng)前選中設(shè)備,如果不加[part]參數(shù),則默認(rèn)使用所選設(shè)備的0分區(qū)。

=> mmc dev

switch to partitions #0, OK

mmc1(part 0) is current device

當(dāng)前選中正在使用的是mmc1設(shè)備的0分區(qū),即eMMC Flash的0分區(qū),此處的0分區(qū)其實(shí)是指eMMC Flash的用戶分區(qū)(用戶分區(qū)的概念在以下mmc write章節(jié)會(huì)有說(shuō)明)。

使用mmc dev切換到使用TF卡設(shè)備:mmc dev 0:

=> mmc dev 0

switch to partitions #0, OK

mmc0 is current device

切換成功之后,現(xiàn)在使用的就是TF卡設(shè)備,此時(shí)使用的mmc命令都是對(duì)TF卡進(jìn)行的操作。為了使用eMMC進(jìn)行命令使用舉例演示,我們?cè)賹mc設(shè)備更換為eMMC:

mmc dev 1:

=> mmc dev 1

switch to partitions #0, OK

mmc1(part 0) is current device

二、mmc info

該命令是查看當(dāng)前mmc設(shè)備相關(guān)信息:mmc info或者mmcinfo:

=> mmc info

Device: FSL_SDHC

Manufacturer ID: 45

OEM: 100

Name: DG400

Tran Speed: 52000000

Rd Block Len: 512

MMC version 4.0

High Capacity: Yes

Capacity: 7.3 GiB

Bus Width: 8-bit

Erase Group Size: 512 KiB

三、mmc read

mmc read命令是讀mmc中的數(shù)據(jù)到內(nèi)存地址。

使用方法為mmc read addr blk# cnt:

addr是將要存放數(shù)據(jù)的內(nèi)存地址;

blk#是要讀的mmc的起始?jí)K號(hào);

cnt是塊數(shù)目;

舉例,從mmc第5塊開(kāi)始讀取2塊的數(shù)據(jù)到內(nèi)存0x80800000:mmc read 80800000 5 2:

=> mmc read 80800000 5 2

MMC read: dev # 1, block # 5, count 2 ... 2 blocks read: OK

每一塊是512個(gè)字節(jié),讀取2塊,就是讀取2*512=1024個(gè)字節(jié)。

四、mmc write

顧名思義,mmc write是向mmc中寫(xiě)入數(shù)據(jù),mmc write addr blk# cnt:

addr是存放數(shù)據(jù)的內(nèi)存地址;

blk#是要寫(xiě)的mmc的起始?jí)K號(hào);

cnt是塊數(shù)目;

舉例,我們現(xiàn)在使用mmc write將最新編譯的u-boot.imx更新到mmc中。

第一步,我們需要先將新的u-boot.imx存放到內(nèi)存中,前面章節(jié)我們講過(guò)使用tftp將Ubuntu的tftp共享文件夾中的文件下載到內(nèi)存中,我們現(xiàn)在就使用tftp將u-boot.imx文件下載到內(nèi)存0x80800000地址。然后第二步,就是用mmc write命令將u-boot.imx寫(xiě)入到mmc的指定uboot分區(qū)中。

我們通過(guò)操作eMMC設(shè)備演示mmc write命令的使用,在進(jìn)行操作之前,我們先簡(jiǎn)單了解一下eMMC分區(qū)的相關(guān)知識(shí),eMMC設(shè)備一般是由BOOT Area Patrtition1、BOOT Area Patrtition2、RPMB Partition、General Purpose Partitions(可分4個(gè)) 、User Data Area這幾個(gè)物理分區(qū)組成,對(duì)于RPMB Partition、General Purpose Partitions這兩種分區(qū)我們沒(méi)有涉及到這里不作介紹,我們涉及到的是BOOT Area Patrtition1、BOOT Area Patrtition2、User Data Area,其中BOOT Area Patrtition1、BOOT Area Patrtition2是存放uboot鏡像的分區(qū),兩者選其一作為實(shí)際存放uboot的分區(qū),ElfBoard使用的是BOOT Area Patrtition1;User Data Area (UDA)用戶分區(qū)通常是eMMC中最大的一個(gè)分區(qū),是實(shí)際產(chǎn)品中最主要的存儲(chǔ)區(qū)域,ElfBoard在燒寫(xiě)時(shí),會(huì)對(duì)此用戶分區(qū)進(jìn)行軟件分區(qū),分成RAW、fat和ext3格式的三個(gè)邏輯分區(qū)。

了解了eMMC分區(qū)的相關(guān)概念之后,我們就可以進(jìn)行如下操作,驗(yàn)證測(cè)試mmc write命令。按照前面tftp命令章節(jié),配置好tftp網(wǎng)絡(luò)環(huán)境之后,我們重新編譯一個(gè)uboot.imx鏡像,并且放入到Ubuntu的tftp共享文件夾中,并保證網(wǎng)絡(luò)連接狀態(tài)良好,在開(kāi)發(fā)板使用tftp將新的uboot鏡像下載到內(nèi)存0x80800000處:

=>?tftp 80800000 u-boot.imx

下載完成,之后使用mmc write寫(xiě)入到eMMC分區(qū)BOOT Area Patrtition1中,根據(jù)mmc write addr blk# cnt使用方法,addr=80800000,blk#是要燒寫(xiě)的起始地址, uboot在eMMC boot分區(qū)的偏移為1K=2*512字節(jié),即 blk#=2,cnt是燒寫(xiě)的數(shù)據(jù)長(zhǎng)度,根據(jù)tftp傳輸完成之后的打印信息,知道uboot.imx鏡像大小為429056字節(jié)=838*512字節(jié),所以cnt應(yīng)該等于838,十六進(jìn)制為0x346。

選擇mmc設(shè)備及BOOT Area Patrtition1分區(qū)(最后一個(gè)參數(shù)為“1”,表示BOOT Area Patrtition1分區(qū),為“2”時(shí),表示選擇的是BOOT Area Patrtition2分區(qū),為“0”時(shí),表示選擇的是UDA用戶分區(qū)):

=> mmc dev 1 1

switch to partitions #1, OK

mmc1(part 1) is current device

=>?mmc write 80800000 2 346

MMC write: dev # 1, block # 2, count 838 ... 838 blocks written: OK

燒寫(xiě)完成之后,使用reset開(kāi)發(fā)板,根據(jù)uboot編譯時(shí)間可以看出,uboot已經(jīng)替換為剛剛編譯的:

五、mmc erase

mmc erase是擦除mmc中數(shù)據(jù)。使用方法:

mmc erase blk# cnt,其中blk#是要擦除的mmc起始地址,cnt要擦除的塊數(shù)量。一般情況很少使用mmc erase命令進(jìn)行mmc擦除操作。

相關(guān)推薦