Abo
  • Services:

Mal eben einen Treiber schreiben

Ich habe bereits Ladeprogramme für Xilinx-FPGAs geschrieben, finde aber spontan davon keines wieder, so schreibe ich einen neuen Linux-Treiber. Der Treiber erzeugt ein Device namens /dev/fpga, das genauso funktioniert wie der oben beschriebene Binärcode.

Stellenmarkt
  1. Stadtverwaltung Neckarsulm, Neckarsulm bei Heilbronn
  2. Schwarz Zentrale Dienste KG, Neckarsulm

Wird das "/dev/fpga/"-Device geöffnet, setzt der Treiber den Pin PROG_B am FPGA, der mit dem Pin GPK7 des SoC verbunden ist, kurz auf Low und wartet darauf, dass am Pin INIT_B/GPKG13 ein High-Pegel anliegt. Daten, die an das Device geschrieben werden, schiebt der Treiber an den Pin DIN/GPK11 weiter und benutzt den Pin CCLK/GPK3 für das Taktsignal. Wird das Device geschlossen, wartet der Treiber darauf, dass der Signalpegel an Pin DONE/GPK5 auf High wechselt. Das FPGA-Image kann so unter Linux durch einen einfachen Schreibvorgang auf den FPGA geladen werden.

Damit kann das originale FPGA-Image, das sich in der "fp"-Datei im Speicherabbild befindet, unter Linux geladen werden. Ich habe auch ein eigenes kleines FPGA-Image erzeugt, das am Pin INIT_B vom FPGA einmal pro Sekunde ein Signal an- und ausgeschaltet. Ich muss in Linux nur den Zustand des SoC-Pins GPK13 anschauen und kann den Wechseln verfolgen.

Fünf weitere Pins erledigt, trotzdem noch jede Menge übrig.

Mehr, mehr, mehr!

GPB3 kontrolliert die Display-Helligkeit. Ist er aus, ist das Display etwas dunkler, ist er an, wird es heller. Da GPB3 auch als Timer- beziehungsweise PWM-Ausgang programmiert werden kann, könnte es möglich sein, die Helligkeit in mehreren Schritten zu dimmen. Außerdem finde ich heraus, dass GPF3 die Run/Stop-LED an- und ausschaltet. Wie die Farbe gesteuert wird, weiß ich noch nicht.

GPF2 steht in enger Verbindung mit dem Code, der sich um den USB-Client-Anschluss kümmert. Wenn ich die Firmware richtig verstanden habe, dient er zum Erkennen einer eingesteckten USB-Verbindung (VBUS detect), wie es auch bei den SoC der SMDK2416-Familie dokumentiert wird. Allerdings hat sich dessen Signal nicht verändert, wenn ich einen PC über ein USB-Kabel angesteckt oder herausgezogen habe. Hier muss ich noch einmal intensiver testen. Ich stoße zudem auf den Code zur Ansteuerung des Ethernet-Chips per SPI-Bus über die Pins GPE11, GPE12 und GPE13, der Pin GPF1 empfängt Interrupt-Signale vom Chip. Das wusste ich aber schon.

Ich finde aber auch einige Dinge, die keinen Sinn ergeben. Einige Codeteile betreffen die Pins GPJ2 und GPJ3 des SoC. Diese Pins gibt es nicht und sie sind auch in der Dokumentation nicht zu finden. Es gibt eine einzelne Zeile in der Dokumentation, welche die Adressen der Pins angibt. Eventuell hat jemand bei Samsung diese Zeile einfach übersehen, als das Handbuch geschrieben wurde und Inhalte von früheren Dokumentationen eingefügt wurden. Es ergibt für die Firmware trotzdem keinen Sinn, dass diese Pins angesprochen werden.

Die Firmware steuert noch eine ganze Reihe weiterer Pins an, die ich bislang nicht kenne, aber sie stehen auf meiner Todo-Liste.

Pin-Suche, die Zweite

Mittlerweile habe ich das Oszilloskop erneut aufgeschraubt, diesmal will ich weitere Pins und ihre Verwendung identifizieren. Wieder fange ich an, Pins an- und auszuschalten, diesmal allerdings systematischer.

Ich beginne mit GPA1, dem ersten GPIO-Pin, der ein Klickgeräusch im Oszilloskop verursachte. Dafür schreibe ich ein Shell-Programm, das den Pin einmal pro Sekunde schaltet:

# Use /sys gpio support to export GPA1 to userspace
echo 1 >/sys/class/gpio/export

# Make GPA1 an output
echo out >/sys/class/gpio/gpio1/direction

# Toggle GPA1 every second
while sleep 1; do
    echo 0 >/sys/class/gpio/gpio1/value
    sleep 1
    echo 1 >/sys/class/gpio/gpio1/value
done

Ich kann wieder das Klicken hören, aber nicht genau bestimmen, von welchem Relais es stammt. So teste ich die Anschlüsse der Relais mit dem Multimeter durch. Ich finde heraus, dass GPA1 einen der Relais für Kanal 1 am Analog-Frontend ansteuert.

Durch den disassemblierten Quellcode der Firmware weiß ich, dass GPA12 und GPA15 oft zur gleichen Zeit geändert werden, sie analysiere ich als Nächstes. GPA12 bleibt erst einmal ein Mysterium, aber GPA15 steuert das andere Relais von Kanal 1.

Ich gehe die Liste der als Ausgang geschalteten GPIO-Pins weiter durch und teste viele Bauteile im Analog-Frontend. Dabei gehe ich teilweise von Vermutungen aus, die ich aufgrund des Firmware-Codes aufgestellt habe. Zum Beispiel werden GPA0 und GPD8 meist gemeinsam geschaltet und es zeigt sich, dass sie zwei Solidstate-Relais steuern.

  • (Foto: Christer Weinigel)
  • (Foto: Christer Weinigel)
  • I2C-Kommunikation (Foto: Christer Weinigel)
  • (Foto: Christer Weinigel)
  • (Foto: Christer Weinigel)
  • (Foto: Christer Weinigel)
  • Analog-Frontend (Foto: Christer Weinigel)
Analog-Frontend (Foto: Christer Weinigel)

So gelingt es mir schließlich, folgende Liste aufzustellen:

GPA0    Channel 1 solid state relay (U8)
GPA1    Channel 1 mechanical relay (KE)
GPA15   Channel 1 mechanical relay (KD)

GPD8    Channel 2 solid state relay (U7)
GPE1    Channel 2 mechanical relay (KC)
GPH12   Channel 2 mechanical relay (KB)

GPC7    External trigger mechanical relay (KA)
GPE3    Mechanical relay with unknown function (KF)

In der Firmware werden GPC7 und GPE3 ebenfalls gleichzeitig gesteuert. Es ist deshalb sehr wahrscheinlich, dass das unbekannte Relais an GPE3 etwas mit dem Eingang des externen Triggers zu tun hat.

Als Bonus kann ich auch die Buzzer-Ansteuerung finden:

GPB0    Buzzer

Ich dachte ursprünglich, dass ich den Pin GPB0 bereits ausprobiert hätte, aber dabei habe ich wohl einen Fehler gemacht. Darum ist es wichtig, alles zweimal zu testen. Da der Pin auch mit einem Timer für eine PWM-Ausgabe kombiniert werden kann, sollte es einfach sein, denn Buzzer verschiedene Frequenzen spielen zu lassen.

Das wird mir langsam alles etwas zu aufwendig. Auf diese Weise jeden Pin zu bestimmen, würde viel Zeit kosten. Schließlich gibt es mehr als hundert Pins und eine Vielzahl potenzieller Bausteine. Ich müsste Tausende von Kombinationen mit dem Multimeter testen. Außerdem würde ich so keine Eingabe-Pins finden.

 I2C mit LinuxArbeite cleverer, nicht fleißiger 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7.  


Anzeige
Hardware-Angebote
  1. auf ausgewählte Corsair-Netzteile
  2. ab 349€
  3. und 4 Spiele gratis erhalten

AgentBignose 25. Nov 2016

Ähm, ja.... Was meinst du wie Leute wie der ursprüngliche Autor gefragt sind...

Karl-Heinz 23. Nov 2016

heißen die Dinger hier. Vielleicht bin ich aber auch nur zu oldschool :)

Luu 23. Nov 2016

Einfach nur große Klasse. Könnten sich andere eine Scheibe von abschneiden.


Folgen Sie uns
       


Blackberry Key2 - Test

Das Blackberry Key2 überzeugte uns nicht im Test - trotz guter Tastatur.

Blackberry Key2 - Test Video aufrufen
Youtube Music, Deezer und Amazon Music: Musikstreaming buchen ist auf dem iPhone teurer
Youtube Music, Deezer und Amazon Music
Musikstreaming buchen ist auf dem iPhone teurer

Wer seinen Musikstreamingdienst auf einem iPhone oder iPad bucht, muss oftmals mehr bezahlen als andere Kunden. Der Grund liegt darin, dass Apple - außer bei eigenen Diensten - einen Aufschlag von 30 Prozent behält. Spotify hat Konsequenzen gezogen.
Ein Bericht von Ingo Pakalski

  1. Filme und Serien Nutzung von kostenpflichtigem Streaming steigt stark an
  2. Highend-PC-Streaming Man kann sogar die Grafikkarte deaktivieren
  3. Golem.de-Livestream Halbgott oder Despot?

Samsung Flip im Test: Brainstorming mit Essstäbchen und nebenbei Powerpoint
Samsung Flip im Test
Brainstorming mit Essstäbchen und nebenbei Powerpoint

Ob mit dem Finger, dem Holzstift oder Essstäbchen: Vor dem Smartboard Samsung Flip sammeln sich in unserem Test schnell viele Mitarbeiter und schreiben darauf. Nebenbei läuft Microsoft Office auf einem drahtlos verbundenen Notebook. Manche Vorteile gehen jedoch auf Kosten der Bedienbarkeit.
Ein Test von Oliver Nickel

  1. Indien Samsung eröffnet weltgrößte Smartphone-Fabrik
  2. Foundry Samsung aktualisiert Node-Roadmap bis 3 nm
  3. Bug Samsungs Messenger-App verschickt ungewollt Fotos

Segelschiff: Das Vindskip steckt in der Flaute
Segelschiff
Das Vindskip steckt in der Flaute

Hochseeschiffe gelten als große Umweltverschmutzer. Neue saubere Antriebe sind gefragt. Der Norweger Terje Lade hat ein futuristisches Segelschiff entwickelt. Doch solch ein neuartiges Konzept umzusetzen, ist nicht so einfach.
Ein Bericht von Werner Pluta

  1. Energy Observer Toyota unterstützt Weltumrundung von Brennstoffzellenschiff
  2. Hyseas III Schottische Werft baut Hochseefähre mit Brennstoffzelle
  3. Kreuzschifffahrt Wie Brennstoffzellen Schiffe sauberer machen

    •  /