PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Bus mit Atmel Chip als Slave ..



Ritchie
04.08.2014, 17:55
Hallo Zusammen,

meine ersten Erfahrungen haben gezeigt, das der I2C BUs am Raspberry nicht so einfach läuft. Clockstreaching wird nicht unterstützt.

Hier habe ich zwar mittels Baudrate=XXX am Treiber die Übertragungsgeschwindigkeit herunter gedreht, muss hier aber noch weiter die Stabilität prüfen.

Gruss R.

Kampi
05.08.2014, 21:32
Hey,

das liegt wahrscheinlich daran, dass der SoC keinen "richtigen" I²C Controller hat, sondern sowas was sich BSC, also Broadcom Serial Controller nennt, hat.
Der macht im Grunde UART, SPI und I²C. Da der UART kein "richtiger" UART ist (ohne Handshake etc) werden auch die anderen Schnittstellen sicher nur das nötigste haben :)

Gruß
Daniel

Ritchie
09.08.2014, 08:30
Hi,

dieses Problem ist mir bekannt. Eigentlich dachte ich eher, das jemand hier in der Zwischenzeit einen I2C Treiber (Big Banging) gefunden/geschrieben hat, welcher die
fehlende Clock-stretching Funktion beinhaltet.

Ich versuche jetzt meinen Atmel-Treiber für I2C Slave Funktion schneller zu bekommen.

Ich hatte schon im Internet nach einem AtMega ASM Modul für I2C Bus gesucht, aber keinen passenden gefunden.
Werde jetzt erstmal die Case Funktion durch einen Array-Funktion ersetzten.

Wenn ich das Teil am rennen habe, melde ich mich wieder.

Gruss R.

Ritchie
12.08.2014, 11:41
Hallo Zusammen,

die fehlende Clock-Streatching Funktion macht es mir es fast unmöglich die Standard Funktionen des i2c Bus zu verwenden.

Hat jemand mit diesem GPIO I2C Bus Erfahrungen gemacht ?

http://wiringpi.com/reference/i2c-library/

Gruss R.

peterfido
12.08.2014, 17:17
Wenn die Möglichkeit besteht, wechsle auf U(S)ART. Darüber verstehen die beiden sich prima. Zur Not ein zusätzlicher kleiner Atmel, welcher zwischen USART und I2C mit einem weiteren Atmel übersetzt.

Ritchie
12.08.2014, 17:30
Hi,

verstehe ich das so, das diese Lib nicht geht. Ich beginne gerade mit der Codierung meines Testprogrammes.

Edit:
Danke für den Hinweis. Ich habe mir den Quellcode von dieser Lib dann doch nochmals angesehen
und musste feststellen, das er auf den Standard i2C "i2c_smbus_access" Routinen basiert und somit
keine Lösung meines Problem ist.

Leider habe ich zu viele Teilnehmer, um auf eine serielle Verbindung zu wechseln. Eher würde ich mir ein anderes
Board zulegen.

Gruss R.

Kampi
23.08.2014, 23:28
Hey Ritchie,

bei meinen Recherchen zu meinem ADC-Treiber habe ich heute gesehen, dass der BSC doch eine Clock Streching Funktion besitzt.
Schau mal auf S. 35 nach:

http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

Ritchie
24.08.2014, 08:42
Hallo Daniel,

ich habe den Thread später dann hier Artverwand weitergeführt, da ich nach einer Alternative für den RPI gesucht habe.

https://www.roboternetz.de/community/threads/65396-Alternativen-zum-Raspberry-PI-%28wegen-i2c-Bus-Problem%29

Hier habe ich auch einige erklärende Links eingefügt, welche dem Problem genauer auf den Grund gehen.

Dieser Link erklärt zum Beispiel den Fehler im Chip:
http://elinux.org/BCM2835_datasheet_errata#p35_I2C_clock_stretching

Die genaue Erklärung kann man dann hier nachlesen:
http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html

Der Chip besitzt diese Fähigkeit, nur ist diese Fehlerhaft implementiert.

Ich habe derzeit einen BeagleBone Black Element14 auf dem Tisch liegen und bin dabei mein Programm und Hardware
zu portieren.

Ganz entscheidend ist die Aussage:


Don't expect help from the Raspberry Pi creators or from Broadcomm.
They know the problem (at least partially), but they unfortunately did neither document nor solve it.


Für mich der Grund, nach einem anderen Board zu suchen.

Viele Grüße

R.

Kampi
24.08.2014, 10:27
Hey Ritchie,

ahh ok. Ich hatte mich nur nach dem Datenblatt gerichtet. Bisher ist mir dieses Problem nicht aufgefallen.
Wobei....ich hatte mal vor einiger Zeit mit nem PSoC am Raspberry Pi experimentiert. Die Kommunikation zwischen AVR und Raspi bzw. PSoC und AVR klappte 1a...nur die Kombination PSoC und Raspi warf Probleme auf. Irgendwas hat die I²C Kommunikation immer gestört.
Eventuell war es sogar das Problem....ich kenne leider die API von Cypress bzgl. I²C Slave im PSoC nicht gut genug um dieses Verhalten auf diesen Fehler zurück führen zu können.
Aber die Info das der I²C buggy ist, ist schon mal viel Wert :)

Jetzt ist natürlich die Frage was könnte Broadcomm dagegen tun (abgesehen davon den Chip zu fixen :) )....

Ritchie
24.08.2014, 12:19
Hallo Daniel,

hier wäre eine mögliche Lösung ein sogenanter "Bit Banging" Treiber. Hierbei wird die Steuerung des I2C Bus komplett in Software gelöst.
Nur muss man auch das Wissen und die Zeit dafür haben.

Viele Grüße

R.