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

Arbeite cleverer, nicht fleißiger

Um das zu beschleunigen, schreibe ich einen kleinen Linux-Treiber, der alle unbekannten GPIO-Pins als Eingabe-Pins mit einem Pull-up-Widerstand konfiguriert. Der Treiber liest dann in einer Schleife die Datenregister der Pins und überwacht die Änderungen der Werte. Ändert sich der Wert eines Pins, gibt der Treiber eine Meldung auf der Linux-Konsole aus.

Ich messe zuerst die Spannung am Pin A0 des Multiplexers von Kanal 1 (U31, Pin 8), sie beträgt 3,3 Volt. Mit einem Kabel schließe ich dann A0 mit der Masse kurz. Durchatmen - aber es gibt keine Funken und ich erhalte eine Ausgabe auf der Konsole:

Anzeige
GPCDAT 0x0000007c -> 0x0000005c diff 0x00000020
GPCDAT 0x0000005c -> 0x0000007c diff 0x00000020

Ich schaue auf die Ausgabe und sie besagt, dass das fünfte Bit des GPCDAT-Registers auf Low wechselt, wenn ich den Pin mit dem Kabel berühre und wieder auf High, wenn ich das Kabel entferne. Der SoC hat einen schwachen Pull-up-Widerstand am Pin, wodurch er auf High schaltet. Berühre ich den Endpunkt der Leiterbahn des Pins am A0-Pin, erzwinge ich ein Low-Signal auf der Leiterbahn. Es ist also sehr wahrscheinlich, dass der SoC-Pin GPC5 mit dem A0-Pin des Multiplexers verbunden ist.

Tatsächlich benutze ich kein blankes Kabel, um die Verbindung mit der Masse herzustellen. Einen aktiven Ausgang mit der Masse zu verbinden, kann dazu führen, den Treiberschaltkreis zu beschädigen oder die Stromversorgung kurzzuschließen, sollte es sich um eine Stromschiene handeln. Stattdessen benutze ich zusätzlich einen 330-Ohm-Widerstand. Liegt an einem Pin 3,3 Volt an, begrenzt der Widerstand den Strom auf 10 mAmpere. Dieser Strom ist hoffentlich klein genug, um keine sofortigen Beschädigungen auszulösen. Es ist trotzdem immer noch riskant, aber sicher genug, um Pins zu testen - solange die Verbindung nicht zu lang besteht.

Mit dem Linux-Treiber gelingt es mir schnell, andere Verbindungen zu finden. Der Multiplexer ist mit den folgenden Pins verbunden:

GPC5    Channel 1 MUX A0 (U31 pin 8)
GPC6    Channel 1 MUX A1 (U31 pin 9)
GPH9    Channel 2 MUX A0 (UE pin 8)
GPH11   Channel 2 MUX A1 (UE pin 9)

An dieser Stelle habe ich vergessen, die Shutdown- und Enable-Pins des Multiplexers zu prüfen. Ich glaube, die Funktionen sind fest verdrahtet, aber eine Prüfung ist immer besser.

Noch mehr Pins

Ich setze meine Messungen fort und verbinde alle möglichen Pins und Kontakte mit der Masse, um sie auf ein Low-Signal zu ziehen. Es ist sinnvoll, zuerst die Spannung am Kontakt beziehungsweise dem Pin zu prüfen. Beträgt sie bereits 0 Volt, dann ist es sinnlos, den Pin auf Low zu ziehen. Beträgt die Spannung mehr als 3,3 Volt, ist der Pin nicht mit dem SoC oder dem FPGA verbunden, denn sie können nicht mit höheren Spannungen umgehen.

Wenn auf einem Kontakt oder Pin ein Low-Signal anliegt, kann er trotzdem mit dem SoC verbunden sein. Möglicherweise ist ein externer Pull-down-Widerstand stärker als der interne Pull-up-Widerstand im SoC. In dem Fall könnte ich das Kabel über einen Widerstand mit einem 3,3 oder 1,8 Volt-Anschluss verbinden statt dem Masse-Anschluss und so ein High-Signal erzeugen. Alternativ könnte ich im Linux-Treiber auch die internen Pull-down-Widerstände aktivieren und auf den Pins ein High-Signal anlegen.

Ich finde heraus, dass der Pin GPF3 mit dem Widerstand R174 verbunden ist, der nahe beim Steckverbinder für das Frontpanel sitzt. Das ist nicht so merkwürdig, wie es mir zuerst vorkam. Wenn ich GPF3 umschalte, leuchtet der Run/Stop-Button auf. Der Pin muss also irgendwie mit dem Frontpanel verbunden sein. GPH3 ist mit dem Widerstand R80 daneben verbunden, aber nichts passiert, wenn ich den Pin ansteuere. Keiner der anderen Kontakte am Steckverbinder für das Frontpanel löst irgendetwas bei meinem Test aus.

Der mysteriöse Steckverbinder U60 scheint mit vielen GPIO-Pins des SoC verbunden zu sein. Anscheinend handelt es sich um eine Debug-Schnittstelle, wo einige ungenutzte Pins anliegen:

1      GPL8
2      GPE8
3      GPE10
4      GPH2
5      GPF7
6      GPB5
7      GPH5
8      GPF4
9      GPG3
10     GPG1
11     GPG5
12     GPK9
13     GPK14
14     GPK10
15     GPK12
16     GPK3
17     GND
18     GND
19     7.3V, not the same wire as for pin 20
20     7.3V, not the same wire as for pin 19

An den GPK-Pins liegen 1,8 Volt an, an den übrigen 3,3 Volt. Ich hatte zuerst keine Ahnung, wo die 7,3 Volt herkamen und ob die beiden Kontakte sich überhaupt unterschieden. Wie mir aber später aufgeht, handelt es sich wohl um die Spannung der Stromversorgung des Oszilloskops. Ich speise es mit 7,5 Volt aus einem Netzteil über den Batterieeingang. Die Differenz ergibt sich wohl durch mein nicht kalibriertes Multimeter.

Ich finde es schade, dass die Owon-Ingenieure die Verbindungen der Pins vom SoC nicht etwas anders angeordnet haben. Es wäre mit kleinen Layoutänderungen auf der Platine wohl möglich gewesen, die Kontakte der SD/MMC-Schnittstelle am Steckverbinder anzulegen. Oder wenigstens eine serielle Schnittstelle oder die I2S-Schnittstelle. Natürlich können viele Protokolle einfach durch Bitbanging an den obigen Pins simuliert werden. Aber ohne Hardware-Unterstützung ist das langsamer.

Den Pin GPF2 und seine Funktion habe ich bereits früher durch Zufall entdeckt. Er dient zum Erkennen einer USB-Verbindung am USB-Client-Anschluss über das VBUS-Signal. Allerdings gibt er mir immer noch Rätsel auf. Wenn ich ein USB-Kabel einstecke und entferne, liefert mein Linux-Treiber keinerlei Ausgabe. Wo liegt mein Fehler? Schließlich finde ich heraus, dass das VBUS-Signal in einen Spannungsteiler eingespeist und von dort aus Pin GPF2 zugeführt wird. Ist der interne Pull-up-Widerstand durch meinen Treiber aktiviert, liegt an GPF2 ein High-Signal an, wenn keine USB-Verbindung besteht. Wird ein USB-Kabel angeschlossen, wird der GPF2 ebenfalls auf High gezogen. Da sich das Signal also nicht ändert, registriert mein Treiber auch keine Änderung. Ich deaktiviere also den Pull-up-Widerstand für GPF2 und nun funktioniert die VBUS-Erkennung. Bis dahin habe ich die direkte Verbindung von VBUS-Signal und dem Signalwert an GPF2 als gegeben vorausgesetzt.

Mein Linux-Treiber macht mich auch auf den merkwürdigen Pin GPB6 aufmerksam. Sein Zustand ändert sich gelegentlich, ohne dass ich bislang einen Grund oder einen Zusammenhang zu meinen Aktionen erkennen konnte.

 Mal eben einen Treiber schreibenEin kurzer Schreckmoment 

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. Formel D GmbH, München
  2. Universität Passau, Passau
  3. Diehl AKO Stiftung & Co. KG, Wangen im Allgäu
  4. Schaeffler Technologies AG & Co. KG, Herzogenaurach


Anzeige
Top-Angebote
  1. Boomster 279,99€, Consono 35 MK3 5.1-Set 333,00€, Move BT 119,99€)
  2. 69,99€ (Liefertermin unbekannt)
  3. (heute u. a. mit 40% auf Polar A360, Sony DSC-RX10M2 für 999,00€)

Folgen Sie uns
       


  1. Smartphones

    iOS legt weltweit zu - außer in China und Deutschland

  2. Glasfaser

    Ewe steckt 1 Milliarde Euro in Fiber To The Home

  3. Nanotechnologie

    Mit Nanokristallen im Dunkeln sehen

  4. Angriff auf Verlinkung

    LG Hamburg fordert Prüfpflicht für kommerzielle Webseiten

  5. Managed-Exchange-Dienst

    Telekom-Cloud-Kunde konnte fremde Adressbücher einsehen

  6. Rockstar Games

    Spieleklassiker Bully für Mobile-Geräte erhältlich

  7. Crimson Relive Grafiktreiber

    AMD lässt seine Radeon-Karten chillen und streamen

  8. Layout Engine

    Facebook portiert CSS-Flexbox für native Apps

  9. Creators Update für Windows 10

    Microsoft wird neue Sicherheitsfunktionen bieten

  10. Landgericht Traunstein

    Postfach im Impressum einer Webseite nicht ausreichend



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: Stinkefinger an Intel

    JohnDoes | 22:41

  2. Re: Echter Ausbau

    migrosch | 22:40

  3. Re: Welcher physikalische Effekt soll das sein ?

    AllDayPiano | 22:38

  4. Re: Linux + Wine?

    ManMashine | 22:36

  5. Re: Mittlerweile habe ich fast schon eine...

    AllDayPiano | 22:33


  1. 18:02

  2. 16:46

  3. 16:39

  4. 16:14

  5. 15:40

  6. 15:04

  7. 15:00

  8. 14:04


  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