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. Blickle Räder+Rollen GmbH u. Co. KG, Rosenfeld
  2. octeo MULTISERVICES GmbH, Duisburg
  3. Kaufmännische Krankenkasse ? KKH, Hannover
  4. über Hays AG, Berlin


Anzeige
Blu-ray-Angebote
  1. (u. a. Hobbit Trilogie Blu-ray 43,89€ und Batman Dark Knight Trilogy Blu-ray 17,99€)
  2. 24,99€ (Vorbesteller-Preisgarantie)
  3. (u. a. Drive 7,79€, John Wick: Kapitel 2 9,99€ und Predator Collection 17,49€)

Folgen Sie uns
       


  1. Autonomes Fahren

    Singapur kündigt fahrerlose Busse an

  2. Coinhive

    Kryptominingskript in Chat-Widget entdeckt

  3. Monster Hunter World angespielt

    Die Nahrungskettensimulation

  4. Rechtsunsicherheit bei Cookies

    EU warnt vor Verzögerung von ePrivacy-Verordnung

  5. Schleswig-Holstein

    Bundesland hat bereits 32 Prozent echte Glasfaserabdeckung

  6. Tesla Semi

    Teslas Truck gibt es ab 150.000 US-Dollar

  7. Mobilfunk

    Netzqualität in der Bahn weiter nicht ausreichend

  8. Bake in Space

    Bloß keine Krümel auf der ISS

  9. Sicherheitslücke

    Fortinet vergisst, Admin-Passwort zu prüfen

  10. Angry Birds

    Rovio verbucht Quartalsverlust nach Börsenstart



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Doom-Brettspiel-Neuauflage im Test: Action am Wohnzimmertisch
Doom-Brettspiel-Neuauflage im Test
Action am Wohnzimmertisch
  1. Doom, Wolfenstein, Minecraft Nintendo kriegt große Namen
  2. Gamedesign Der letzte Lebenspunkt hält länger

Cubesats: Startup steuert riesigen Satellitenschwarm von Berlin aus
Cubesats
Startup steuert riesigen Satellitenschwarm von Berlin aus
  1. SAEx Internet-Seekabel für Südatlantikinsel St. Helena
  2. The Cabin Satelliten-Internet statt 1 Million Euro an die Telekom
  3. Sputnik Piep, piep, kleiner Satellit

Coffee Lake vs. Ryzen: Was CPU-Multitasking mit Spielen macht
Coffee Lake vs. Ryzen
Was CPU-Multitasking mit Spielen macht
  1. Custom Foundry Intel will 10-nm-Smartphone-SoCs ab 2018 produzieren
  2. ARM-Prozessoren Macom verkauft Applied Micro
  3. Apple A11 Bionic KI-Hardware ist so groß wie mehrere CPU-Kerne

  1. Re: Scheinheilig

    Cyber | 04:16

  2. Re: windows 10

    ve2000 | 04:12

  3. Re: Das WWW beginnt zu nerven...

    zwergberg | 04:11

  4. Re: Dabei sollten doch gerade das Wohlbefinden...

    ML82 | 03:56

  5. Re: Skynet jemand vielleicht?

    Hotohori | 03:53


  1. 17:56

  2. 15:50

  3. 15:32

  4. 14:52

  5. 14:43

  6. 12:50

  7. 12:35

  8. 12:00


  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