Detalhes do MediaTek: inicialização do SoC

Decidi escrever tudo o que sei sobre os SoCs da MediaTek, talvez alguém possa inventar um truque legal. As informações a seguir foram verificadas no chip quad-core MT6582.

NOTA: Essas informações foram obtidas de várias fontes e através de engenharia reversa. Não tome isso como referência!

Mapa de memória

Retirado da folha de dados do MT6575 :

BancoEndereço inicialEndereço finalTamanhoDispositivo (s)
0x0 a 0xB0x000000000xBFFFFFFF4 x 256 MB = 3 GBControlador de memória DDR
0xC0xC00000000xC0FFFFFF16 MBInfraestrutura, Mixmode e sistema MCU
0xC0xC10000000xC1FFFFFF16 MBSistema periférico
0xC0xC20000000xC2FFFFFF16 MBSistema multimídia
0xC0xC50000000xCFFFFFFF192 MBReservado
0xD0xD00000000xDFFFFFFF256 MBSistema de modem
0xE0xE00000000xEFFFFFFF256 MBReservado
0xF0xF00000000xF000FFFF64 kBSRAM no chip
0xF0xF00100000xFFFEFFFFReservado
0xF0xF80000000xF800000C16 bytesID do chip, versão de hardware / software
0xF0xF80000100xFFFEFFFFReservado
0xF0xFFFF00000xFFFFFFFF64 kBROM de inicialização

ROM de inicialização

Depois que a CPU se inicializou, o controlador SRAM interno envia uma instrução de salto para endereçar 0xFFFF0000. Esta é a ROM de inicialização que todos os chips vêm, o conteúdo não pode ser alterado.

A ROM de inicialização contém um pequeno pedaço do código da máquina ARMv7 de 32 bits que executa as seguintes etapas:

  1. Inicialize o UART1 (a primeira porta serial) para 8 bits, sem paridade, 1 stopbit e 9600/19200 baud (dependendo do relógio).
  2. Inicialize o armazenamento flash interno.
  3. Aguarde um Startcomando por 150ms. Se nenhum comando START for recebido, carregue o Preloader na SRAM On-Chip e execute-o.
  4. Interprete os comandos enviados pelo host, até que um JUMP seja emitido para continuar a execução em outro local. Isso geralmente é usado para baixar um Preloader no flash e depois inicializá-lo.

A ROM de inicialização suporta os seguintes comandos:

  • Start: Sinaliza que há um host externo conectado e impede que a ROM de inicialização seja inicializada a partir do flash.
  • Version: Retorna a versão de segurança da ROM de inicialização, 0xFFse não suportar segurança.
  • Serial Link: Executa algum tipo de autenticação para verificar se a ferramenta usada pelo host é “genuína”. Se a ROM de inicialização oferecer suporte à segurança, a disponibilidade de outros comandos será restringida até que esse comando seja concluído.
  • Write32 Bit Write: Grave um único valor de 16 ou 32 bits em um endereço de memória de 32 bits.
  • Read32 Bit Read: Leia um único valor de 16 ou 32 bits de um endereço de memória de 32 bits.
  • Checksum: Pega um endereço de memória de 32 bits e um campo de comprimento de 32 bits e calcula a soma de verificação XOR do intervalo especificado.
  • JumpJump secure: Continua a execução no local especificado do endereço de memória de 32 bits. A versão segura terá dois valores adicionais, um endereço de memória de assinatura de 32 bits e um comprimento de assinatura de 32 bits, que serão usados ​​pela ROM de inicialização para verificar a validade do programa no endereço de destino do salto.

Não sei se o UART1 está conectado à placa de circuito impresso no Aquaris E4.5; ele pode estar conectado à entrada de fone de ouvido.

No próximo artigo, falarei sobre o Preloader.

Se você souber melhor e / ou algo mudou, me encontre no Launchpad.net ou no Freenode IRC e entre em contato!

Deixe um comentário