Verwenden des Firefly-RK3288-Reload-Boards mit dem RockChip RK3288-SoC Mikrochip Digitaler I2C-Wärmesensor - MCP9808

Firefly-RK3288 Nachladen


Die Wahl eines Entwicklungsboards für Experimente fiel auf ein ziemlich ausgeklügeltes Modell des chinesischen Herstellers T-Chip. Sie verkaufen Produkte unter der Marke Firefly. Sie sind spezialisiert auf Boards mit Systemen, die auf dem RockChip-Chip basieren. RK3288 ist die produktivste 32-Bit-Lösung dieses chinesischen Unternehmens. SoC von RockChip und Allwinner ist im Vergleich zu Broadcom-Chips in RaspberryPi nicht nur in Bezug auf die besten Eigenschaften, sondern auch in Bezug auf die Produktionstechnologie günstig - 28 nm gegenüber 40 nm. Aber in diesem Fall sind die Chinesen natürlich teurer. RK3399 hat sich nicht für ein noch steileres 64-Bit-System entschieden, auch weil Grund zu der Annahme besteht, dass es bereits deutlich heißer ist. Während der RK3288 unter Last auch ohne Verwendung von Heizkörpern nicht sehr heiß ist.

Produktseite . Die wichtigsten Hardwareparameter des Geräts: 4-Kern-ARM Cortex-A17 1,8 GHz (einige Quellen bestehen darauf, dass es sich um Cortex-A12 oder A15 handelt, dies ist jedoch nicht besonders wichtig), 2 GB DDR3-Zweikanal-, 16 GB eMMC-Laufwerk, Gigabit-Ethernet.

Gesamtansicht

Ich habe es bei Ebay gekauft, es war fast der einzige Ort, an dem diese Boards nach Russland bestellt werden können. Der Online-Shop des chinesischen Firefly selbst sendet nicht nach Russland. Nicht nach Russland und Indiegogo geschickt. Was lustig ist, in der Liste der Länder, die gesendet werden sollen, haben diese seltsamen Leute angeblich sogar Staaten, die es nicht gibt :). Der Verkäufer bei Ebay schickte eine Platine in guter Konfiguration - eine Platine, ein Netzteil (Sie benötigen 12 V 1,5 A, wie es sollte mit einem Abstand von 2 A), einen Schal mit Antenne, Acrylplatten des Gehäuses mit Befestigungselementen. Der Adapter gilt für eine amerikanische Steckdose, aber jeder sollte einen Wanderadapter haben :).

Wie die CubieBoard-Boards von CubieTech, die auf dem russischen Markt besser bekannt sind, bietet Firefly eine gute Informationsunterstützung. Betriebssystembilder, Pinbelegungsdiagramme und mehr werden bereitgestellt. Die Ubuntu 14-Firmware für Firefly ist lobenswert. Es funktioniert stabil, geringer Speicherverbrauch. Grafik-Desktop - LXDE. Das Rendern der Benutzeroberfläche scheint nicht sehr schnell zu sein, ist aber recht anständig. Übrigens ein nützlicher Link zum Erstellen von Screenshots im LXDE: Lxde-Wiki . Weitere nützliche Informationen zum Einstellen der Uhrzeit: Verwenden von dpkg-refreshfigure tzdata . Ja, Sie werden nie erraten, was in einer Linux-Shell nicht trivial gemacht wird.



Das Brett hat eine Sandwichstruktur (Sandwich-Stil). Die Kernplatine enthält SoC RockChip, RAM und ein Samsung-Laufwerk, Realteks Ethernet sowie einen Aktivstrom- und Überwachungschip. Die Hauptplatine enthält alles andere: den Lontium HDMI-Ausgangscontroller (nur zwei Ausgänge), den Toshiba HDMI-Eingang, die JMicron USB-SATA-Brücke und den Ampak-Chip für drahtlose Schnittstellen. Zwei Teile sind über einen relativ normalen MXM3.0-Steckplatz (mobiles PCI Express-Modul) verbunden. Die Platine verfügt über viele Schnittstellen sowie vier Hauptblöcke mit Stiften, insgesamt 184 Stifte. Darüber hinaus hat der Hersteller nicht auf Mutterstecker verzichtet, es ist sicherlich sicherer, da sogar mehrere 12-V-Stromleitungen geschieden sind.

Boot-Modus und Firmware


Das erste, was Sie mit den Boards machen müssen, ist, sie zu flashen. Für gelegentliche Interaktionen mit Entwicklungsboards, IoT und all dem ist es bequemer, ein Linux-System auf Ihrem Computer zu haben. Ich habe es traditionell Linux Fedora 64bit, für alle 26. Version. Die offizielle Anweisung zum Versetzen des Boards in den Startmodus und zum Flashen des Betriebssystem-Images: Flash-Image .

Da das Füllprogramm upgrade_tool von RockChip Abhängigkeiten benötigt, um installiert zu werden . Und nicht jede Version der Linux-Distribution auf dem Host-PC sagt welche.
Ich möchte meinen Aktionsalgorithmus für die erfolgreiche Übertragung der Karte zum Booten und das Ausfüllen des Betriebssystem-Images freigeben:

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 

Verwenden Sie


Trennen Sie nach erfolgreichem Laden der Firmware für Firefly-RK3288 das USB-Kabel. Und Sie können einen Monitor, eine Tastatur und eine Maus anschließen. Und installieren Sie selbst den g ++ - Compiler. Ubuntu LXDE für Firefly verfügt über eine gute, minimal ausreichende Software. Das nützlichste in dieser Situation ist natürlich das Terminal. Es gibt auch einen einfachen Systemmonitor, einen Leafpad-Texteditor, eine Bildschirmtastatur, einen Dateimanager, einen Media Player, einen Chromium-Browser und vieles mehr.

Ein paar Screenshots:

Bild
Terminal und Leafpad
Bild
Versionsinformationen
Natürlich konnte man nicht auf eine Fliege in der Salbe verzichten. Das Board arbeitet intern mit Full HD-Bildauflösung, und Screenshots werden in derselben Auflösung gespeichert. Am HDMI-Ausgang wird dem Monitor jedoch ein Bild mit einer Auflösung von nur HD-fähig zugeführt. Daher ist das Bild natürlich nicht klar genug. Aber ein solches Bild reicht für Experimente.

Bild
Ein paar Filme in guter Qualität sind für den RK3288 kein Problem, die CPU-Auslastung liegt bei etwa 50%.

Verwenden von I2C-Peripheriegeräten und GPIO-Pins


Möglicherweise ist eines der wertvollsten Merkmale solcher Karten die Verbindung von Peripheriegeräten über den I2C-Bus über GPIO und andere Schnittstellen. Firefly RK3288 Reload verfügt über vier I2C-Busse, sogar fünf, aber der Nullbus wird für die internen Anforderungen der Karte verwendet, und die anderen vier - von 1 bis 4 - sind für die Verwendung durch den Benutzer geschieden.

Das Netzwerk verfügt über genügend allgemeine Informationen zur Verwendung der I2C-Schnittstelle. Um mit I2C-Geräten über das Terminal zu interagieren, empfehle ich diesen Artikel: "I2C auf Cubieboard mit Lubuntu" , sie verwenden dort einen "Cube", aber das ist nicht wichtig.

Für die programmgesteuerte Verbindung mit den I2C-Peripheriegeräten mithilfe der Dateivirtualisierung von I2C-Bussen können wir Folgendes empfehlen: „Schnittstelle mit I2C-Geräten“ .
Als Peripheriegerät verwendete I2C einen Microchip-Temperatursensor - MCP9808. Auf der Website des Herstellers finden Sie leicht eine gute Spezifikation des Geräts. Dies ist einer der qualitativ hochwertigsten und teuersten Sensoren auf dem Markt, deutlich schneller und genauer als die Sensoren der TI- und NXP LM-Serie.

Bild

Ich habe diesen Sensor verwendet, der bereits mit der Mini-Platine CJMCU-9808 verlötet ist. Auch alles bei Ebay - sowohl die Sensoren als auch die Dupont-Verkabelung - kommt ohne Löten aus. Die Verbindung ist recht einfach: VCC - zu 3,3 V Leistung, GND - zu Masse, SCL und SDA implementieren tatsächlich den I2C-Bus (Taktleitungen bzw. Daten), Pins A0 A1 A2 spezifizieren einen Teil der 7-Bit-Adresse des I2C-Geräts, ALERT kann im Prinzip nicht verwenden, aber die Alarmleitung wird noch weiter beteiligt sein. Auf dem Foto ist der Temperatursensor an den I2C 1-Bus angeschlossen, alle Adresskontakte sind gegen Masse gezogen, was eine logische 0 im entsprechenden Adressbit bedeutet. Wenn die Adressverdrahtung an 3,3 V angeschlossen ist, ist dieses Bit logisch 1. Die Basisadresse des MCP9808-Chips lautet b0011 und weiter A2 A1 A0. Nur sieben Bits, in diesem Fall - b0011000, dh in hex - 0x18.

Das Konsolendienstprogramm erzeugt also:

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

Es ist zu sehen, dass sich auf dem I2C-Bus Nummer 1 etwas mit der Adresse 0x18 befindet.

Rufen Sie an:
root @ firefly: / home / firefly # i2cget -y 1 0x18 0x05 w
ergibt zum Beispiel: 0xbc01 (was eine Temperatur von 27,75 ° C bedeutet).

Parameter des i2cget-Programms: 1 - Busnummer; 0x18 - an den Gerätebus angeschlossene Adresse; 0x05 - Registeradresse (in diesem Fall Temperatur); w - zeigt an, dass das Register 2 Bytes speichert.

Natürlich können Sie MCP9808 von Ihrem eigenen C ++ - Programm aus vollständiger verwenden. Beachten Sie, dass der Inhalt des Temperaturregisters - 0xbc01 - invertiert ist, dh als 0x01bc dargestellt werden kann. Das erste Byte 0x01 enthält drei Bits der Alarmursache, ein Bit des Vorzeichens und vier hohe Bits der Temperatur. Das zweite Byte 0xbc enthält die unteren acht Bits der Temperatur. Der Mikrochip codiert den Inhalt des Temperaturregisters unter Verwendung der Zweierkomplementformatmethode . Das zwölfte Bit eines Doppelbyte-Registers codiert ein Zeichen. Wenn es 0 ist, ist die Temperatur positiv. Wenn das elfte Bit 1 ist, müssen Sie zur berechneten Umgebungstemperatur 2 zum Grad von 7 Grad Celsius addieren - 2 ^ 7 (128 C). Wenn - gleich 0, dann - muss nichts hinzugefügt werden. In ähnlicher Weise addiert 1 im zehnten Bit 2 ^ 6 (64 C). Und so weiter addiert 1 im vierten Bit 2 ^ 0 (1 C). 1 im dritten Bit addiert 2 ^ -1 (0,5 C). 1 im letzten Nullbit addiert 2 ^ -4 (0,0625 C). Wenn das Bit des Vorzeichens (12.) 1 ist, dann ist das Problem im Haus aufgetreten, die Temperatur ist negativ. Und die Entschlüsselung des Registers ist etwas kompliziert. Gemäß den Prinzipien des Zweierkomplementformats müssen Sie zuerst die Bits invertieren. Dann müssen Sie eins zum am wenigsten verwendeten Bit hinzufügen, weil negative Werte werden nicht mit 0, sondern mit -1 codiert. Bei der Standardkonfiguration des Temperatursensors wird die maximale Genauigkeit verwendet - bis zu 0,0625 ° C. In diesem Fall müssen Sie dem letzten Bit, das für 0,0625 ° C verantwortlich ist, eine hinzufügen. Sie können einfach 1 zum Temperaturregisterwert hinzufügen. Wenn Sie beispielsweise die Geschwindigkeit erhöhen möchten, verringern Sie die Genauigkeit der Temperaturmessung mithilfe des Konfigurationsregisters. Bei einer negativen Temperatur müssen Sie dem älteren Bit eine hinzufügen oder eine diesem Bit entsprechende Zahl hinzufügen. Dann ist es notwendig, die Bits auf die gleiche Weise wie im positiven Fall in den Temperaturwert zu übersetzen.

GPIO- und ALARM-Leitung


BildBild

Sie können die ALARM-Linie des Sensors verwenden. Einschließlich der Verwendung einer der GPIO-Leitungen des Firefly. Auf dem Foto natürlich Zinn und Brennen mit einer archaischen LED und Widerstand, aber hier ist das Prinzip selbst wichtig. Die Verwendung von GPIO wird in einem anderen Artikel über Habré ausführlich beschrieben: Linux: Tasten, LEDs und GPIO . Wie jedoch richtig bemerkt wird, ist es schwierig zu bestimmen, welche Gpio-Nummer für die zukünftige Verwendung exportiert werden soll. Um zu sehen, welche Zeilen von Gpio belegt sind und welche nicht, können Sie den folgenden Befehl verwenden:

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

Das Team

 firefly@firefly:~$ dmesg 

zeigt auch Informationen über Gpio.

Die Studie hat gezeigt, dass beispielsweise GPIO-Pin Nr. 262 exportiert werden kann. Dies ist auf der Platine und in der Spezifikation als GPIO8 A6 angegeben. Weil In dieser Karte enthalten GPIO-Blöcke wie üblich jeweils 32 Elemente. Es kann angenommen werden, dass die Zauberformel möglicherweise folgende lautet: 32 * GPIO-Blocknummer + Nummer aus dem Postfix. Wir können also nur 32 * 8 + 6 = 262 erhalten. Jetzt können wir zu Beginn des Programms diesen Gpio 262 mit 3,3 V versorgen, und wenn wir ihn beenden, hören Sie damit auf.

Die Spezifikation für MCP9808 zeigt an, dass die darauf befindliche ALARM-Leitung ein offener Abfluss ist, d.h. offener Bestand. Dies bedeutet, dass bei Auftreten eines Alarms diese Leitung gegen Masse kurzgeschlossen wird, andernfalls wird sie nicht kurzgeschlossen. Die Notwendigkeit, einen Widerstand zu verwenden, wird ebenfalls betont. In der Praxis wurde überprüft, dass dies wirklich notwendig ist, da sonst das Innere des Sensors beim Durchgang des Stroms auf hohe Temperaturen erwärmt wird. Das folgende Diagramm ist auf dem Foto dargestellt: GPIO ist in Reihe mit der LED, dem Widerstand und dem offenen Drain (ALARM) des Sensors geschaltet. Es bleibt das Konfigurationsregister MCP9808 zu verwenden, um die zulässigen Temperaturgrenzen festzulegen. Wenn Sie darüber hinausgehen, wird ein Alarm ausgelöst. Sie können zwei Stufen mit zu hoher Temperatur und eine Stufe mit zu niedriger Temperatur einstellen. Um mit diesem digitalen Sensor arbeiten zu können, müssen Sie im Allgemeinen die technischen Daten sorgfältig lesen, in den Konfigurationsmodus wechseln, in den Arbeitsmodus zurückkehren und vieles mehr. Wenn die Temperatur die eingestellten Grenzen überschreitet, fließt der Strom durch den ALARM-Kontakt und leuchtet die LED auf.

Abschließend


Ich möchte einen nützlichen Trick erwähnen, um das Leuchten von LEDs zu steuern, die in Entwicklungsplatinen eingebaut sind. Die Handbücher für Cubieboard 6 zeigen, wie LED1 eingeschaltet wird:

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

Und wie man LED1 ausschaltet:

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

Auf dieser Grundlage wurde herausgefunden, wie die LEDs im Firefly 3288 Reload gesteuert werden können.
Einschalten der gelben benutzerdefinierten LED (eigentlich eine blaue LED):

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

Deaktivieren dieser LED:

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

Vorsichtsmaßnahmen


Beim Entwerfen für Entwicklungsboards ist Vorsicht geboten. Das Codieren findet natürlich auf einem PC statt, mit viel Verlangen und auch Cross-Compilation. Anschließend wird der Quellcode auf einem bestimmten Ziel kompiliert oder eine vorgefertigte ausführbare Datei auf die Karte übertragen. Und wenn Spezialplatinen größtenteils für die Verwendung aller Arten von Schnittstellen ausgelegt sind. Ja, und sie sind normalerweise nicht sehr teuer. Auf den teuren PCs selbst wird nicht empfohlen, I2C-Busse, GPIO-Leitungen und dergleichen zu verwenden. Dies kann zu unangenehmen Computerausfällen führen. Zumindest Konsolendienstprogramme wie i2cget warnen ausdrücklich davor und führen als Beispiel einige Modelle beschädigter Laptops an.

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


All Articles