Uso de la placa de recarga Firefly-RK3288 con el SoC RockChip RK3288 Sensor térmico digital Microchip I2C - MCP9808

Firefly-RK3288 Recargar


Al elegir una placa de desarrollo para experimentos, la elección recayó en un modelo bastante sofisticado del fabricante chino T-Chip. Venden productos bajo la marca Firefly. Se especializan en tableros con sistemas basados ​​en el chip RockChip. RK3288 es la solución de 32 bits más productiva de esta empresa china. El SoC de RockChip y Allwinner se compara favorablemente con los chips Broadcom en RaspberryPi no solo en sus mejores características, sino también en tecnología de producción: 28nm versus 40nm. Pero, por supuesto, en este caso, los chinos son más caros. RK3399 no eligió un sistema aún más pronunciado de 64 bits, incluso porque hay razones para creer que ya es significativamente más caliente. Mientras que el RK3288 no está muy caliente bajo carga, incluso sin el uso de ningún radiador.

Página del producto Los principales parámetros de hardware del dispositivo: 4 núcleos ARM Cortex-A17 1.8 GHz (algunas fuentes insisten en que es Cortex-A12 o A15, pero esto no es particularmente importante), 2 GB DDR3 de doble canal, unidad eMMC de 16 GB, gigabit Ethernet.

Vista general

Lo compré en Ebay, era casi el único lugar donde se pueden pedir estas tablas a Rusia. La tienda en línea de la Firefly china en sí no envía a Rusia. No enviado a Rusia e Indiegogo. Lo que es divertido, en la lista de países para enviar, estas personas extrañas supuestamente incluso tienen estados que no existen :). El vendedor de Ebay envió una placa en buena configuración: una placa, una fuente de alimentación (necesita 12V 1.5A, enviada como debería con un margen de 2A), una bufanda con una antena, paneles acrílicos de la caja con cierres. El adaptador es válido para una toma de corriente estadounidense, pero todos deberían tener un adaptador de senderismo :).

Al igual que las placas CubieBoard de CubieTech, que son más conocidas en el mercado ruso, Firefly ofrece un buen soporte de información. Se proporcionan imágenes del sistema operativo, diagramas de pinout y más. El firmware de Ubuntu 14 para Firefly es digno de elogio. Funciona de manera estable, bajo consumo de memoria. Escritorio gráfico - LXDE. La representación de la interfaz no parece perfectamente rápida, pero es bastante decente. Por cierto, un enlace útil sobre cómo tomar capturas de pantalla en LXDE: Lxde wiki . Otra información útil es cómo configurar el tiempo: usando dpkg-reconfigure tzdata . Sí, nunca adivinará qué, en cualquier shell de Linux, se hace de una manera no trivial.



El tablero tiene una estructura sandwich (estilo sandwich). La placa base contiene SoC RockChip, RAM y una unidad Samsung, Realtek's Ethernet, así como un chip de alimentación y monitoreo activo. La placa principal contiene todo lo demás: el controlador de salida HDMI de Lontium (solo dos salidas), la entrada HDMI de Toshiba, el puente JMicron USB-SATA, el chip Ampak para interfaces inalámbricas. Dos partes están conectadas a través de una ranura MXM3.0 relativamente estándar (módulo móvil PCI Express). La placa tiene muchas interfaces, así como cuatro bloques principales de pines, un total de 184 pines. Además, el fabricante no escatimó en conectores madre, ciertamente es más seguro, dado que incluso varias líneas de alimentación de 12V están divorciadas.

Modo de arranque y firmware


Lo primero que debe hacer con los tableros es flashearlos. Para la interacción ocasional con placas de desarrollo, IoT y todo eso, es más conveniente tener un sistema Linux en su computadora. Lo tengo tradicionalmente Linux Fedora 64bit, para todas las versiones 26. Las instrucciones oficiales para poner la placa en modo de arranque y flashear la imagen del sistema operativo: Flash Image .

Dado que la utilidad de relleno upgrade_tool de RockChip necesita dependencias para instalarse . Y no todas las versiones de la distribución de Linux en la PC host dicen cuáles.
Quiero compartir mi algoritmo de acciones para transferir con éxito la placa para arrancar y llenar la imagen del sistema operativo:

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 

Uso


Después de un exitoso firmware de Firefly-RK3288 Reload, desconecte el cable USB. Y puede conectar un monitor, teclado, mouse. Y por sí mismo instale el compilador de g ++. Ubuntu LXDE para Firefly tiene un buen conjunto de software mínimamente suficiente. Por supuesto, lo más útil en esta situación es el terminal. También hay un monitor de sistema simple, editor de texto Leafpad, teclado en pantalla, administrador de archivos, reproductor multimedia, navegador Chromium y más.

Un par de capturas de pantalla:

imagen
Terminal y Leafpad
imagen
Informacion de version
Por supuesto, no podría prescindir de una mosca en la pomada. La placa funciona internamente con resolución de imagen Full HD, y las capturas de pantalla se guardan en la misma resolución. Pero en la salida HDMI, una imagen en la resolución de solo HD ready se alimenta al monitor. Por lo tanto, la imagen, por supuesto, no es lo suficientemente clara. Pero esa imagen servirá para los experimentos.

imagen
Un par de películas de buena calidad no es un problema para la RK3288, la utilización de la CPU es de alrededor del 50%.

Uso de periféricos I2C y pines GPIO


Quizás una de las características más valiosas de tales placas es la conexión de dispositivos periféricos a través del bus I2C, utilizando GPIO y otras interfaces. Firefly RK3288 Reload tiene cuatro buses I2C, incluso cinco, pero el bus cero se usa para las necesidades internas del tablero, y los otros cuatro, de 1 a 4, están divorciados para su uso por parte del usuario.

La red tiene suficiente información general sobre el uso de la interfaz I2C. Para interactuar con dispositivos I2C a través del terminal, recomiendo este artículo: "I2C en Cubieboard con Lubuntu" , usan un "cubo" allí, pero esto no es importante.

Y para conectarse a los periféricos I2C mediante programación, utilizando la virtualización de archivos de buses I2C, podemos recomendar esto: "Interfaz con dispositivos I2C" .
Como dispositivo periférico, I2C utilizó un sensor de temperatura Microchip - MCP9808. En el sitio web del fabricante, es fácil encontrar una buena especificación del dispositivo. Este es uno de los sensores más caros y de más alta calidad en el mercado, significativamente más rápido y más preciso que los sensores de las series TI y NXP LM.

imagen

Usé este sensor ya soldado a la mini placa CJMCU-9808. También todo con Ebay, tanto los sensores como el cableado de Dupont, para hacerlo sin soldar. La conexión es bastante simple: VCC - a 3.3V de potencia, GND - a tierra, SCL y SDA realmente implementan el bus I2C (líneas de reloj y datos, respectivamente), los pines A0 A1 A2 configuran parte de la dirección de 7 bits del dispositivo I2C, ALERT puede, en principio, no uso, pero la línea de alarma seguirá involucrada aún más. En la foto, el sensor de temperatura está conectado al bus I2C 1, todos los contactos de dirección se ponen a tierra, lo que significa un 0 lógico en el bit de dirección correspondiente, si el cableado de la dirección está enchufado a una alimentación de 3.3V, este bit será lógico 1. La dirección base del chip MCP9808 es b0011 y más A2 A1 A0. Solo siete bits, en este caso - b0011000, es decir, en hexadecimal - 0x18.

Por lo tanto, la utilidad de la consola producirá:

 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: -- -- -- -- -- -- -- -- 

Se puede ver que en el bus I2C número 1 hay algo con la dirección 0x18.

Llamada:
root @ firefly: / home / firefly # i2cget -y 1 0x18 0x05 w
dará, por ejemplo: 0xbc01 (que significa una temperatura de 27.75 C).

Parámetros del programa i2cget: 1 - número de bus; 0x18 - dirección conectada al bus del dispositivo; 0x05 - dirección de registro (en este caso, temperatura); w - indica que el registro almacena 2 bytes.

Por supuesto, puede usar MCP9808 desde su propio programa C ++ más completamente. Tenga en cuenta que el contenido del registro de temperatura - 0xbc01 - está invertido, es decir, puede representarse como 0x01bc. El primer byte 0x01 contiene tres bits de la causa de la alarma, un bit del signo y cuatro bits altos de la temperatura. El segundo byte 0xbc contiene los ocho bits inferiores de la temperatura. Microchip codifica el contenido del registro de temperatura utilizando el método de formato de complemento a dos . El duodécimo bit de un registro de doble byte codifica un carácter. Si es 0, entonces la temperatura es positiva. Si el undécimo bit es 1, entonces, a la temperatura ambiente calculada, debe agregar 2 al grado de 7 grados Celsius - 2 ^ 7 (128 C), si - igual a 0, entonces - no es necesario agregar nada. Del mismo modo, 1 en el décimo bit agregará 2 ^ 6 (64 C). Y así sucesivamente, 1 en el cuarto bit agregará 2 ^ 0 (1 C). 1 en el tercer bit agregará 2 ^ -1 (0.5 C). 1 en el último bit cero agregará 2 ^ -4 (0.0625 C). Si el bit del signo (12) es 1, entonces el problema vino en la casa, la temperatura es negativa. Y el descifrado del registro es algo complicado. De acuerdo con los principios del formato de complemento a dos, primero debe invertir los bits. Luego debe agregar uno al bit menos utilizado, porque los valores negativos se codifican no con 0, sino con -1. Al configurar el sensor de temperatura de forma predeterminada, se utiliza la precisión máxima: hasta 0.0625 C. En este caso, debe agregar uno al último bit, que es responsable de 0.0625 C. Es decir, simplemente puede agregar 1 al valor del registro de temperatura. Si, por ejemplo, para aumentar la velocidad, reduzca la precisión de la medición de temperatura utilizando el registro de configuración. Luego, a una temperatura negativa, deberá agregar uno al bit más antiguo o agregar un número correspondiente a este bit. Entonces es necesario traducir los bits a un valor de temperatura como en el caso de un caso positivo.

Línea GPIO y ALARMA


imagenimagen

Puede usar la línea ALARMA del sensor. Incluyendo el uso de una de las líneas GPIO de Firefly. En la foto, por supuesto, estañe y queme con un LED arcaico y resistencia, pero aquí el principio en sí mismo es importante. El uso de GPIO está bien descrito en otro artículo sobre Habré: Linux: botones, LED y GPIO . Pero, como se ha señalado correctamente, es difícil determinar qué número de Gpio se exportará para su uso futuro. Para ver qué líneas de Gpio están ocupadas y cuáles no, puede usar el comando:

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

El equipo

 firefly@firefly:~$ dmesg 

También muestra información sobre Gpio.

El estudio mostró que es posible exportar, por ejemplo, el número de pin GPIO 262. Que se indica en la placa y en la especificación como GPIO8 A6. Porque En esta placa, como de costumbre, los bloques GPIO contienen 32 elementos cada uno. Se puede suponer que, tal vez, la fórmula mágica es la siguiente: 32 * número de bloque GPIO + número del postfix. Entonces, podemos obtener 32 * 8 + 6 = 262. Ahora, al comienzo del programa, podemos suministrar energía de 3.3V a este Gpio 262, y cuando salgamos de él, deje de hacerlo.

La especificación para MCP9808 indica que la línea de ALARMA en ella es drenaje abierto, es decir Stock abierto. Esto significa que cuando se produce una alarma, esta línea está en cortocircuito a tierra, de lo contrario no está en corto. También se enfatiza la necesidad de usar una resistencia. En la práctica, se verificó que esto es realmente necesario, de lo contrario, con el paso de la corriente, el interior del sensor se calentará a altas temperaturas. El siguiente diagrama se muestra en la foto: GPIO está conectado en serie al LED, resistencia, drenaje abierto (ALARMA) del sensor. Queda por utilizar el registro de configuración MCP9808 para establecer los límites de temperatura permitidos. Al ir más allá de eso, se producirá una alarma. Puede establecer dos niveles de temperatura demasiado alta y un nivel demasiado bajo. En general, para trabajar con este sensor digital, por supuesto, necesita leer cuidadosamente las especificaciones, cambiar al modo de configuración, volver al modo de trabajo y más. Por lo tanto, cuando la temperatura supera los límites establecidos, la corriente pasará a través del contacto de ALARMA y encenderá el LED.

En conclusión


Me gustaría mencionar un truco útil para controlar el brillo de los LED integrados en las placas de desarrollo. Los manuales de Cubieboard 6 muestran cómo encender LED1:

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

Y cómo apagar LED1:

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

En base a esto, se descubrió cómo controlar los LED en Firefly 3288 Reload.
Encendido del LED amarillo personalizado (en realidad, un LED azul):

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

Desactivar este LED:

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

Precauciones


Al diseñar para tableros de desarrollo, es importante tener precaución. La codificación, por supuesto, tiene lugar en una PC, con mucho deseo y compilación cruzada también. Luego, el código fuente se compila en un destino específico o un archivo ejecutable listo para usar se transfiere a la placa. Y si las placas especializadas están hechas en gran medida para usar todo tipo de interfaces. Sí, y generalmente no son muy caros. En las PC caras, no se recomienda tratar de usar buses I2C, líneas GPIO y similares. Esto puede conducir a fallas informáticas desagradables. Al menos las utilidades de consola como i2cget advierten explícitamente sobre esto, citando algunos modelos de computadoras portátiles dañadas como ejemplo.

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


All Articles