EMMC- und SD-Karten-Betriebsbefehlsanalyse des U-Boot-Befehls im Linux-System

Heute gebe ich Ihnen eine detaillierte Einführung in die Befehle u-boot und mmc für EMMC- und SD-Kartenvorgänge. Ich hoffe, dieser Artikel ist für alle hilfreich.

uboot unterstützt EMMC- und SD-Karten und stellt daher auch Betriebsbefehle für EMMC- und SD-Karten bereit. Es wird allgemein angenommen, dass EMMC und SD-Karte dasselbe sind, daher gibt es keine spezielle Erklärung. Mit MMC werden EMMC und SD-Karte bezeichnet.

Der in uboot häufig verwendete Befehl zur Bedienung von MMC-Geräten ist „mmc“.

mmc ist eine Reihe von Befehlen, denen verschiedene Parameter folgen können. Geben Sie „?mmc“ in die U-Boot-Befehlszeile ein, um mmc-bezogene Befehle wie folgt anzuzeigen:

=> ? 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

Aus den oben aufgeführten Parameterdetails ist ersichtlich, dass mmc, gefolgt von verschiedenen Parametern, unterschiedliche Funktionen erreichen kann, wie unten gezeigt:

Befehl Funktion
MMC-Info Zeigen Sie detaillierte Informationen zum MMC-/SD-Kartengerät an, einschließlich Kapazität, Geschwindigkeit usw.
mmc lesen Daten von der MMC/SD-Karte an die angegebene Ladeadresse lesen
mmc wirte Schreiben Sie die Daten an der angegebenen Ladeadresse in den angegebenen Sektor der MMC/SD-Karte
mmc löschen Daten in bestimmten Sektoren auf der MMC/SD-Karte löschen
MMC erneut scannen MMC/SD-Kartengeräte erneut scannen, um sie in U-Boot erneut zu identifizieren. Der mmc-Teil zeigt die Partitionstabelleninformationen des aktuell ausgewählten MMC/SD-Kartengeräts an
mmc-Entwickler Wählen Sie das MMC-/SD-Kartengerät aus und initialisieren Sie es mit der angegebenen Nummer
MMC-Liste Listen Sie Informationen zu allen im System erkannten MMC-Geräten auf
mmc wp Legen Sie den Schreibschutzstatus der MMC/SD-Karte fest
mmc hwpartition Partitionsvorgänge auf MMC/SD-Karte
mmc setdsr Stellen Sie den Wert des Datenregisters (DSR) der MMC/SD-Karte ein

Die acht am häufigsten verwendeten Befehle im mmc-Befehl sind wie folgt:

  1. mmc-Info-Befehl

  2. Befehl „mmc rescan“.

  3. mmc list-Befehl

  4. mmcdev-Befehl

  5. mmc-Teilbefehl

  6. MMC-Lesebefehl

  7. mmc-Schreibbefehl

  8. mmc-Löschbefehl

1. MMC-Info-Befehl

Mit dem Befehl „mmc info“ werden relevante Informationen zum aktuell ausgewählten MMC-Gerät angezeigt, einschließlich Gerätenummer, Hersteller-ID, OEM, Kartenname, Gesamtkapazität, Gesamtzahl der Sektoren, Blockgröße, Übertragungsgeschwindigkeit, Versionsinformationen und ob die Kapazität hoch ist unterstützt wird (Hohe Kapazität) usw., wie unten gezeigt:

=> 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

Jedes Feld wird im Folgenden erläutert:

  • Gerät: FSL_SDHC: Gerätetyp, hier FSL_SDHC, der den von Freescale bereitgestellten SD-Controller angibt

  • Hersteller-ID: 3: Hersteller-ID, Angabe der Identifikationsnummer des Herstellers

  • OEM: 5344: OEM-Informationen, die die Identifikationsnummer des Erstausrüsters angeben

  • Name: SC16G: MMC-Kartenname, hier ist SC16G

  • Busgeschwindigkeit: 49500000: Busgeschwindigkeit, die die Datenübertragungsrate angibt

  • Modus: SD High Speed ​​​​(50 MHz): Modus, der den Übertragungsmodus der MMC-Karte angibt. Hier ist der SD High Speed ​​​​Modus, die Übertragungsrate beträgt 50 MHz

  • Rd Block Len: 512: Blocklänge lesen, Angabe der Blockgröße der MMC-Karte

  • SD-Version 3.0: SD-Kartenversion, hier ist Version 3.0

  • Hohe Kapazität: Ja: Gibt an, ob eine hohe Kapazität unterstützt werden soll. Dies gibt an, ob die MMC-Karte Speicher mit hoher Kapazität unterstützt

  • Kapazität: 14,8 GiB: Kapazität, die die Gesamtkapazität der MMC-Karte angibt

  • Busbreite: 4 Bit: Busbreite, die die Datenübertragungsbusbreite der MMC-Karte angibt

  • Löschgruppengröße: 512 Bytes: Löschgruppengröße, die die minimale Einheitsgröße des MMC-Kartenlöschvorgangs angibt

Die Informationen in der Ausgabe können je nach den im System vorhandenen MMC-Geräten und U-Boot-Versionen variieren.

2. MMC-Rescan-Befehl

Der Befehl mmc rescan wird verwendet, um die MMC-Geräte im System erneut zu scannen und die Gerätenummer, Kapazität, Geschwindigkeit und andere Informationen zu aktualisieren. Dies ist nützlich für Gerätestatusaktualisierungen nach dem Hinzufügen oder Entfernen von MMC-Geräten in U-Boot.

mmc rescan

3. mmc list-Befehl

Mit dem Befehl mmc list werden erkannte MMC-Geräte wie folgt aufgelistet:

=> mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1

Wie aus dem Obigen ersichtlich ist, verfügt das aktuelle Entwicklungsboard über zwei MMC-Geräte:

  • FSL_SDHC:0 ist eine SD-Karte

  • FSL_SDHC:1(eMMC) ist EMMC.

4. mmc dev-Befehl

Der Befehl mmc dev wird verwendet, um das ausgewählte MMC-Gerät als aktuelles Gerät festzulegen und das Gerät in nachfolgenden Vorgängen zu verwenden. Dies ist nützlich, um das Gerät auszuwählen, das in einem System betrieben werden soll, in dem mehrere MMC-Geräte vorhanden sind. Die Befehlsverwendung ist wie folgt:

mmc dev [dev] [part]

Die Parameterbedeutungen sind wie folgt:

  • Mit [dev] wird die umzuschaltende MMC-Gerätenummer eingestellt

  • [Teil] ist die Partitionsnummer

[Teil] Die Partitionsnummer kann auch weggelassen werden. Andernfalls wird standardmäßig Partition 0 verwendet, wie unten gezeigt:

=> mmc dev 1    /*切换到EMMC,0为SD卡, 1为eMMC*/
switch to partitions #0, OK
mmc1(part 0) is current device

Der Wechsel zu eMMC ist erfolgreich. mmc0 ist das aktuelle MMC-Gerät. Geben Sie den Befehl „mmc info“ ein, um die eMMC-Informationen anzuzeigen, wie unten gezeigt:

=> 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

Jedes Feld wird im Folgenden erläutert:

  • Gerät: FSL_SDHC: Gerätetyp, hier wird der von Freescale bereitgestellte SD-Controller angezeigt

  • Hersteller-ID: 15: Hersteller-ID, Angabe der Identifikationsnummer des Herstellers

  • OEM: 0: OEM-Informationen, die die Identifikationsnummer des Erstausrüsters angeben

  • Name: 8GTF4R: MMC-Kartenname, hier ist „8GTF4R“

  • Busgeschwindigkeit: 49500000: Busgeschwindigkeit, die die Datenübertragungsrate angibt

  • Modus: MMC High Speed ​​(52 MHz): Modus, der den Übertragungsmodus angibt, in dem sich die MMC-Karte befindet. Hier ist der MMC-Hochgeschwindigkeitsmodus, die Übertragungsrate beträgt 52 MHz

  • Rd Block Len: 512: Blocklänge lesen, Angabe der Blockgröße der MMC-Karte

  • MMC-Version 5.1: MMC-Kartenversion, hier ist Version 5.1

  • Hohe Kapazität: Ja: Gibt an, ob eine hohe Kapazität unterstützt werden soll. Dies gibt an, ob die MMC-Karte Speicher mit hoher Kapazität unterstützt

  • Kapazität: 7,3 GiB: Kapazität, die die Gesamtkapazität der MMC-Karte angibt

  • Busbreite: 4 Bit: Busbreite, die die Datenübertragungsbusbreite der MMC-Karte angibt

  • Löschgruppengröße: 512 KiB: Löschgruppengröße, die die minimale Einheitengröße des MMC-Kartenlöschvorgangs angibt

  • HC WP-Gruppengröße: 8 MiB: Schreibschutzgruppengröße mit hoher Kapazität, die die minimale Einheitengröße für Schreibschutzvorgänge auf MMC-Karten mit hoher Kapazität angibt

  • Benutzerkapazität: 7,3 GiB WRREL: Vom Benutzer verfügbare Kapazität, die die dem Benutzer zur Verfügung stehende Speicherkapazität unter Berücksichtigung reservierter Bereiche und Schreibschutz angibt

  • Boot-Kapazität: 4 MiB ENH: Boot-Sektor-Kapazität, die die Speicherkapazität der MMC-Karte für Boot-Zwecke angibt

  • RPMB-Kapazität: 512 KiB ENH: RPMB-Kapazität (Replay Protected Memory Block), die die spezifische Speicherkapazität der MMC-Karte für sichere Speicherung und Authentifizierung angibt

  • Boot-Bereich 0 ist nicht schreibgeschützt: Boot-Bereich 0 ist nicht schreibgeschützt

  • Boot-Bereich 1 ist nicht schreibgeschützt: Boot-Bereich 1 ist nicht schreibgeschützt

5. MMC-Teilbefehl

Mit dem Befehl mmc part werden die Partitionsinformationen des aktuellen MMC-Geräts angezeigt. Sie können den Startsektor, die Größe und den Typ jeder Partition sehen, wie unten gezeigt:

=> 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

Jede Zeile in der Ausgabe stellt Informationen zu einer Partition dar und enthält die folgenden Felder:

  • Teil: Partitionsnummer

  • Startsektor: Der Startsektor der Partition

  • Num Sectors: Anzahl der Sektoren in der Partition

  • UUID: Eindeutige Kennung der Partition

  • Typ: Art der Partition

Wie aus dem Obigen ersichtlich ist, verfügt EMMC derzeit über zwei Partitionen:

  • Die Sektoren 20480 bis 262144 sind die erste Partition

  • Die Sektoren 282644~14987264 sind die zweite Partition.

Wenn das Linux-System in EMMC programmiert ist, verfügt EMMC über 3 Partitionen:

  • Die 0. Partition speichert uboot,

  • Die erste Partition speichert Linux-Imagedateien und Gerätebäume.

  • Die zweite Partition speichert das Root-Dateisystem.

Im Bild oben sind jedoch nur zwei Partitionen zu sehen. Das liegt daran, dass die 0. Partition nicht formatiert ist und daher nicht erkannt werden kann. Tatsächlich existiert die 0. Partition. Eine neue SD-Karte hat standardmäßig nur eine Partition, nämlich Partition 0.

6. MMC-Lesebefehl

Mit dem Befehl „mmc read“ werden Daten von einem MMC-Gerät (MultiMedia Card) gelesen und in die angegebene Speicheradresse geladen. Durch Ausführen des mmc-Lesebefehls können Sie Daten einer bestimmten Länge beginnend in einem bestimmten Sektor des MMC-Geräts lesen und zur späteren Verwendung in den Speicher laden. Der Befehl sieht so aus:

mmc read addr blk# cnt

Die Bedeutung jedes Parameters ist wie folgt:

  • addr ist die Adresse, an der Daten in den DRAM eingelesen werden

  • blk ist die Startadresse des zu lesenden Blocks (hexadezimal). Ein Block ist 512 Bytes groß. Block und Sektor haben hier die gleiche Bedeutung. Bei MMC-Geräten sagen wir normalerweise Sektor

  • cnt ist die Anzahl der zu lesenden Blöcke (hex)

Beispiele sind wie folgt:

=> mmc read 0x80800000 0x600 0x10

MMC read: dev # 1, block # 1536, count 16 ... 16 blocks read: OK

Lesen Sie ab dem 1536. (0x600) Block des EMMC die Daten von 16 (0x10) Blöcken zur 0X80800000-Adresse des DRAM.

7. MMC-Schreibbefehl

Mit dem Befehl „mmc write“ werden Daten aus dem Speicher in den angegebenen Sektor des MMC-Geräts geschrieben. Durch Ausführen des mmc-Schreibbefehls können Sie die Daten an der angegebenen Speicheradresse in den angegebenen Sektor des MMC-Geräts schreiben. Der Befehl sieht so aus:

mmc write addr blk# cnt

Die Bedeutung jedes Parameters ist wie folgt:

  • addr ist die Startadresse im DRAM der Daten, die in MMC geschrieben werden sollen.

  • blk ist die Startadresse des Blocks, der auf die MMC geschrieben werden soll (hexadezimal)

  • cnt ist die zu schreibende Blockgröße, ein Block ist 512 Bytes groß

Beispiele sind wie folgt:

=> mmc write 0x80800000 0x2 0x32E

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

Schreiben Sie 742 Blöcke in eMMC. Wenn Dezimalstellen vorhanden sind, fügen Sie 1 Block hinzu. Verwenden Sie den Befehl „mmc write“, um die Programmierung ab dem 2. Block (Sektor) der eMMC-Partition 0 zu starten. Insgesamt werden 742 (0x2E6) Blöcke programmiert. Zum Erweitern kann U-Boot MMC Write verwenden, um Uboot in eMMC zu aktualisieren. Sie können den folgenden Befehl verwenden:

mmc dev 1 0                  //切换到 EMMC 分区 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         //分区配置, EMMC 需要这一步!

Hinweis: Schreiben Sie niemals in die ersten beiden Blöcke (Sektoren) der SD-Karte oder EMMC, die die Partitionstabelle enthält!

8. MMC-Löschbefehl

Der Befehl „mmc erase“ wird verwendet, um einen Löschvorgang auf einem MMC-Gerät durchzuführen. Sie können bestimmte Sektoren oder Partitionen auf einem MMC-Gerät löschen, indem Sie den Befehl „mmc erase“ ausführen. Der Befehl lautet wie folgt:

mmc erase blk# cnt

Die Bedeutung jedes Parameters ist wie folgt:

  • blk ist der Startblock, der gelöscht werden soll

  • cnt ist die zu löschende Zahl

Hinweis: Verwenden Sie niemals mmc erase, um MMC-Geräte zu löschen! ! !

Bitte beachten Sie, dass die spezifischen verfügbaren Befehle und Optionen je nach U-Boot-Version und verwendeter Hardwareplattform variieren können. Dieser Befehl wird auf einigen Plattformen und Versionen möglicherweise nicht unterstützt. Bevor Sie diesen Befehl verwenden, stellen Sie sicher, dass Ihre U-Boot-Version und Hardwareplattform ihn unterstützen. Sie können den Befehl „help mmc“ von U-Boot verwenden, um detailliertere Informationen und verfügbare Optionen zum Befehl „mmc“ zu erhalten.

Dies ist das Ende des heutigen Inhalts. Vielen Dank fürs Zuschauen. Wenn Sie der Meinung sind, dass der Artikel nicht schlecht ist, können Sie auf „Schätzen“ klicken.

Ich denke du magst

Origin blog.csdn.net/weixin_41114301/article/details/132774974
Empfohlen
Rangfolge