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. afb Application Services AG, München
  2. IABG Industrieanlagen-Betriebsgesellschaft mbH, Koblenz, Ottobrunn bei München
  3. KES-Softwareentwicklung, Pforzheim (Home-Office möglich)
  4. PHOENIX CONTACT GmbH & Co. KG, Blomberg


Anzeige
Top-Angebote
  1. 299,99€ (Vorbesteller-Preisgarantie)
  2. 9,99€ (ohne Prime bzw. unter 29€ Einkauf zzgl. 3€ Versand)
  3. (u. a. 10€ Rabatt auf Game of Thrones, reduzierte Box-Sets und 2 Serien-Staffeln auf Blu-ray für...

Folgen Sie uns
       


  1. Leap Motion und Qualcomm

    Drahtloses VR-Headset mit Hand-Tracking ausprobiert

  2. Sandisk iNand 7350

    WD rüstet Speicher für Smartphones auf

  3. Uncharted 4

    34.000 Animationsphasen für ein Action-Adventure

  4. Aneeda und Dial

    Die Nicht-Smartwatch der Telekom wird wohl nicht fertig

  5. The Legend of Zelda (1986 und 1995)

    Ein Abenteuer-Fundament für die Ewigkeit

  6. Mehr Möbel als Gadget

    Eine Holzfernbedienung für das Smart Home

  7. Der Herr der Ringe

    Schatten des Krieges in Mittelerde angekündigt

  8. Konzeptfahrzeug

    Peugeot Instinct - autonom fahren oder manuell steuern

  9. Später Lesen

    Mozilla übernimmt Hersteller von Pocket

  10. Nokia 3, 5 und 6 im Hands on

    Ein guter Neuanfang ist gemacht



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Nintendo Switch eingeschaltet: Zerstückelte Konsole und gigantisches Handheld
Nintendo Switch eingeschaltet
Zerstückelte Konsole und gigantisches Handheld
  1. Nintendo Interner Speicher von Switch offenbar schon jetzt zu klein
  2. Hybridkonsole Leak zeigt Menüs der Nintendo Switch
  3. Hybridkonsole Hardware-Details von Nintendo Switch geleakt

Blackberry Key One im Hands on: Android-Smartphone mit toller Hardware-Tastatur
Blackberry Key One im Hands on
Android-Smartphone mit toller Hardware-Tastatur
  1. Digitale Assistenten Google und Amazon kämpfen um Vorherrschaft
  2. Xperia XA1 und XA1 Ultra Sony präsentiert zwei Android-Smartphones ab 300 Euro
  3. Alcatel A5 LED im Hands on Wenn die Smartphone-Rückseite wild blinkt

Asus Tinker Board im Test: Buntes Lotterielos rechnet schnell
Asus Tinker Board im Test
Buntes Lotterielos rechnet schnell
  1. Tinker-Board Asus bringt Raspberry-Pi-Klon
  2. Sopine A64 Weiterer Bastelrechner im Speicherriegel-Format erscheint

  1. Re: Ich will auch!

    ArcherV | 11:15

  2. Re: Mehrere Betriebssysteme...

    Berner Rösti | 11:12

  3. Re: Hardware Tasten Vorteile?

    tha_specializt | 11:12

  4. Re: 5G teurer als FTTH?

    Reci | 11:10

  5. Re: Interplanetare Flüge?

    Desertdelphin | 11:10


  1. 10:30

  2. 10:05

  3. 10:00

  4. 09:54

  5. 09:15

  6. 08:03

  7. 07:54

  8. 07:44


  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