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 :
Banco | Endereço inicial | Endereço final | Tamanho | Dispositivo (s) |
---|---|---|---|---|
0x0 a 0xB | 0x00000000 | 0xBFFFFFFF | 4 x 256 MB = 3 GB | Controlador de memória DDR |
0xC | 0xC0000000 | 0xC0FFFFFF | 16 MB | Infraestrutura, Mixmode e sistema MCU |
0xC | 0xC1000000 | 0xC1FFFFFF | 16 MB | Sistema periférico |
0xC | 0xC2000000 | 0xC2FFFFFF | 16 MB | Sistema multimídia |
0xC | 0xC5000000 | 0xCFFFFFFF | 192 MB | Reservado |
0xD | 0xD0000000 | 0xDFFFFFFF | 256 MB | Sistema de modem |
0xE | 0xE0000000 | 0xEFFFFFFF | 256 MB | Reservado |
0xF | 0xF0000000 | 0xF000FFFF | 64 kB | SRAM no chip |
0xF | 0xF0010000 | 0xFFFEFFFF | Reservado | |
0xF | 0xF8000000 | 0xF800000C | 16 bytes | ID do chip, versão de hardware / software |
0xF | 0xF8000010 | 0xFFFEFFFF | Reservado | |
0xF | 0xFFFF0000 | 0xFFFFFFFF | 64 kB | ROM 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:
- Inicialize o UART1 (a primeira porta serial) para 8 bits, sem paridade, 1 stopbit e 9600/19200 baud (dependendo do relógio).
- Inicialize o armazenamento flash interno.
- Aguarde um
Start
comando por 150ms. Se nenhum comando START for recebido, carregue o Preloader na SRAM On-Chip e execute-o. - 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,0xFF
se 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.Write
e32 Bit Write
: Grave um único valor de 16 ou 32 bits em um endereço de memória de 32 bits.Read
e32 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.Jump
eJump 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!