ÍNDICE DE CONTEÚDO
O processo de carregamento de Device Tree Overlay (DTO) na BeagleBone era realizado pelo Kernel por meio do bone cape manager, no entanto esse método foi descontinuado e substituído pelo Overlay por meio do U-Boot. Deste modo, é necessário descrever quais Device Tree Overlay serão carregados durante o processo de boot.
Este artigo irá descrever o processo de carregamento do Device Tree Overlay por meio do U-Boot utilizando dois dispositivos, um display OLED e um conversor analógico digital.
Hardware utilizado
Para descrever o processo de carregamento do DTO, serão utilizados os seguintes dispositivos:
- BeagleBone Green: Em parceria com a Seeed Studio, a BeagleBone Green (BBG) foi desenvolvida para ser compatível com sensores da família Grove, deste modo foram adicionados dois conectores Grove e o HDMI foi removido, além do conector USB ser modificado para micro USB. As demais especificações são idênticas à BeagleBone Black (BBB);
- Conversor Analógico Digital ADS1115: O conversor analógico digital (ADC) ADS1115 possui 4 canais, resolução de 16-bits e comunicação I2C;
- Display OLED 0.96” SSD1306: Display OLED de 0.96” com resolução de 128×64 pixels e comunicação I2C. Possui como controlador o SSD1306;
Esquema de Ligações
Com observado, os dois dispositivos que serão utilizados com a BBG possuem comunicação I2C, desta forma, ambos os dispositivos serão conectados ao I2C-1 (pinos 17 e 18 do conector P9) da BBG. A imagem abaixo mostra o esquema de ligações, embora seja mostrada a BeagleBone Black, as ligações são a mesma para a BBG. Para que seja possível testar o ADS1115, um potenciômetro foi adicionado ao canal 0:
Checando os Device Drivers
A imagem que será utilizada é a Buster IoT sem interface gráfica que pode ser encontrada no site da BeagleBoard. No momento, a última imagem disponível é AM3358 Debian 10.3 2020-04-06 4GB SD IoT.
O Device Driver a ser utilizado para controlar o display OLED será o FB_SSD1307 e para controlar o ADS1115 será o TI_ADS1015. Pelo terminal da BBG, podemos checar se os drivers já estão habilitados pelo comando abaixo:
1 |
$ zcat /proc/config.gz | grep -E "SSD1307|ADS1015" |
O módulo FB_SSD1307 já está incluído built-in na imagem do Kernel, no entanto, o TI_ADS1015 foi incluído como módulo, desta forma é necessário carregá-lo. Pode ser utilizado o comando modprobe, porém ao reiniciar a placa será necessário carregá-lo novamente. Para contornar, iremos adicionar o nome do módulo ao arquivo /etc/modules para este ser carregado durante o boot:
1 |
$ sudo vim /etc/modules |
Após reiniciar a placa, é possível observar se o módulo foi carregado pelo comando lsmod:
Carregando o Device Tree Overlay
Na imagem do Debian 10.3 2020-04-06, alguns Device Tree Overlays já compilados podem ser encontrados em /lib/firmware/. No entanto, os DTOs para o SSD1306 e ADS1115 ainda não estão disponíveis na imagem, então, será necessário compilá-los a partir do repositório da BeagleBoard.
A BeagleBoard mantém os códigos-fontes dos DTO em https://github.com/beagleboard/bb.org-overlays. Em /src/arm podemos encontrar os DTO para os dispositivos que estamos trabalhando: SSD1306 e ADS1115.
Após clonar o repositório, precisamos compilar estes DTO de modo a gerar o Device Tree Blob Overlay (DTBO) de cada um. Há um Makefile que podemos utilizar para compilá-los:
1 |
$ make src/arm/BB-I2C1-SSD1306.dtbo && make src/arm/BB-I2C1-ADS1115.dtbo |
Agora, precisamos copiar os DTBO para a diretório /lib/firmware/ no SDCard da BBG.
1 |
$ sudo cp src/arm/*.dtbo /media/thales/rootfs/lib/firmware/ |
Para carregar os DTBO, é necessário adicioná-los ao arquivo uEnv.txt do U-Boot. Este arquivo define algumas configurações necessárias para que o U-Boot inicialize o Kernel Linux. Este arquivo pode ser encontrado em:
1 |
$ sudo vim /media/thales/rootfs/boot/uEnv.txt |
No arquivo há uma seção chamada ###Additional custom capes onde iremos adicionar os DTBOs:
Por fim, desmontar o SDCard e inserir na BBG. Durante o boot, já é possível observar os DTBOs sendo carregados pelo U-Boot:
Após o boot, é possível observar que o display está mostrando o console da BBG:
Utilizando o teclado na BBG para logar no console por meio do Display OLED, podemos navegar até o diretório do dispositivo ADS1115 e ler o valor do ADC utilizando o comando watch:
1 2 |
$ cd /sys/bus/iio/devices/iio\:device1 $ watch -tn 1 cat in_voltage0_raw |
Referências
https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays