Escrito por: Marcos de Lima Carlos

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.

 

Figura 1 – GPIO BeagleBoneOs GPIO's possuem as seguintes características:
Figura 1 – GPIO BeagleBoneOs GPIO's possuem as seguintes características:

 

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:

 

 

Figura 2 – Pinos I2C – em amarelo.
Figura 2 – Pinos I2C – em amarelo.

 

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.

 

 

Figura 3 – Portas SPI – conector P9
Figura 3 – Portas SPI – conector P9

 

 

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/component/content/article/110-mecatronica/robotica/9455-controle-pwm-de-motor-dc-mec158 

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.

http://beagleboard.org/pru 

 

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.