Porta IMX6ULL - EMMC e comandos de leitura e gravação de arquivos

1. EMMC e comandos de operação de arquivo
 

Geralmente acredita-se que EMMC e cartão SD são a mesma coisa, então não há nenhuma explicação especial. Este artigo usa MMC para se referir a EMMC e cartão SD.

O comando comumente usado para operar dispositivos MMC no uboot é " mmc " . O comando mmc é uma série de comandos, que podem ser seguidos por diferentes parâmetros.

Este artigo aprende principalmente os comandos de operação de arquivo relacionados ao EMMC: comando de leitura de dados e comando de gravação de dados.

2. Comando de operação de arquivo EMMC

1. comando de leitura mmc

O comando mmc read é usado para ler os dados do dispositivo mmc, o formato do comando é o seguinte:

mmc read addr blk# cnt

addr é o endereço onde os dados são lidos na DRAM, blk é o endereço inicial do bloco a ser lido (hexadecimal) e um bloco é 512

bytes, cnt é o número de blocos a serem lidos (em hexadecimal).

Bloco: O bloco e o setor aqui significam a mesma coisa.Nos dispositivos MMC, costumamos dizer setor.

Por exemplo, partindo do bloco 1536 (0x600) do EMMC, leia os dados de 16 (0x10) blocos para o endereço 0X80800000 da DRAM, o comando é o seguinte:

mmc dev 1 0 //切换到 MMC 分区 0
mmc read 80800000 600 10 //读取数据

O resultado é o seguinte:

=> mmc dev 1 0
switch to partitions #0, OK
mmc1(part 0) is current device
=> mmc read 80800000 600 10

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

Aqui ainda não conseguimos ver se a leitura está correta ou não, verifique os dados lidos em 0x80800000 através do comando md.b.

 2. comando de gravação mmc

O comando mmc write é para gravar dados no dispositivo MMC.

O formato do comando é o seguinte:

mmc write addr blk# cnt

addr é o endereço inicial dos dados a serem gravados no MMC na DRAM, blk é o endereço inicial do bloco a ser gravado no MMC

(hexadecimal), cnt é o tamanho do bloco a ser gravado, um bloco tem 512 bytes.

Por exemplo, você pode usar o comando "mmc write" para atualizar o uboot. Dizemos que o uboot geralmente é armazenado em EMMC (se a placa principal for um chip EMMC) ou cartão SD.

O método específico é o seguinte:

Idéia geral: Baixe o novo u-boot.bin para a DRAM da placa de desenvolvimento por meio do comando nfs ou tftp e, em seguida, use o comando "mmc write" para gravá-lo no dispositivo MMC.

(1) Primeiro, verifique a versão atual do uboot na placa de desenvolvimento e digite o seguinte comando:

=> version

U-Boot 2016.03 (Jul 02 2023 - 14:37:52 +0800)
arm-linux-gnueabihf-gcc (Linaro GCC 4.9-2017.01) 4.9.4
GNU ld (Linaro_Binutils-2017.01) 2.24.0.20141017 Linaro 2014_11-3-git

Pode-se ver que o tempo de compilação do uboot no dispositivo atual é 14:37 em 2 de julho de 2023.

(2) Segundo, recompile um arquivo uboot.imx. Digite o arquivo de código-fonte uboot no sistema ubuntu e compile-o.

Do seguinte modo:

(3) Faça o download do arquivo u-boot.imx compilado para a DRAM da placa de desenvolvimento por meio do serviço NFS ou tftp, aqui use o serviço tftp para fazer o download.

Copie o arquivo u-boot.imx para a pasta /home/wangtian/linux/tftp_file.

Entre no modo de comando uboot da placa de desenvolvimento e baixe o arquivo u-boot.imx através do tftp.

A premissa de usar o serviço tftp: você deve garantir que a placa de desenvolvimento possa executar ping no sistema ubuntu, os resultados são os seguintes:

=> ping 192.168.1.66
Using FEC1 device
host 192.168.1.66 is alive

Baixe u-boot.imx para a placa de desenvolvimento. Faça o seguinte:

=> tftp 80800000 u-boot.imx
Using FEC1 device
TFTP from server 192.168.1.66; our IP address is 192.168.1.50
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #############################
	 641.6 KiB/s
done
Bytes transferred = 412672 (64c00 hex)

Pode-se ver que o uboot foi baixado para o endereço a partir de 0x80800000 da DRAM da placa de desenvolvimento.

O tamanho de u-boot.imx é 412672 bytes, 412672 / 512 = 806, então precisamos escrever 806 (hexadecimal é 0x0326) blocos no cartão SD, se houver um decimal, precisamos adicionar 1 bloco.

Use o comando "mmc write" para iniciar a programação a partir do segundo bloco (setor) da partição 0 do cartão SD, a operação é a seguinte:

=> mmc write 80800000 2 326

MMC write: dev # 0, block # 2, count 806 ... 806 blocks written: OK

(4) Desligue a placa de desenvolvimento, defina o interruptor DIP para inicializar a partir do cartão SD e, em seguida, ligue para entrar no modo de comando uboot da placa de desenvolvimento.

O resultado é o seguinte:

U-Boot 2016.03 (Jul 07 2023 - 17:11:27 +0800)

CPU:   Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 45C
Reset cause: POR
Board: I.MX6U ALPHA|MINI
I2C:   ready
DRAM:  256 MiB
NAND:  512 MiB
MMC:   FSL_SDHC: 0
In:    serial
Out:   serial
Err:   serial
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0

Pode-se observar que o tempo de compilação do uboot é 7 de julho de 2023, ou seja, mudou. Isso significa que o comando "mmc write" grava com sucesso o uboot no cartão SD.

Lembre-se: Nunca escreva nos dois primeiros blocos (setores) do cartão SD ou EMMC, onde a tabela de partições está armazenada!

Acho que você gosta

Origin blog.csdn.net/wojiaxiaohuang2014/article/details/131602617
Recomendado
Clasificación