Usando a placa de recarga Firefly-RK3288 com o SoC RockChip RK3288 Sensor térmico digital Microchip I2C - MCP9808

Recarregar o Firefly-RK3288


Escolhendo uma placa de desenvolvimento para experimentos, a escolha recaiu sobre um modelo bastante sofisticado da fabricante chinesa T-Chip. Eles vendem produtos com a marca Firefly. Eles são especializados em placas com sistemas baseados no chip RockChip. O RK3288 é a solução de 32 bits mais produtiva desta empresa chinesa. O SoC da RockChip e Allwinner se compara favoravelmente aos chips Broadcom no RaspberryPi, não apenas em seus melhores recursos, mas também em tecnologia de produção - 28nm versus 40nm. Mas é claro que, neste caso, os chineses são mais caros. O RK3399 não escolheu um sistema de 64 bits ainda mais íngreme, inclusive porque há motivos para acreditar que ele já é significativamente mais quente. Enquanto o RK3288 não estiver muito quente sob carga, mesmo sem o uso de radiadores.

Página do produto . Os principais parâmetros de hardware do dispositivo: ARM Cortex-A17 de 4 núcleos a 1,8 GHz (algumas fontes insistem que é Cortex-A12 ou A15, mas isso não é particularmente importante), 2 GB DDR3 de canal duplo, unidade eMMC de 16 GB e Ethernet de gigabit.

Vista geral

Eu comprei no Ebay, era quase o único lugar onde essas placas podem ser encomendadas para a Rússia. A loja online do próprio Firefly chinês não é enviada para a Rússia. Não enviado para a Rússia e o Indiegogo. O que é engraçado, na lista de países a enviar, essas pessoas estranhas supostamente até têm estados que não existem :). O vendedor com o Ebay enviou uma placa em boa configuração - uma placa, uma fonte de alimentação (você precisa de 12V 1.5A, enviado como deveria com uma margem de 2A), um cachecol com uma antena, painéis de acrílico do gabinete com fixadores. O adaptador é válido para uma tomada americana, mas todos devem ter um adaptador de caminhada :).

Assim como as placas CubieBoard da CubieTech, mais conhecidas no mercado russo, a Firefly fornece um bom suporte de informações. São fornecidas imagens do sistema operacional, diagramas de pinagem e muito mais. O firmware do Ubuntu 14 para Firefly é digno de elogios. Funciona de forma estável, baixo consumo de memória. Área de trabalho gráfica - LXDE. A renderização da interface não parece perfeitamente rápida, mas é bastante decente. A propósito, um link útil sobre como tirar capturas de tela no wiki do LXDE: Lxde . Outra informação útil é como definir o horário: usando o dpkg-reconfigure tzdata . Sim, você nunca adivinhará o que, em qualquer shell do Linux, é feito de maneira não trivial.



A placa possui uma estrutura em sanduíche (estilo sanduíche). A placa principal contém SoC RockChip, RAM e um drive Samsung, a Ethernet da Realtek, além de um chip de energia e monitoramento ativo. A placa principal contém tudo o mais: o controlador de saída Lontium HDMI (apenas duas saídas), a entrada Toshiba HDMI, a ponte JMicron USB-SATA, o chip Ampak para interfaces sem fio. Duas partes são conectadas através de um slot MXM3.0 relativamente padrão (módulo PCI Express móvel). A placa possui muitas interfaces, além de quatro blocos principais de pinos, um total de 184 pinos. Além disso, o fabricante não estragou os conectores mãe, é certamente mais seguro, pois várias linhas de energia de 12V são divorciadas.

Modo de inicialização e firmware


A primeira coisa a fazer com as placas é exibi-las. Para uma interação ocasional com placas de desenvolvimento, IoT e tudo mais, é mais conveniente ter um sistema Linux no seu computador. Eu o tradicionalmente Linux Fedora 64bit, para a 26ª versão. A instrução oficial para colocar a placa no modo de inicialização e exibir a imagem do sistema operacional: Flash Image .

Como o utilitário de preenchimento upgrade_tool da RockChip precisa de dependências para serem instaladas . E nem todas as versões da distribuição Linux no PC host indicam quais.
Quero compartilhar meu algoritmo de ações para transferir com êxito a placa para inicializar e preencher a imagem do sistema operacional:

1.  . 2.     ( micro USB - USB). 3.        : -     RECOVER -   RESET -      RECOVER 4.  -   Linux Upgrade Tool (     ): - [user@nb-linuxfedora data-arm]$ unzip Linux_Upgrade_Tool_v1.24.zip - [user@nb-linuxfedora data-arm]$ cd Linux_Upgrade_Tool_v1.24/ - [user@nb-linuxfedora Linux_Upgrade_Tool_v1.24]$ sudo mv upgrade_tool /usr/local/bin/ - [user@nb-linuxfedora Linux_Upgrade_Tool_v1.24]$ sudo chown root:root /usr/local/bin/upgrade_tool - [user@nb-linuxfedora Linux_Upgrade_Tool_v1.24]$ cd /usr/local/bin/ - [user@nb-linuxfedora bin]$ -  ,    upgrade_tool      5.  Linux Upgrade Tool   <update>.img   (         ): [user@nb-linuxfedora bin]# sudo upgrade_tool -  ,       ,      Fedora,    .   Fedora 26       . ,   : libudev.so.1, libstdc++.so.6.          Linux    ,   Fedora : [user@linux]# dnf install libudev.so.1 installing: libcap-2.25-5.fc26.i686.rpm libgpg-error-1.25-2.fc26.i686.rpm xz-libs-5.2.3-2.fc26.i686.rpm systemd-libs-233-6.fc26.i686.rpm libgcc-7.2.1-2.fc26.i686.rpm libselinux-2.6-7.fc26.i686.rpm lz4-libs-1.8.0-1.fc26.i686.rpm libgcrypt-1.7.8-1.fc26.i686.rpm libsepol-2.6-2.fc26.i686.rpm pcre-8.41-1.fc26.i686.rpm [user@linux]# dnf install libstdc++.so.6 installing: libstdc++.i686 7.2.1-2.fc26   -   : [user@nb-linuxfedora bin]# sudo upgrade_tool : List of rockusb connected DevNo=1 Vid=0x2207,Pid=0x320a,LocationID=302 Loader Found 1 rockusb,Select input DevNo,Rescan press <R>,Quit press <Q>:1  "1"      .    uf. Rockusb>uf Firefly-RK3288-Reload_DualBoot_201612101121.img : Loading firmware... Support Type:RK32 FW Ver:5.0.00 FW Time:2016-12-10 11:21:47 Loader ver:2.30 Loader Time:2016-10-13 10:04:54 ( ...) Upgrade firmware ok. Rockusb>q 

Use


Após o sucesso do firmware Firefly-RK3288 Reload, desconecte o cabo USB. E você pode conectar um monitor, teclado, mouse. E, por si só, instale o compilador g ++. O Ubuntu LXDE para Firefly possui um bom conjunto de software minimamente suficiente. Obviamente, o mais útil nessa situação é o terminal. Há também um monitor de sistema simples, editor de texto Leafpad, teclado na tela, gerenciador de arquivos, reprodutor de mídia, navegador Chromium e muito mais.

Algumas capturas de tela:

imagem
Terminal e Leafpad
imagem
Informações da versão
Claro que não poderia prescindir de uma mosca na pomada. A placa trabalha internamente com resolução de imagem em Full HD, e as capturas de tela são salvas na mesma resolução. Mas na saída HDMI, uma imagem na resolução de apenas HD pronto é alimentada no monitor. Portanto, a imagem, é claro, não é clara o suficiente. Mas essa imagem serve para experimentos.

imagem
Alguns filmes de boa qualidade não são um problema para o RK3288; a utilização da CPU está em torno de 50%.

Usando periféricos I2C e pinos GPIO


Talvez um dos recursos mais valiosos dessas placas seja conectar dispositivos periféricos via barramento I2C, usando GPIO e outras interfaces. O Firefly RK3288 Reload possui quatro barramentos I2C, até cinco, mas o barramento zero é usado para as necessidades internas da placa, e os outros quatro - de 1 a 4 são divorciados para uso do usuário.

A rede possui informações gerais suficientes sobre o uso da interface I2C. Para interagir com dispositivos I2C através do terminal, recomendo este artigo: “I2C no Cubieboard com Lubuntu” , eles usam um “cubo” lá, mas isso não é importante.

E para conectar-se aos periféricos I2C programaticamente, usando a virtualização de arquivos dos barramentos I2C, você pode recomendar o seguinte: “Interface com dispositivos I2C” .
Como dispositivo periférico, o I2C usou um sensor de temperatura Microchip - MCP9808. No site do fabricante, é fácil encontrar uma boa especificação do dispositivo. Este é um dos sensores da mais alta qualidade e mais caros do mercado, significativamente mais rápido e preciso do que os sensores das séries TI e NXP LM.

imagem

Usei esse sensor já soldado na miniplaca CJMCU-9808. Além disso, tudo com o Ebay - tanto os sensores quanto a fiação da Dupont - é feito sem solda. A conexão é bastante simples: VCC - para energia de 3,3V, GND - para terra, SCL e SDA realmente implementam o barramento I2C (linhas e dados do relógio, respectivamente), os pinos A0 A1 A2 especificam parte do endereço de 7 bits do dispositivo I2C; o ALERT pode, em princípio, não uso, mas a linha de alarme ainda estará envolvida. Na foto, o sensor de temperatura está conectado ao barramento I2C 1, todos os contatos de endereço são puxados para o terra, o que significa um 0 lógico no bit de endereço correspondente, se a fiação do endereço estiver conectada à energia de 3,3V, esse bit será lógico 1. O endereço base do chip MCP9808 é b0011 e mais A2 A1 A0. Apenas sete bits, neste caso - b0011000, ou seja, em hex - 0x18.

Assim, o utilitário do console produzirá:

 root@firefly:/home/firefly# i2cdetect -y -r 1 0 1 2 3 4 5 6 7 8 9 abcdef 00: -- -- -- -- -- -- -- -- -- -- -- -- UU 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 

Pode-se observar que no barramento I2C número 1 existe algo com o endereço 0x18.

Ligue para:
root @ firefly: / home / vaga-lume # i2cget -y 1 0x18 0x05 w
dará, por exemplo: 0xbc01 (que significa uma temperatura de 27,75 C).

Parâmetros do programa i2cget: 1 - número do barramento; 0x18 - endereço conectado ao barramento do dispositivo; 0x05 - endereço de registro (neste caso, temperatura); w - indica que o registro armazena 2 bytes.

Obviamente, você pode usar o MCP9808 do seu próprio programa C ++ mais completamente. Lembre-se de que o conteúdo do registro de temperatura - 0xbc01 - é invertido, ou seja, pode ser representado como 0x01bc. O primeiro byte 0x01 contém três bits da causa do alarme, um bit do sinal e quatro bits altos de temperatura. O segundo byte 0xbc contém os oito bits mais baixos da temperatura. O microchip codifica o conteúdo do registro de temperatura usando o método de formato de complemento dos dois . O décimo segundo bit de um registro de byte duplo codifica um caractere. Se for 0, a temperatura é positiva. Se o décimo primeiro bit for 1, então, à temperatura ambiente calculada, você precisará adicionar 2 ao grau de 7 graus Celsius - 2 ^ 7 (128 C), se - for igual a 0, - nada precisará ser adicionado. Da mesma forma, 1 no décimo bit adicionará 2 ^ 6 (64 C). E assim por diante, 1 no quarto bit adicionará 2 ^ 0 (1 C). 1 no terceiro bit adicionará 2 ^ -1 (0,5 C). 1 no último bit zero adicionará 2 ^ -4 (0,0625 C). Se a parte do sinal (12) for 1, o problema ocorreu na casa, a temperatura é negativa. E a descriptografia do registro é um pouco complicada. De acordo com os princípios do formato de complemento de dois, você deve primeiro inverter os bits. Então você precisa adicionar um ao bit menos usado, porque valores negativos são codificados não com 0, mas com -1. Ao configurar o sensor de temperatura por padrão, é usada a precisão máxima - até 0,0625 C. Nesse caso, você precisa adicionar um ao último bit, responsável por 0,0625 C. Isso é, você pode simplesmente adicionar 1 ao valor do registro de temperatura. Se, por exemplo, aumentar a velocidade, reduza a precisão da medição de temperatura usando o registro de configuração. Em uma temperatura negativa, você precisará adicionar um ao bit mais antigo ou adicionar um número correspondente a esse bit. Então é necessário converter os bits no valor da temperatura da mesma maneira que no caso positivo.

Linha GPIO e ALARM


imagemimagem

Você pode usar a linha ALARM do sensor. Incluindo o uso de uma das linhas GPIO da Firefly. Na foto, é claro, estanho e queima com um LED arcaico e resistência, mas aqui o princípio em si é importante. Como usar o GPIO está bem descrito em outro artigo no Habré: Linux: botões, LEDs e GPIO . Mas, como corretamente observado, é difícil determinar qual número de Gpio exportar para uso futuro. Para ver quais linhas do Gpio estão ocupadas e quais não, você pode usar o comando:

 root@firefly:/home/firefly# cat /sys/kernel/debug/gpio > /home/firefly/_temp/temp 

A equipe

 firefly@firefly:~$ dmesg 

também mostra informações sobre o Gpio.

O estudo mostrou que é possível exportar, por exemplo, o pino GPIO número 262. O que é indicado na placa e na especificação como GPIO8 A6. Porque Nesta placa, como de costume, os blocos GPIO contêm 32 elementos cada. Pode-se supor que, talvez, a fórmula mágica seja esta: 32 * número do bloco GPIO + número do postfix. Portanto, podemos obter apenas 32 * 8 + 6 = 262. Agora, no início do programa, podemos fornecer energia de 3.3V a esta linha Gpio 262 e, quando sairmos, pare de fazer isso.

A especificação para MCP9808 indica que a linha de ALARME nele é de dreno aberto, ou seja, estoque aberto. Isso significa que, quando ocorre um alarme, esta linha é colocada em curto, mas, caso contrário, não está em curto. A necessidade de usar um resistor também é enfatizada. Na prática, verificou-se que isso é realmente necessário; caso contrário, com a passagem da corrente, o interior do sensor será aquecido a altas temperaturas. O diagrama a seguir é mostrado na foto: O GPIO é conectado em série ao LED, resistência, dreno aberto (ALARME) do sensor. Resta usar o registro de configuração MCP9808 para definir os limites de temperatura permitidos. Ao ir além disso, um alarme ocorrerá. Você pode definir dois níveis de temperatura muito alta e um nível muito baixo. Em geral, para trabalhar com esse sensor digital, é claro, você precisa ler atentamente as especificações, alternar para o modo de configuração, retornar ao modo de trabalho e muito mais. Assim, quando a temperatura ultrapassa os limites estabelecidos, a corrente passa pelo contato ALARM e acende o LED.

Em conclusão


Gostaria de mencionar um truque útil para controlar o brilho dos LEDs incorporados nas placas de desenvolvimento. Os manuais do Cubieboard 6 mostram como ativar o LED1:

 $echo default-on > /sys/class/leds/led1-GPIOB9/trigger 

E como desativar o LED1:

 $echo none > /sys/class/leds/led1-GPIOB9/trigger 

Com base nisso, descobriu-se como controlar os LEDs no Firefly 3288 Reload.
Ativando o LED personalizado amarelo (na verdade, um LED azul):

 root@firefly:/home/firefly# echo default-on > /sys/class/leds/firefly:yellow:user/trigger 

Desativando este LED:

 root@firefly:/home/firefly# echo none > /sys/class/leds/firefly:yellow:user/trigger 

Precauções


Ao projetar para placas de desenvolvimento, é importante ter cuidado. A codificação, é claro, ocorre em um PC, com muito desejo e compilação cruzada também. Em seguida, o código-fonte é compilado em um destino específico ou um arquivo executável pronto é transferido para o quadro. E se placas especializadas são amplamente projetadas para usar todos os tipos de interfaces. Sim, e eles geralmente não são muito caros. Nos próprios PCs caros, a tentativa de usar barramentos I2C, linhas GPIO e similares não é recomendada. Isso pode levar a falhas desagradáveis ​​do computador. Pelo menos utilitários de console como o i2cget alertam explicitamente sobre isso, citando alguns modelos de laptops danificados como exemplo.

Source: https://habr.com/ru/post/pt412763/


All Articles