Abo
  • Services:
Anzeige
Code des Bootloaders
Code des Bootloaders (Bild: Christer Weinigel)

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.

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.

Anzeige

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 

eye home zur Startseite
AgentBignose 25. Nov 2016

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

Themenstart

Karl-Heinz 23. Nov 2016

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

Themenstart

Luu 23. Nov 2016

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

Themenstart

Kommentieren



Anzeige

Stellenmarkt
  1. Wirecard Technologies GmbH, Aschheim bei München
  2. Robert Bosch GmbH, Leonberg
  3. über Hays AG, Baden-Württemberg
  4. Diehl Comfort Modules, Hamburg


Anzeige
Hardware-Angebote
  1. beim Kauf ausgewählter Gigabyte-Mainboards

Folgen Sie uns
       


  1. Nintendo

    Super Mario Run für iOS läuft nur mit Onlineverbindung

  2. USA

    Samsung will Note 7 in Backsteine verwandeln

  3. Hackerangriffe

    Obama will Einfluss Russlands auf US-Wahl untersuchen lassen

  4. Free 2 Play

    US-Amerikaner verzockte 1 Million US-Dollar in Game of War

  5. Die Woche im Video

    Bei den Abmahnanwälten knallen wohl schon die Sektkorken

  6. DNS NET

    Erste Kunden in Sachsen-Anhalt erhalten 500 MBit/s

  7. Netzwerk

    EWE reduziert FTTH auf 40 MBit/s im Upload

  8. Rahmenvertrag

    VG Wort will mit Unis neue Zwischenlösung für 2017 finden

  9. Industriespionage

    Wie Thyssenkrupp seine Angreifer fand

  10. Kein Internet

    Nach Windows-Update weltweit Computer offline



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Gigaset Mobile Dock im Test: Das Smartphone wird DECT-fähig
Gigaset Mobile Dock im Test
Das Smartphone wird DECT-fähig

Civilization: Das Spiel mit der Geschichte
Civilization
Das Spiel mit der Geschichte
  1. Civilization 6 Globale Strategie mit DirectX 12
  2. Take 2 GTA 5 saust über die 70-Millionen-Marke
  3. Civilization 6 im Test Nachhilfestunde(n) beim Städtebau

Oculus Touch im Test: Tolle Tracking-Controller für begrenzte Roomscale-Erfahrung
Oculus Touch im Test
Tolle Tracking-Controller für begrenzte Roomscale-Erfahrung
  1. Microsoft Oculus Rift bekommt Kinomodus für Xbox One
  2. Gestensteuerung Oculus Touch erscheint im Dezember für 200 Euro
  3. Facebook Oculus zeigt drahtloses VR-Headset mit integriertem Tracking

  1. Re: Diese ganzen angeblichen F2P sollte man...

    DetlevCM | 19:32

  2. Re: Uuund raus

    stoneburner | 19:29

  3. Re: mit Linux...

    Keep The Focus | 19:29

  4. Re: Eigentlich reicht auch der Entzug der...

    stoneburner | 19:26

  5. Macht viel Sinn

    chithanh | 19:17


  1. 17:27

  2. 12:53

  3. 12:14

  4. 11:07

  5. 09:01

  6. 18:40

  7. 17:30

  8. 17:13


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel