Análise dos comandos de operação do cartão EMMC e SD do comando u-boot no sistema Linux

Hoje darei a você uma introdução detalhada ao comando u-boot e ao comando mmc para operações de EMMC e cartão SD. Espero que este artigo seja útil para todos.

O uboot suporta cartões EMMC e SD, portanto também fornece comandos de operação para cartões EMMC e SD. Geralmente acredita-se que EMMC e cartão SD são a mesma coisa, portanto não há nenhuma explicação especial. MMC é usado para se referir a EMMC e cartão SD.

O comando comumente usado no uboot para operar dispositivos MMC é “mmc”.

mmc é uma série de comandos, que podem ser seguidos por diferentes parâmetros. Digite "?mmc" na linha de comando do u-boot para visualizar os comandos relacionados ao mmc, como segue:

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

Como pode ser visto nos detalhes dos parâmetros listados acima, mmc seguido por diferentes parâmetros pode atingir funções diferentes, conforme mostrado abaixo:

Ordem Função
informações mmc Exibir informações detalhadas do dispositivo de cartão MMC/SD, incluindo capacidade, velocidade, etc.
leitura mmc Ler dados do cartão MMC/SD para o endereço de carga especificado
anfitriões mmc Grave os dados no endereço de carregamento especificado no setor especificado do cartão MMC/SD
apagar mmc Apague dados em setores especificados no cartão MMC/SD
nova varredura mmc Digitalize novamente os dispositivos de cartão MMC/SD para reconhecê-los novamente no U-Boot. A parte mmc exibe as informações da tabela de partição do dispositivo de cartão MMC/SD atualmente selecionado
desenvolvedor mmc Selecione e inicialize o dispositivo de cartão MMC/SD com o número especificado
lista mmc Liste informações sobre todos os dispositivos MMC detectados no sistema
mmc wp Defina o status de proteção contra gravação do cartão MMC/SD
partição mmc hw Operações de partição no cartão MMC/SD
mmc setdsr Defina o valor do registro de dados (DSR) do cartão MMC/SD

Os oito comandos mais comumente usados ​​no comando mmc são os seguintes:

  1. comando de informações mmc

  2. comando de nova varredura mmc

  3. comando de lista mmc

  4. comando mmcdev

  5. comando de peça mmc

  6. comando de leitura mmc

  7. comando de gravação mmc

  8. comando apagar mmc

1. comando de informações mmc

O comando mmc info é usado para exibir as informações relevantes do dispositivo MMC atualmente selecionado, incluindo número do dispositivo, ID do fabricante, OEM, nome do cartão, capacidade total, número total de setores, tamanho do bloco, velocidade de transmissão, informações de versão, se deve suportar alta capacidade (alta capacidade), etc., conforme mostrado abaixo:

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

Cada campo é explicado abaixo:

  • Dispositivo: FSL_SDHC: tipo de dispositivo, aqui está FSL_SDHC, indicando o controlador SD fornecido pela Freescale

  • ID do fabricante: 3: ID do fabricante, indicando o número de identificação do fabricante

  • OEM: 5344: Informações do OEM, indicando o número de identificação do fabricante do equipamento original

  • Nome: SC16G: nome do cartão MMC, aqui está SC16G

  • Velocidade do barramento: 49500000: velocidade do barramento, indicando a taxa de transmissão de dados

  • Modo: SD de alta velocidade (50 MHz): modo, indicando o modo de transmissão do cartão MMC, aqui está o modo SD de alta velocidade, a taxa de transmissão é de 50 MHz

  • Rd Block Len: 512: Leia o comprimento do bloco, indicando o tamanho do bloco do cartão MMC

  • Versão SD 3.0: versão do cartão SD, aqui está a versão 3.0

  • Alta capacidade: Sim: suporta alta capacidade, indicando se o cartão MMC suporta armazenamento de alta capacidade

  • Capacidade: 14,8 GiB: Capacidade, indicando a capacidade total do cartão MMC

  • Largura do barramento: 4 bits: largura do barramento, indicando a largura do barramento de transmissão de dados do cartão MMC

  • Tamanho do grupo de apagamento: 512 bytes: Tamanho do grupo de apagamento, indicando o tamanho mínimo da unidade da operação de apagamento do cartão MMC

As informações na saída podem variar dependendo dos dispositivos MMC e das versões do U-Boot presentes no sistema.

2. Comando de nova varredura mmc

O comando mmc rescan é usado para verificar novamente os dispositivos MMC no sistema e atualizar o número do dispositivo, capacidade, velocidade e outras informações. Isto é útil para atualizações de status de dispositivos após adicionar ou remover dispositivos MMC no U-Boot.

mmc rescan

3. comando de lista mmc

O comando mmc list é usado para listar dispositivos MMC detectados da seguinte forma:

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

Como pode ser visto acima, a placa de desenvolvimento atual possui dois dispositivos MMC:

  • FSL_SDHC:0 é cartão SD

  • FSL_SDHC:1(eMMC) é EMMC.

4. comando mmc dev

O comando mmc dev é usado para definir o dispositivo MMC selecionado como o dispositivo atual e usar o dispositivo em operações subsequentes. Isto é útil para selecionar o dispositivo para operar em um sistema onde existem vários dispositivos MMC. O uso do comando é o seguinte:

mmc dev [dev] [part]

Os significados dos parâmetros são os seguintes:

  • [dev] é usado para definir o número do dispositivo MMC a ser trocado

  • [parte] é o número da partição

[parte] O número da partição também pode ser omitido. Caso contrário, o padrão será a partição 0, conforme mostrado abaixo:

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

A mudança para eMMC foi bem-sucedida. mmc0 é o dispositivo MMC atual. Digite o comando "mmc info" para visualizar as informações do eMMC, conforme mostrado abaixo:

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

Cada campo é explicado abaixo:

  • Dispositivo: FSL_SDHC: Tipo de dispositivo, aqui indica o controlador SD fornecido pela Freescale

  • ID do fabricante: 15: ID do fabricante, indicando o número de identificação do fabricante

  • OEM: 0: Informações do OEM indicando o número de identificação do fabricante do equipamento original

  • Nome: 8GTF4R: nome do cartão MMC, aqui é "8GTF4R"

  • Velocidade do barramento: 49500000: Velocidade do barramento, indicando a taxa de transmissão de dados

  • Modo: MMC de alta velocidade (52 MHz): Modo, indicando o modo de transmissão em que o cartão MMC está, aqui está o modo de alta velocidade MMC, a taxa de transmissão é de 52 MHz

  • Rd Block Len: 512: Leia o comprimento do bloco, indicando o tamanho do bloco do cartão MMC

  • MMC versão 5.1: versão do cartão MMC, aqui está a versão 5.1

  • Alta capacidade: Sim: suporta alta capacidade, indicando se o cartão MMC suporta armazenamento de alta capacidade

  • Capacidade: 7,3 GiB: Capacidade, indicando a capacidade total do cartão MMC

  • Largura do barramento: 4 bits: largura do barramento, indicando a largura do barramento de transmissão de dados do cartão MMC

  • Tamanho do grupo de apagamento: 512 KiB: Tamanho do grupo de apagamento, indicando o tamanho mínimo da unidade da operação de apagamento do cartão MMC

  • Tamanho do grupo HC WP: 8 MiB: tamanho do grupo de proteção contra gravação de alta capacidade, indicando o tamanho mínimo da unidade para operações de proteção contra gravação em cartões MMC de alta capacidade

  • Capacidade do usuário: 7,3 GiB WRREL: Capacidade disponível do usuário, indicando a capacidade de armazenamento disponível ao usuário, levando em consideração áreas reservadas e proteção contra gravação

  • Capacidade de inicialização: 4 MiB ENH: Capacidade do setor de inicialização, indicando a capacidade de armazenamento do cartão MMC para fins de inicialização

  • Capacidade RPMB: 512 KiB ENH: capacidade RPMB (Replay Protected Memory Block), indicando a capacidade de armazenamento específica do cartão MMC para armazenamento e autenticação seguros

  • A área de inicialização 0 não está protegida contra gravação: A área de inicialização 0 não está protegida contra gravação

  • A área de inicialização 1 não está protegida contra gravação: A área de inicialização 1 não está protegida contra gravação

5. comando da peça mmc

O comando mmc part é usado para visualizar as informações da partição do dispositivo MMC atual. Você pode ver o setor inicial, tamanho e tipo de cada partição, conforme mostrado abaixo:

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

Cada linha na saída representa informações sobre uma partição e inclui os seguintes campos:

  • Parte: número da partição

  • Setor inicial: O setor inicial da partição

  • Num Setores: Número de setores na partição

  • UUID: identificador exclusivo da partição

  • Tipo: Tipo de partição

Como pode ser visto acima, o EMMC tem duas partições neste momento:

  • Os setores 20480~262144 são a primeira partição

  • Os setores 282644~14987264 são a segunda partição.

Se o sistema Linux estiver programado em EMMC, o EMMC possui 3 partições:

  • A 0ª partição armazena uboot,

  • A primeira partição armazena arquivos de imagem e árvores de dispositivos do Linux.

  • A segunda partição armazena o sistema de arquivos raiz.

Mas na imagem acima existem apenas duas partições, isso porque a 0ª partição não está formatada, portanto não pode ser reconhecida, na verdade, a 0ª partição existe. Um novo cartão SD possui apenas uma partição por padrão, que é a partição 0.

6. comando de leitura mmc

O comando mmc read é usado para ler dados do dispositivo MMC (placa multimídia) e carregá-los no endereço de memória especificado. Ao executar o comando mmc read, você pode ler os dados do comprimento especificado do setor especificado do dispositivo MMC e carregá-los na memória para uso posterior. O comando fica assim:

mmc read addr blk# cnt

O significado de cada parâmetro é o seguinte:

  • addr é o endereço onde os dados são lidos na DRAM

  • blk é o endereço inicial (hexadecimal) do bloco a ser lido. Um bloco tem 512 bytes. O bloco e o setor aqui significam a mesma coisa. Em dispositivos MMC, costumamos dizer setor

  • cnt é o número de blocos a serem lidos (hex)

Os exemplos são os seguintes:

=> mmc read 0x80800000 0x600 0x10

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

A partir do 1536º bloco (0x600) do EMMC, leia os dados de 16 (0x10) blocos para o endereço 0X80800000 da DRAM.

7. comando de gravação mmc

O comando mmc write é usado para gravar dados da memória no setor especificado do dispositivo MMC. Ao executar o comando mmc write, você pode gravar os dados no endereço de memória especificado no setor especificado do dispositivo MMC. O comando fica assim:

mmc write addr blk# cnt

O significado de cada parâmetro é o seguinte:

  • addr é o endereço inicial na DRAM dos dados a serem gravados no MMC.

  • blk é o endereço inicial do bloco a ser escrito no MMC (hexadecimal)

  • cnt é o tamanho do bloco a ser escrito, um bloco tem 512 bytes

Os exemplos são os seguintes:

=> mmc write 0x80800000 0x2 0x32E

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

Escreva 742 blocos no eMMC, se houver decimais, adicione 1 bloco. Utilize o comando "mmc write" para iniciar a programação a partir do 2º bloco (setor) da partição eMMC 0, e um total de 742 (0x2E6) blocos serão programados. Para expandir, o u-boot pode usar mmc write para atualizar o uboot no eMMC. Você pode usar o seguinte comando:

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 需要这一步!

Nota: Nunca grave nos dois primeiros blocos (setores) do cartão SD ou EMMC, que contém a tabela de partições!

8. Comando apagar mmc

O comando mmc erase é usado para executar uma operação de apagamento em um dispositivo MMC. Você pode apagar setores ou partições especificadas em um dispositivo MMC executando o comando mmc erase. O comando é o seguinte:

mmc erase blk# cnt

O significado de cada parâmetro é o seguinte:

  • blk é o bloco inicial a ser apagado

  • cnt é o número a ser apagado

Nota: Nunca use mmc erase para apagar dispositivos MMC! ! !

Observe que os comandos e opções específicos disponíveis podem variar dependendo da versão do U-Boot e da plataforma de hardware usada. Este comando pode não ser compatível com algumas plataformas e versões. Antes de usar este comando, certifique-se de que sua versão do U-Boot e plataforma de hardware o suportem. Você pode usar o comando mmc de ajuda do U-Boot para obter informações mais detalhadas e opções disponíveis sobre o comando mmc.

Este é o fim do conteúdo de hoje. Obrigado por assistir. Se você acha que o artigo não é ruim, clique em "Apreciar".

Guess you like

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