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

I2C mit Linux

Wenden wir das Wissen unter Linux an. Linux bringt bereits den I2C-Treiber i2c-gpio mit, der zwei beliebige GPIO-Pins als I2C-Bus ansteuern kann. Ich ergänze die Maschinendefinition des Betriebssystems "mach-smdk.4110.c" in meiner Linux-Portierung entsprechend:

static struct i2c_gpio_platform_data sds7102_i2c_pdata = {
    .sda_pin        = S3C2410_GPB(4),
    .scl_pin        = S3C2410_GPB(9),
};

static struct platform_device sds7102_i2c_chrontel = {
    .name           = "i2c-gpio",
    .id             = 1,
    .dev            = {
            .platform_data = &sds7102_i2c_pdata,
    },
};

static struct platform_device *smdk2416_devices[] __initdata = {
    ...
    &sds7102_i2c
};

Ich starte wieder das Oszilloskop, lade den Treiber und benutze das Programm i2cdetect aus der I2C-Tools-Suite, um auf den I2C-Bus zu schauen:

# i2cdetect -y 1
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

Es gibt anscheinend tatsächlich ein I2C-Gerät mit der Adresse 0x76 auf dem Bus. Ich blättere durch die Datenblätter der Bauteile des Oszilloskops, die ich inzwischen angesammelt habe. Für den VGA-Chip Chrontel CH7026 kann ich keines finden, aber eines für den CH7028, der wie ein naher Verwandter scheint. Und tatsächlich, der Chip verwendet I2C für die Kommunikation und seine Adresse ist 0x76!

Das Registerformat des Chrontel-Chips wird vom i2cdump-Werkzeug unterstützt, so gebe ich mir die Registerinhalte aus.

Anzeige

Register 0 enthält die Geräte-ID und sollte laut Datenblatt den Wert 0x54 beinhalten. Das ist ebenfalls richtig. Nicht dass ich im Moment sehr an VGA interessiert wäre, aber wenn ich den Ausgang nutzen wollte, wäre das mein Startpunkt.

Vielleicht werde ich bei Gelegenheit probieren, einen VGA-Monitor anzuschließen und Linux neu zu starten, ohne einen Reset des Chrontel-Chips durchzu führen. Vielleicht erhalte ich dann auf dem Monitor ein Bild und kann die Chrontel-Konfiguration für eine Analyse in einer Datei sichern.

Das sind zwei weitere Pins von hundert, deren Funktion ich jetzt kenne. Schritt für Schritt erfahre ich so mehr.

Den FPGA programmieren

Ich stoße schließlich auch auf den Code, der die "fp"-Datei lädt und danach anscheinend den FPGA anspricht.

  • (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)
(Foto: Christer Weinigel)

Übersetzt in Pseudo-C macht er ungefähr das, die Kommentare sind von mir:

/* Reset FPGA by driving PROG_B low for a short while */
gpio_set_value(GPK7, 0); /* drive PROG_B low */
delay_calibrated(100);
gpio_set_value(GPK7, 1); /* drive PROG_B high */

/* Wait for INIT_B to go high which indicates that the FPGA is ready */
for (i = 0; 100 > i; i++) {
    if (gpio_get_value(GPK13)) /* read INIT_B */
    break;
    delay_calibrated(50);
}
if (i == 100) {
     /* error handling */
}

Dann durchläuft der Code jedes Byte der Datei und tut das:

  • (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)
(Foto: Christer Weinigel)

In Pseudo-C:

/* Shift 8 bits of data into the FPGA */
uint8_t b = fpga_data[i];
for (j = 0; 8 > j; j++) {
gpio_set_value(GPK3, 1); /* drive CCLK high */
if ((b <>< j) & 0x80)
    gpio_set_value(gpk11, 1); * set din to 1 *
else
    gpio_set_value(gpk11, 0); * set din to 1 *
gpio_set_value(gpk3, 0); * drive cclk low *
}="">

Das sieht sehr danach aus, als ob die FPGA-Daten Bit für Bit auf die Datenleitung geschoben werden.

Wenn alle Bytes durchlaufen wurden, passiert das:

  • (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)
(Foto: Christer Weinigel)
gpio_set_value(GPK3, 1); /* one final CCLK edge */

/* wait for DONE to go high when the bitstream has loaded */
for (i = 0; i < 100; i++) {
    if (gpio_get_value(gpk5)) * read done pin *
    break;
    delay_calibrated(300);
}
if (i="=" 100) {
     * error handling *
}="">

Der Algorithmus entspricht praktisch genau der Beschreibung aus dem Spartan-6-FPGA-Konfigurationshandbuch zum Programmieren eines Xilinx-FPGA im Serial-Slave-Mode.

 Reverse Engineering: Pin sucht KontaktMal eben einen Treiber schreiben 

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. Fresenius Kabi Deutschland GmbH, Bad Homburg
  2. MediaMarktSaturn Retail Concepts, Ingolstadt
  3. OPERATIONAL SERVICES GMBH & CO. KG, Frankfurt
  4. Rohde & Schwarz Cybersecurity GmbH, München, Hamburg, Köln, Leipzig, Darmstadt, Berlin


Anzeige
Spiele-Angebote
  1. 9,99€
  2. 49,99€
  3. 9,99€

Folgen Sie uns
       


  1. Lego Boost im Test

    Jede Menge Bastelspaß für eine kleine Zielgruppe

  2. Platooning

    Daimler fährt in den USA mit Lkw im autonomen Konvoi

  3. Suchmaschine

    Apple stellt Siri auf Google um

  4. Gruppenchat

    Skype for Business wird durch Microsoft Teams ersetzt

  5. Teardown

    iFixit findet größeren Akku in Apple Watch Series 3

  6. Coffee Lake

    Intel verkauft sechs Kerne für unter 200 Euro

  7. MacOS 10.13

    Apple gibt High Sierra frei

  8. WatchOS 4.0 im Test

    Apples praktische Taschenlampe mit autarkem Musikplayer

  9. Werksreset

    Unitymedia stellt Senderbelegung heute in Hessen um

  10. Aero 15 X

    Mehr Frames mit der GTX 1070 im neuen Gigabyte-Laptop



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Bundestagswahl 2017: Viagra, Datenbankpasswörter und uralte Sicherheitslücken
Bundestagswahl 2017
Viagra, Datenbankpasswörter und uralte Sicherheitslücken
  1. Bundestagswahl 2017 IT-Probleme verzögerten Stimmübermittlung
  2. Bundestagswahl 2017 Union und SPD verlieren, Jamaika-Koalition rückt näher
  3. Zitis Wer Sicherheitslücken findet, darf sie behalten

Olympus Tough TG5 vs. Nikon Coolpix W300: Die Schlechtwetter-Kameras
Olympus Tough TG5 vs. Nikon Coolpix W300
Die Schlechtwetter-Kameras
  1. iZugar 220-Grad Fisheye-Objektiv für Micro Four Thirds vorgestellt
  2. Mobilestudio Pro 16 im Test Wacom nennt 2,2-Kilogramm-Grafiktablet "mobil"
  3. HP Z8 Workstation Mit 3 TByte RAM und 56 CPU-Kernen komplexe Bilder rendern

VR: Was HTC, Microsoft und Oculus mit Autos zu tun haben
VR
Was HTC, Microsoft und Oculus mit Autos zu tun haben
  1. Zukunft des Autos "Unsere Elektrofahrzeuge sollen typische Porsche sein"
  2. Concept EQA Mercedes elektrifiziert die Kompaktklasse
  3. GLC F-Cell Mercedes stellt SUV mit Brennstoffzelle und Akku vor

  1. Re: Super Gau

    ML82 | 09:41

  2. Yubico sollte erstmal seine Manuals korrigieren

    Hawk321 | 09:40

  3. Fehlt noch Amazon, dann ist alles gut!

    WalterWhite | 09:39

  4. Was ist eine Unternehmensfirma ? Oder ist eine...

    mziegler | 09:38

  5. "quetscht sich ein auto in die kolonne..."

    jake | 09:37


  1. 09:44

  2. 09:11

  3. 08:57

  4. 07:51

  5. 07:23

  6. 07:08

  7. 19:40

  8. 19: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