Utilisation de la carte de rechargement Firefly-RK3288 avec le SoC RockChip RK3288 Capteur thermique numérique Microchip I2C - MCP9808

Recharge Firefly-RK3288


En choisissant une carte de développement pour les expériences, le choix s'est porté sur un modèle plutôt sophistiqué du fabricant chinois T-Chip. Ils vendent des produits sous la marque Firefly. Ils se spécialisent dans les cartes avec des systèmes basés sur la puce RockChip. RK3288 est la solution 32 bits la plus productive de cette société chinoise. Le SoC de RockChip et Allwinner se compare favorablement aux puces Broadcom de RaspberryPi non seulement dans leurs meilleures fonctionnalités, mais aussi dans la technologie de production - 28 nm contre 40 nm. Mais bien sûr, dans ce cas, les Chinois sont plus chers. Le RK3399 n'a pas choisi un système 64 bits encore plus raide, y compris parce qu'il y a des raisons de croire qu'il est déjà nettement plus chaud. Alors que le RK3288 n'est pas très chaud sous charge, même sans l'utilisation de radiateurs.

Page produit . Les principaux paramètres matériels de l'appareil: 4 cœurs ARM Cortex-A17 1,8 GHz (certaines sources insistent sur le fait qu'il s'agit de Cortex-A12 ou A15, mais ce n'est pas particulièrement important), 2 Go DDR3 double canal, 16 Go eMMC drive, gigabit Ethernet.

Vue générale

Je l'ai acheté sur Ebay, c'était presque le seul endroit où ces planches peuvent être commandées en Russie. La boutique en ligne du Firefly chinois lui-même n'envoie pas en Russie. Non envoyé en Russie et en Indiegogo. Ce qui est drôle, dans la liste des pays à envoyer, ces gens étranges auraient même des états qui n'existent pas :). Le vendeur d'Ebay a envoyé une carte en bonne configuration - une carte, une alimentation (vous avez besoin de 12V 1.5A, envoyée comme il se doit avec une marge de 2A), un foulard avec une antenne, des panneaux acryliques du boîtier avec des attaches. L'adaptateur est vrai pour une prise américaine, mais tout le monde devrait avoir un adaptateur de randonnée :).

Comme les cartes CubieBoard de CubieTech, qui sont mieux connues sur le marché russe, Firefly fournit un bon support d'information. Des images du système d'exploitation, des diagrammes de brochage et plus sont fournis. Le firmware Ubuntu 14 pour Firefly mérite des éloges. Il fonctionne de manière stable, avec une faible consommation de mémoire. Bureau graphique - LXDE. Le rendu de l'interface ne semble pas parfaitement rapide, mais il est assez correct. Soit dit en passant, un lien utile sur la façon de prendre des captures d'écran dans LXDE: Lxde wiki . D'autres informations utiles sont comment régler l'heure: en utilisant dpkg-reconfigure tzdata . Oui, vous ne devinerez jamais ce qui, dans n'importe quel shell Linux, se fait de manière non triviale.



La planche a une structure sandwich (style sandwich). La carte mère contient SoC RockChip, RAM et un disque Samsung, Ethernet de Realtek, ainsi qu'une alimentation active et une puce de surveillance. La carte principale contient tout le reste: le contrôleur de sortie HDMI Lontium (seulement deux sorties), l'entrée HDMI Toshiba, le pont JMicron USB-SATA, la puce Ampak pour les interfaces sans fil. Deux parties sont connectées via un emplacement MXM3.0 relativement standard (module PCI Express mobile). La carte a de nombreuses interfaces, ainsi que quatre blocs principaux de broches, un total de 184 broches. De plus, le constructeur n'a pas lésiné sur les connecteurs mères, c'est certainement plus sûr, étant donné que même plusieurs lignes électriques 12V sont divorcées.

Mode de démarrage et firmware


La première chose à faire avec les planches est de les flasher. Pour une interaction occasionnelle avec les cartes de développement, l'IoT et tout cela, il est plus pratique d'avoir un système Linux sur votre ordinateur. Je l'ai traditionnellement Linux Fedora 64bit, pour toutes les 26e version. L'instruction officielle pour mettre la carte en mode de démarrage et flasher l'image du système d'exploitation: Flash Image .

Étant donné que l'utilitaire de mise à niveau de RockChip upgrade_tool nécessite l'installation de dépendances . Et toutes les versions de la distribution Linux sur le PC hôte ne disent pas lesquelles.
Je veux partager mon algorithme d'actions pour réussir le transfert de la carte pour démarrer et remplir l'image du système d'exploitation:

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 

Utiliser


Une fois le micrologiciel Firefly-RK3288 Reload réussi, débranchez le câble USB. Et vous pouvez connecter un moniteur, un clavier, une souris. Et installez lui-même le compilateur g ++. Ubuntu LXDE pour Firefly dispose d'un bon ensemble de logiciels minimalement suffisant. Bien sûr, le plus utile dans cette situation est le terminal. Il y a aussi un moniteur système simple, un éditeur de texte Leafpad, un clavier à l'écran, un gestionnaire de fichiers, un lecteur multimédia, un navigateur Chromium et plus encore.

Quelques captures d'écran:

image
Terminal et Leafpad
image
Informations sur la version
Bien sûr, ne pouvait pas se passer d'une mouche dans la pommade. La carte fonctionne en interne avec une résolution d'image Full HD et les captures d'écran sont enregistrées dans la même résolution. Mais sur la sortie HDMI, une image dans la résolution de seulement HD ready est envoyée au moniteur. Par conséquent, l'image n'est bien sûr pas assez claire. Mais une telle image fera l'affaire.

image
Un couple de films de bonne qualité n'est pas un problème pour le RK3288, l'utilisation du processeur est d'environ 50%.

Utilisation de périphériques I2C et de broches GPIO


L'une des caractéristiques les plus précieuses de ces cartes est peut-être la connexion de périphériques via le bus I2C, à l'aide de GPIO et d'autres interfaces. Firefly RK3288 Reload possède quatre bus I2C, même cinq, mais le bus zéro est utilisé pour les besoins internes de la carte, et les quatre autres - de 1 à 4 sont divorcés pour être utilisés par l'utilisateur.

Le réseau possède suffisamment d'informations générales sur l'utilisation de l'interface I2C. Pour interagir avec les appareils I2C via le terminal, je recommande cet article: «I2C sur Cubieboard avec Lubuntu» , ils y utilisent un «cube», mais ce n'est pas important.

Et pour vous connecter aux périphériques I2C par programmation, en utilisant la virtualisation de fichiers des bus I2C, vous pouvez recommander ceci: «Interfaçage avec les périphériques I2C» .
En tant que périphérique, I2C a utilisé un capteur de température Microchip - MCP9808. Sur le site Web du fabricant, il est facile de trouver une bonne spécification de l'appareil. Il s'agit de l'un des capteurs de la plus haute qualité et le plus cher du marché, nettement plus rapide et plus précis que les capteurs des séries TI et NXP LM.

image

J'ai utilisé ce capteur déjà soudé à la mini-carte CJMCU-9808. Tout aussi avec Ebay - les capteurs et le câblage Dupont - pour se passer de la soudure. La connexion est assez simple: VCC - à 3,3 V, GND - à la terre, SCL et SDA implémentent en fait le bus I2C (lignes d'horloge et données, respectivement), les broches A0 A1 A2 spécifient une partie de l'adresse 7 bits du périphérique I2C, ALERT peut, en principe, non utilisation, mais la ligne d'alarme sera encore impliquée. Sur la photo, le capteur de température est connecté au bus I2C 1, tous les contacts d'adresse sont tirés à la masse, ce qui signifie un 0 logique dans le bit d'adresse correspondant, si le câblage d'adresse est branché sur une alimentation de 3,3 V, alors ce bit sera logique 1. L'adresse de base de la puce MCP9808 est b0011 et en outre A2 A1 A0. Seulement sept bits, dans ce cas - b0011000, c'est-à-dire en hexadécimal - 0x18.

Ainsi, l'utilitaire de console produira:

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

On peut voir que sur le bus I2C numéro 1, il y a quelque chose avec l'adresse 0x18.

Appeler:
root @ firefly: / home / firefly # i2cget -y 1 0x18 0x05 w
donnera, par exemple: 0xbc01 (ce qui signifie une température de 27,75 C).

Paramètres du programme i2cget: 1 - numéro de bus; 0x18 - adresse connectée au bus d'appareil; 0x05 - enregistrer l'adresse (dans ce cas, la température); w - indique que le registre stocke 2 octets.

Bien sûr, vous pouvez utiliser plus complètement MCP9808 à partir de votre propre programme C ++. Gardez à l'esprit que le contenu du registre de température - 0xbc01 - est inversé, c'est-à-dire qu'il peut être représenté comme 0x01bc. Le premier octet 0x01 contient trois bits de la cause de l'alarme, un bit du signe et quatre bits hauts de la température. Le deuxième octet 0xbc contient les huit bits inférieurs de la température. Microchip code le contenu du registre de température en utilisant la méthode du format de complément à deux . Le douzième bit d'un registre à deux octets code un caractère. S'il est égal à 0, la température est positive. Si le onzième bit est 1, alors à la température ambiante calculée, vous devez ajouter 2 au degré de 7 degrés Celsius - 2 ^ 7 (128 C), si - est égal à 0, alors - rien ne doit être ajouté. De même, 1 dans le dixième bit ajoutera 2 ^ 6 (64 C). Et ainsi de suite, 1 dans le quatrième bit ajoutera 2 ^ 0 (1 C). 1 dans le troisième bit ajoutera 2 ^ -1 (0,5 C). 1 dans le dernier bit zéro ajoutera 2 ^ -4 (0,0625 C). Si le bit du signe (12) est 1, alors le problème est venu dans la maison, la température est négative. Et le décryptage du registre est quelque peu compliqué. Conformément aux principes du format de complément à deux, vous devez d'abord inverser les bits. Ensuite, vous devez en ajouter un au bit le moins utilisé, car les valeurs négatives ne sont pas codées avec 0, mais avec -1. Lors de la configuration du capteur de température par défaut, la précision maximale est utilisée - jusqu'à 0,0625 C. Dans ce cas, vous devez en ajouter un au dernier bit, qui est responsable de 0,0625 C. Autrement dit, vous pouvez simplement ajouter 1 à la valeur du registre de température. Si, par exemple, pour augmenter la vitesse, réduisez la précision de la mesure de température à l'aide du registre de configuration. Ensuite, à une température négative, vous devrez en ajouter un au bit le plus ancien ou ajouter un nombre correspondant à ce bit. Il faut ensuite traduire les bits en valeur de température de la même manière que dans le cas positif.

Ligne GPIO et ALARM


imageimage

Vous pouvez utiliser la ligne ALARME du capteur. Y compris en utilisant l'une des lignes GPIO de Firefly. Sur la photo, bien sûr, étamez et brûlez avec une LED archaïque et une résistance, mais ici le principe lui-même est important. Comment utiliser GPIO est bien décrit dans un autre article sur Habré: Linux: boutons, LED et GPIO . Mais comme il est correctement noté, il est difficile de déterminer le numéro Gpio à exporter pour une utilisation future. Pour voir quelles lignes de Gpio sont occupées et lesquelles ne le sont pas, vous pouvez utiliser la commande:

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

L'équipe

 firefly@firefly:~$ dmesg 

affiche également des informations sur Gpio.

L'étude a montré qu'il est possible d'exporter, par exemple, la broche GPIO numéro 262. Ce qui est indiqué sur la carte et dans la spécification comme GPIO8 A6. Parce que dans cette carte, comme d'habitude, les blocs GPIO contiennent chacun 32 éléments. On peut supposer que, peut-être, la formule magique est la suivante: 32 * numéro de bloc GPIO + numéro du suffixe. Donc, nous pouvons simplement obtenir 32 * 8 + 6 = 262. Maintenant, au début du programme, nous pouvons fournir une alimentation de 3,3 V à ce Gpio 262, et lorsque nous le quittons, arrêtez de le faire.

La spécification pour MCP9808 indique que la ligne ALARME sur elle est à drain ouvert, c'est-à-dire stock ouvert. Cela signifie que lorsqu'une alarme se produit, cette ligne est court-circuitée à la masse, sinon elle n'est pas court-circuitée. La nécessité d'utiliser une résistance est également soulignée. En pratique, il a été vérifié que cela est vraiment nécessaire, sinon, avec le passage du courant, l'intérieur du capteur sera chauffé à des températures élevées. Le schéma suivant est montré sur la photo: GPIO est connecté en série à la LED, résistance, drain ouvert (ALARME) du capteur. Il reste à utiliser le registre de configuration MCP9808 pour fixer les limites de température admissibles. Au-delà, une alarme se déclenche. Vous pouvez définir deux niveaux de température trop élevée et un niveau trop bas. En général, pour travailler avec ce capteur numérique, vous devez bien sûr lire attentivement les spécifications, passer en mode de configuration, revenir en mode de travail, etc. Ainsi, lorsque la température dépasse les limites définies, le courant passe par le contact ALARME et allume la LED.

En conclusion


Je voudrais mentionner une astuce utile pour contrôler la lueur des LED intégrées dans les cartes de développement. Les manuels de Cubieboard 6 montrent comment allumer LED1:

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

Et comment éteindre LED1:

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

Sur cette base, il a été découvert comment contrôler les LED du Firefly 3288 Reload.
Allumer la LED personnalisée jaune (en fait une LED bleue):

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

Désactiver cette LED:

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

Précautions


Lors de la conception de cartes de développement, il est important de faire preuve de prudence. Le codage, bien sûr, a lieu sur un PC, avec beaucoup de désir et de compilation croisée aussi. Ensuite, le code source est compilé sur une cible spécifique ou un fichier exécutable prêt à l'emploi est transféré sur la carte. Et si les cartes spécialisées sont largement conçues pour utiliser toutes sortes d'interfaces. Oui, et ils ne sont généralement pas très chers. Sur les PC coûteux eux-mêmes, il n'est pas recommandé d'utiliser des bus I2C, des lignes GPIO et autres. Cela peut entraîner des pannes informatiques désagréables. Au moins, les utilitaires de console comme i2cget en avertissent explicitement, citant certains modèles d'ordinateurs portables endommagés à titre d'exemple.

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


All Articles