O objetivo deste artigo é fazer com que o leitor interaja com os recursos da BeagleBone Black através da linguagem C, Bash, C++, Python e qualquer outro meio de programação. As partes iniciais desta série estão em: MIC113 (Passos Iniciais), MIC114 (Parte I), MIC117 (Parte II), MIC120 (Parte III) e MIC121 (parte IV).
Requisitos
O ideal é que o leitor tenha como testar, através de qualquer circuito externo, todos os recursos apresentados aqui, porém os circuitos externos serão opcionais. Além da BeagleBone Black é necessário o cabo USB e que ela esteja conectada ao PC. Lembro que isso funcionará apenas na Distribuição Angström. Caso seja outra distribuição por favor configure sua placa com acesso SSH ou serial. Para acesso serial é necessário um conversor TTL 3V3 ? Serial ou um conversor USB? Serial TTL 3V3. Além disso o leitor pode utilizar a conexão HDMI para acessar o terminal da BeagleBone.
Em qualquer um dos casos o que importa é o acesso ao terminal.
Parte Teórica
GPIO
Segundo os arquivos do kernel do linux (https://www.kernel.org/doc/Documentation/gpio/gpio.txt), GPIO (General Purpose Input/Output – Entrada/Saída de propósito geral) é uma maneira flexível de controlar via software uma entrada e saída digital. Elas são fornecidas por muitos chips, e são familiares de desenvolvedores de dispositivos embarcados e de hardwares sob demanda. No caso da BeagleBone os pinos de entrada e saída digital podem ser considerados GPIO.
Podem ser configurados como entrada e saída.
Aceitam estados como nível lógico alto e baixo.
Podem funcionar como IRQ (interrupt request).
A chamada de implementação do kernel que acessa uma GPIO chama-se gpio_request(). Para que o sistema entenda é necessário porém executar a configuração dos pinos através dos seguintes métodos:
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);
A primeira linha é uma configuração de entrada e a segunda é para saída. Caso o tenha sucesso na requisição o método retorna zero, senão retorna um valor negativo. É necessário lembrar que como saída a BeagleBone oferece no máximo 6mA em algumas portas e 4mA na maioria delas com nível de tensão entre 3V3 e 5V.
Além disso o linux considera 0 nivel lógico baixo com saída de 0V e 1 nivel lógico alto com saídas de 3V3 e 5V. A biblioteca que dá suporte ao C para GPIO é gpio.h.
E quanto aos outros Hardwares?
A protocolo i2c
O i2C é um protocolo de comunicação, inventada inicialmente pela Philips (agora NXP) presente em muitos dispositivos. Uma documentação detalhada do protocolo pode ser encontrada no link http://www.nxp.com/documents/user_manual/UM10204.pdf Desde o kernel 2.6 há uma implementação do protocolo i2c para linux. Uma implementação de referência para a utilização desse recurso pode ser encontrada no link abaixo:
http://elinux.org/Interfacing_with_I2C_Devices
Os pinos das portas da Beaglebone Black referente ao i2c está listada abaixo:
A BeagleBone Black possui 3 portas i2c, sendo que uma não está na descrita na figura acima. Portanto não temos como utilizá-la. A tabela 1 é uma referência para uso do dispositivo na BeagleBone:
Porta | Pinos | Memória (endereço) | Diretório |
I2c0 | Não exposta | 0x44E0_B000 | |
I2c1 | P9 17,18 (e 24,26) | 0x4802_A000 | /sys/class/i2c-dev/i2c0 |
i2c2 | P9 19,20 (e 21,22) | 0x4819_C000 | /sys/class/i2c-dev/i2c1 |
Tabela 1 – Características da porta I2C na BeagleBone Black
Não vamos entrar agora na implementação. Porém colocamos abaixo um link, caso o leitor queira aprofundar-se sobre a inicialização de dispositivos i2c no linux:
https://www.kernel.org/doc/Documentation/i2c/instantiating-devices
SPI – Serial Port Interface
O SPI é um protocolo de comunicação de microcontroladores com diversos componentes formando uma rede. A interface original foi desenvolvida pela Motorola e tornou-se padrão pela adoção de diversos dispositivos. Uma especificação detalhada pode ser encontrada no link http://www.mouser.com/pdfdocs/tn15_spi_interface_specification.PDF
Para programar na BeagleBone Black se o leitor for utilizar a SPI -1 deve necessariamente, desabilitar o chip HDMI. O link abaixo contém uma implementação de referência em C para uso em projetos.
http://elinux.org/BeagleBone_Black_Enable_SPIDEV
O leitor pode ver na figura abaixo os pinos lógicos da porta SPI.
Ao fazer projetos dê prioridade para SPI-0 para não precisar desabilitar o chip HDMI da placa.
PORT | CS0 | DO | DI | SCLK |
SPI0 | P9_17 | P9_21 | P9_18 | P9_22 |
SPI1 | P9_28 | P9_29 | P9_30 | P9_31 |
Tabela 2 – Pinos das portas SPI
UART – Universal Assincronous Receive Transmitter
A porta serial ou µART é um padrão antigo que vem desde os primeiros PC's. Serve para prover muitos padrões de comunicação serial como o RS232, RS485 ou RS422. A designação universal significa que os formatos de dados e a velocidade de transmissão são configuráveis.
A BeagleBone Black possui 5 portas µART sendo que a primeira /dev/ttyO0 pode ser utilizada como terminal debug. As outras também podem ser configuradas para essa função.
RX | TX | CTS | RTS | Dev | ||
UART0 | J1_4 | J1_5 | /dev/ttyO0 | BeagleBone Black | ||
UART1 | P9_26 | P9_24 | P9_20 | P9_19 | /dev/ttyO1 | |
UART2 | P9_22 | P9_21 | P8_37 | P8_38 | /dev/ttyO2 | |
UART3 | P9_42 | P8_36 | P8_34 | /dev/ttyO3 | TX - somente | |
UART4 | P9_11 | P9_13 | P8_35 | P8_33 | /dev/ttyO4 | |
UART5 | P8_38 | P8_37 | P8_31 | P8_32 | /dev/ttyO5 |
Tabela 3 – Portas seriais na BeagleBone
A figura abaixo mostra onde se encontram as portas seriais na BeagleBone.
PWM – Pulse Width Modulation
A modulação de largura de pulso é um assunto muito comum quando falamos entre eletrônicos. Dispositivos que possuem saídas PWM são simples e fáceis de configurar e utilizar dispensando uma série de códigos para construir o PWM via software.
Você pode encontrar aplicações com PWM no site com os links abaixo:
http://www.newtoncbraga.com.br/index.php/eletronica/57-artigos-e-projetos/10548-circuito-pwm-art1367
Um controle PWM pode ser utilizado para controle de servo motor, comparadores entre outras. Você achará uma série de aplicações para PWM no site.
O PWM no linux precisa ser habilitado. Será dedicado um artigo só sobre PWM's.
Alteração de clock do processador
O clock do processador da BeagleBone roda até a 1GHz porém é possível fazer alterações no clock para que o dispositivo rode com menor velocidade para assim economizar mais bateria. E sim, é possível alterar o clock do processador via linha de comando.
Digite na linha de comando o que está abaixo:
Veja que o hardware da BeagleBone pode ir de 300MHz até 1GHz. Os passos de frequência são de 300MHz, 600MHz, 800MHz e 1000MHz.
Para colocar uma nova frequência, vamos supor 800Mhz, digite o comando abaixo:
Como o leitor pode observar a nova frequência da placa é de 800MHz.
O hardware pode ser configurado também de acordo com perfis.
PRU – Programable Real-time Units
Os pinos de PRU é um recurso da BeagleBone para programação rápida (200MHz, 32bits) em um processador com um único ciclo de acesso a um número de pinos e total acesso a memória interna e periféricos do processador AM3358. A utilização desse recurso é obtida através de um carregamento ao módulo do linux e pode ser utilizadas para executar diversas funções definidas através de software.
No link abaixo você pode conferir um seminário inteiro que foi dedicado a esse recurso.
Timers
A BeagleBone Black possui 4 interrupções de timers. A figura abaixo faz a listagem dos timers:
Apesar de constar na documentação da placa os timers, o autor não encontrou até o momento, a implementação desse recurso no kernel do linux. Entenda-se por implantação o recurso que pode ser utilizado a partir do kernel do linux. Como esse recurso não está implantado dentro do kernel necessita de software adicional para ser utilizado.
Watchdog timer
A BeagleBone possui um recurso de watchdog timer que pode ser utilizado para aplicações críticas.
Explicaremos mais a frente como utilizar o watchdog timer do kernel. E mais informações pode ser acessada em:
https://www.kernel.org/doc/Documentation/watchdog/watchdog-api.txt
Conclusão
Nessa primeira parte nós vimos quais são alguns dos recursos de hardware da BeagleBone Black. Há alguns passos extras para implantar alguns dos recursos aqui comentados que serão abordados em artigos futuros.