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

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.



Anzeige

Stellenmarkt
  1. mobileX AG, München
  2. über HRM CONSULTING GmbH, Konstanz (Home-Office)
  3. Robert Bosch GmbH, Leonberg
  4. Robert Bosch GmbH, Stuttgart-Feuerbach


Anzeige
Blu-ray-Angebote
  1. 16,99€ (ohne Prime bzw. unter 29€ Einkauf + 3€ Versand)
  2. 39,99€ (Vorbesteller-Preisgarantie)
  3. (u. a. The Revenant, Batman v Superman, James Bond Spectre, Legend of Tarzan)

Folgen Sie uns
       


  1. Heiko Maas

    "Kein Wunder, dass Facebook seine Vorgaben geheim hält"

  2. Virtual Reality

    Oculus Rift unterstützt offiziell Roomscale-VR

  3. FTP-Client

    Filezilla bekommt ein Master Password

  4. Künstliche Intelligenz

    Apple arbeitet offenbar an eigenem AI-Prozessor

  5. Die Woche im Video

    Verbogen, abgehoben und tiefergelegt

  6. ZTE

    Chinas großes 5G-Testprojekt läuft weiter

  7. Ubisoft

    Far Cry 5 bietet Kampf gegen Sekte in und über Montana

  8. Rockstar Games

    Waffenschiebereien in GTA 5

  9. Browser-Games

    Unreal Engine 4.16 unterstützt Wasm und WebGL 2.0

  10. Hasskommentare

    Bundesrat fordert zahlreiche Änderungen an Maas-Gesetz



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Debatte nach Wanna Cry: Sicherheitslücken veröffentlichen oder zurückhacken?
Debatte nach Wanna Cry
Sicherheitslücken veröffentlichen oder zurückhacken?
  1. Sicherheitslücke Fehlerhaft konfiguriertes Git-Verzeichnis bei Redcoon
  2. Hotelketten Buchungssystem Sabre kompromittiert Zahlungsdaten
  3. Onlinebanking Betrüger tricksen das mTAN-Verfahren aus

Sphero Lightning McQueen: Erst macht es Brummbrumm, dann verdreht es die Augen
Sphero Lightning McQueen
Erst macht es Brummbrumm, dann verdreht es die Augen

Quantencomputer: Nano-Kühlung für Qubits
Quantencomputer
Nano-Kühlung für Qubits
  1. IBM Q Mehr Qubits von IBM
  2. Quantencomputer Was sind diese Qubits?
  3. Verschlüsselung Kryptographie im Quantenzeitalter

  1. Re: Siri und diktieren

    Lord Gamma | 19:30

  2. Anbindung an Passwortmanager

    nille02 | 19:23

  3. Von Maas lernen

    klaus9999 | 19:12

  4. Re: Geniale Idee!

    klaus9999 | 19:08

  5. Re: Mal ne dumme Gegenfrage:

    hle.ogr | 19:02


  1. 12:54

  2. 12:41

  3. 11:44

  4. 11:10

  5. 09:01

  6. 17:40

  7. 16:40

  8. 16:29


  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