Abo
  • Services:

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.

Stellenmarkt
  1. Bertrandt Services GmbH, Paderborn
  2. Ludwig Beck AG, München

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:

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 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7.  


Anzeige
Blu-ray-Angebote
  1. 4,25€
  2. (2 Monate Sky Ticket für nur 4,99€)

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.


Folgen Sie uns
       


Youtube Music - angeschaut

Wir haben uns das neue Youtube Music angeschaut. Davon gibt es eine kostenlose Version mit Werbeeinblendungen und zwei Abomodelle. Youtube Music Premium ist quasi der Nachfolger von Googles Play Musik. Das Monatsabo für Youtube Music Premium kostet 9,99 Euro.

Youtube Music - angeschaut Video aufrufen
Indiegames-Rundschau: Schiffbruch, Anime und viel Brummbrumm
Indiegames-Rundschau
Schiffbruch, Anime und viel Brummbrumm

Gas geben, den weißen Hai besiegen und endlich die eine verlorene Socke wiederfinden: Die sommerlichen Indiegames bieten für jeden etwas - besonders fürs Spielen zu zweit.
Von Rainer Sigl

  1. Indiegames-Rundschau Schwerelose Action statt höllischer Qualen
  2. Indiegames-Rundschau Kampfkrieger und Abenteuer in 1001 Nacht
  3. Indiegames-Rundschau Mutige Mäuse und tapfere Trabbis

VR-Rundschau: Retten rockende Jedi-Ritter die virtuelle Realität?
VR-Rundschau
Retten rockende Jedi-Ritter die virtuelle Realität?

Der mediale Hype um VR ist zwar abgeflaut, spannende Inhalte dafür gibt es aber weiterhin - und das nicht nur im Games-Bereich. Mit dabei: das beliebteste Spiel bei Steam, Jedi-Ritter auf Speed und ägyptische Grabkammern.
Ein Test von Achim Fehrenbach

  1. Oculus Core 2.0 Windows 10 wird Minimalanforderung für Oculus Rift
  2. Virtual Reality BBC überträgt Fußball-WM in der virtuellen VIP-Loge
  3. VR-Brillen Google experimentiert mit Lichtfeldfotografie

Windenergie: Wie umweltfreundlich sind Offshore-Windparks?
Windenergie
Wie umweltfreundlich sind Offshore-Windparks?

Windturbinen auf hoher See liefern verlässlich grünen Strom. Frei von Umwelteinflüssen sind sie aber nicht. Während die eine Tierart profitiert, leidet die andere. Doch Abhilfe ist in Sicht.
Ein Bericht von Daniel Hautmann

  1. Hywind Scotland Windkraft Ahoi

    •  /