Primeiros passos com Apalis i.MX6 e Ixora da Toradex

- por Sergio Prado

Categorias: Hardware, Yocto Project Tags: , , ,

Apalis é uma linha de computadores em módulo (COM) da Toradex, projetada para ser independente de arquitetura de CPU, atualmente com suporte às famílias de SoC Tegra da Nvidia e i.MX da Freescale (agora NXP).

O módulo Apalis i.MX6 possui quatro versões diferentes, que variam de 2 a 4 núcleos de CPU ARM Cortex-A9 rodando de 800MHz à 1GHz, 512MB à 2GB de memória RAM, GPU Vivante GC2000 e decodificação de vídeo em hardware. Todos os modelos possuem integrado uma memória flash (eMMC) de 4GB, além do suporte à diversos barramentos de comunicação (PCIe, USB, I2C, SPI, UART, IrDA, PWD, GPIO, Ethernet, SATA, SDIO, CAN) e interfaces multimídia (HDMI, VGA, RGB, câmera, áudio).

apalis

Não dá pra fazer muita coisa com um módulo sem uma placa base. Então a Toradex disponibiliza duas placas de suporte, a Apalis Evaluation Board e a Ixora Carrier Board, para auxiliar na prototipação e no desenvolvimento de projetos com os módulos Apalis.

A Ixora é relativamente pequena, mas possui diversos recursos e interfaces para facilitar a prototipação ou mesmo seu uso em um produto final, incluindo duas interfaces USB Host 3.0 e uma USB OTG, mini PCIe com conector para SIM card, I2C, SPI, três UARTs, quatro PWMs, até 40 GPIOs, quatro conversores analógico/digital, micro SDCARD, Ethernet gigabit, SATA, duas interfaces de barramento CAN, saídas multimídia (HDMI, LVDS, TFT, câmera, S/PDIF, áudio analógico), além de um RTC externo. O datasheet completo da placa Ixora está disponível no site da Toradex.

ixora

Para auxiliar no desenvolvimento de projetos com estas plataformas, a Toradex fornece soluções de software baseadas no kernel Linux e no Windows Embedded Compact.

O BSP para construir uma distribuição GNU/Linux para esta plataforma é baseado nas ferramentas do Yocto Project, e atualmente está com suporte oficial na camada meta-fsl-arm-extra da comunidade da Freescale (agora NXP).

CONSTRUINDO A DISTRIBUIÇÃO

Todos os testes foram realizados em uma máquina com o sistema operacional Ubuntu 14.04 64 bits.

O primeiro passo é preparar o ambiente de desenvolvimento para o Yocto Project. Para isso, dê uma olhada no Yocto Project Quick Start.

Instale a ferramenta repo, que será utilizada para baixar os repositórios do BSP:

$ mkdir -p ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

E baixe o BSP executando os comandos abaixo:

$ export PATH=$PATH:~/bin
$ mkdir -p ~/fsl-community-bsp && cd ~/fsl-community-bsp
$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b jethro
$ repo sync

Carregue o script para inicializar o diretório de compilação, aceitando o acordo de licença com o usuário final (EULA).

$ source setup-environment build

Abra o arquivo conf/local.conf e altere a variável MACHINE para apalis-imx6.

MACHINE ??= 'apalis-imx6'

E processe a receita de imagem:

$ bitbake core-image-minimal

Agora é só ter um pouco de paciência. :) A compilação pode levar algumas horas, dependendo da capacidade da sua máquina de desenvolvimento.

No final da compilação, as imagens estarão disponíveis em tmp/deploy/images/apalis-imx6:

$ ls tmp/deploy/images/apalis-imx6/
core-image-minimal-apalis-imx6-20151215155406.rootfs.ext4
core-image-minimal-apalis-imx6-20151215155406.rootfs.manifest
core-image-minimal-apalis-imx6-20151215155406.rootfs.sdcard.gz
core-image-minimal-apalis-imx6.ext4
core-image-minimal-apalis-imx6.manifest
core-image-minimal-apalis-imx6.sdcard.gz
modules--3.14.28-r0-apalis-imx6-20151215155406.tgz
modules-apalis-imx6.tgz
README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
u-boot-apalis-imx6.imx
u-boot-apalis-imx6.imx-it
u-boot.imx
u-boot.imx-it
u-boot-it-v2015.04-v2.5b2+gitAUTOINC+1ef4a29e8c-r0.imx
uImage
uImage--3.14.28-r0-apalis-imx6-20151215155406.bin
uImage--3.14.28-r0-imx6q-apalis-eval-20151215155406.dtb
uImage--3.14.28-r0-imx6q-apalis-ixora-20151215155406.dtb
uImage--3.14.28-r0-imx6q-apalis_v1_0-eval-20151215155406.dtb
uImage--3.14.28-r0-imx6q-apalis_v1_0-ixora-20151215155406.dtb
uImage-apalis-imx6.bin
uImage-imx6q-apalis-eval.dtb
uImage-imx6q-apalis-ixora.dtb
uImage-imx6q-apalis_v1_0-eval.dtb
uImage-imx6q-apalis_v1_0-ixora.dtb

CONECTANDO A PLACA

Segundo as especificações, a placa deve ser alimentada por uma fonte de 12V/3A, mas como não precisei alimentar nenhum dispositivo externo conectado à placa, consegui testar com uma fonte de 12V/1A.

Ao alimentar pela fonte, pressione o botão SW1 para ligar a placa. Caso queira que a placa seja alimentada automaticamente ao conectar a fonte, basta colocar o jumper JP1. Mais detalhes na seção “3.2.2 Power Control” do datasheet da placa.

O terminal serial é exportado através do conector X22 de 10 pinos, que deve ser conectado à serial do PC através de um cabo adaptador (imagem abaixo). As especificações da pinagem deste conector também estão disponíveis no datasheet da placa.

adapter-ixora

Então é só abrir um programa de comunicação serial (minicom, picocom, etc) com a configuração 115200,8n1.

PROCESSO DE BOOT

Ao ligar a placa, um código de boot em ROM no i.MX6 será executado. Este código é responsável por carregar o bootloader (U-Boot) da memória flash (eMMC) para a RAM e executar.

Por padrão, a memória flash eMMC já vem com o U-Boot gravado. Caso precise regravá-lo, consulte a documentação da Toradex.

Neste artigo iremos testar o boot da distribuição Linux gerada pelo Yocto Project usando um cartão micro SD.

BOOT PELO CARTÃO SD

Entre no diretório das imagens que foram geradas pelo Yocto Project:

$ cd ~/fsl-community-bsp/build/tmp/deploy/images/apalis-imx6/

Grave a imagem em um cartão micro SD, substituindo /dev/sdX no comando abaixo pelo nome do arquivo de dispositivo do cartão SD:

$ zcat core-image-minimal-apalis-imx6.sdcard.gz | sudo dd of=/dev/sdX bs=1M && sync

Ao final do processo de gravação, coloque o cartão micro SD na placa de desenvolvimento.

Ligue a placa, acesse o terminal serial e pressione qualquer tecla para interromper o processo de boot na linha de comandos do U-Boot.

Execute os comandos abaixo no terminal do U-Boot para configurar o boot pelo cartão SD:

# setenv fdt_file imx6q-apalis_V1_0-ixora.dtb
# setenv sdargs ip=off root=/dev/mmcblk1p2 rw,noatime rootfstype=ext4 rootwait
# setenv sdkernelload 'fatload mmc 2:1 ${kernel_addr_r} ${boot_file}'
# setenv sddtbload 'fatload mmc 2:1 ${fdt_addr_r} ${fdt_file}'
# setenv bootcmd 'run setup; setenv bootargs ${defargs} ${sdargs} ${setupargs} ${vidargs}; echo Booting from SD card...; run sddtbload; run sdkernelload; bootm ${kernel_addr_r} - ${fdt_addr_r}'
# saveenv

Agora é sé reiniciar a placa e testar.

Se você quiser gravar as imagens na flash interna e fazer o boot pela eMMC, pode utilizar como base o tutorial disponível no site da Toradex.

OUTRAS INFORMAÇÕES

Comparado ao uso de placas de comunidade como a Raspberry Pi e a Beaglebone Black, o uso de módulos de CPU tem algumas vantagens, incluindo estoque local, suporte do fabricante, a garantia de manutenção do hardware e do software do módulo e a compatibilidade pino a pino com outros modelos de módulos, garantindo uma vida útil maior ao produto.

Este e outros módulos e placas de suporte da Toradex podem ser adquiridos diretamente do site da empresa. Caso tenha qualquer dúvida ou precise de mais informações, entre em contato com o Guilherme Fernandes, diretor da Toradex no Brasil.

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.