Share

Suporte para placa AM3352-SOM no kernel da Beaglebone

A placa AM3352-SOM da Olimex é um System On Module que contém um processador Sitara AM3352 Cortex-A8 que pode rodar a 1GHz, tem 512MB de memória DDR3 e que não possui um gerenciador de energia, diferente da Beaglebone Black, que tem um TPS65217C [1].

A Olimex também vende uma placa base, AM3352-SOM-EVB, integrada com a AM3352-SOM, que é mais completa. Alguns de seus atributos incluem:

    – Processador AM3352 Cortex-A8 que pode chegar a 1000MHz
    – Memória 512MB DDR3
    – Micro SD-card
    – Pinos para console via UART
    – LED indicador de alimentação
    – LED de status
    – 4 conectores GPIO de 40 pinos
    – 2 × interfaces Ethernet de 100MB
    – Saída VGA com conector DA-15
    – Conector para CAN
    – 4 × USB host
    – USB-OTG
    – 2 conectores UEXT para comunicação UART

O fato de a placa AM3352-SOM não ter um PMIC, diferente da Beaglebone como dito antes, trouxe vários problemas para a Olimex. Por um longo tempo eles não conseguiram “bootar” a placa usando o kernel da Beaglebone Black. O problema é que o bootloader da Beaglebone não inicia a placa se um PMIC não estiver presente, pois o bootloader envia requisições I2C e fica preso esperando por respostas. Veja a discussão aqui no fórum da Olimex [2]. Depois de muito esforço, Dimitar Gamishev (funcionário da Olimex) alterou o código do u-boot e parte do código do kernel usado por eles e finalmente conseguiram bootar a placa! Mas como a própria Olimex disse em seu fórum, a solução deles é ugly, que poderíamos chamar de gambiarra. Os Links do kernel e do u-boot usado por eles podem ser encontrados aqui: [3].

O problema de se ter um kernel particular é que ele fica pra trás com relação aos kernels “oficias” como, por exemplo, o kernel da Beaglebone/Beagleboard https://github.com/beagleboard/linux. Significa que os vários patches para corrigir problemas não estarão presentes num determinado kernel particular se ninguém estiver trabalhando constantemente nisso. É o caso do kernel da Olimex, pois eles não tem funcionários para isso. Apenas alguns poucos patches são submetidos por usuários da placa.

Levando tudo isso em consideração, comecei a trabalhar para bootar a AM3352-SOM usando o kernel da Beaglebone black. A solução foi de certa forma simples. Baseado em arquivo de devicetree chamado am335x-bone-common.dtsi, criou-se um novo chamado am335x-som-common.dtsi, para tornar o patch mais aceitável. E no arquivo am335x-olimex-som.dts foi feita uma pequena alteração para incluir a definição da placa. Depois recompilei o kernel com os novos arquivos de devicetree, testei e a placa deu boot normalmente! O detalhes do patch podem ser visto aqui: [4].

Um problema que permanece sem a solução é o do u-boot. Ainda é necessário usar a versão da Olimex para iniciar a placa. Vamos esperar para ver se alguém com conhecimento suficiente possa submeter um patch. Mas poder bootar a placa AM3352-SOM da Olimex usando o kernel da Beaglebone já é grande coisa.

Referências

[1] http://www.embarcados.com.br/hardware-beaglebone-black-controlando-o-pmic/
[2] https://www.olimex.com/forum/index.php?topic=3469.msg15438#msg15438
[3] https://www.olimex.com/forum/index.php?topic=4240.msg17960#msg17960
[4] https://github.com/beagleboard/linux/commit/30796bae3b6c17830e0a162c538f803530bf8fda

Translate »