Forum: Mikrocontroller und Digitale Elektronik I2C-EEPROM an ISP-Schnittstelle


von H.Joachim S. (crazyhorse)


Lesenswert?

für ein bestehendes Gerät soll ein I2C-Eeprom nachgerüstet werden.
Um das Layout nicht ändern zu müssen, soll das Ganze als kleine 
Zwischenplatine für den ISP-Anschluss realisiert werden (Software-I2C).
Die Frage: Gibt es irgendwelche Erfahrungen, welche Pins man wofür 
verwenden sollte/welche lieber nicht?
Steck jetzt nicht so im ISP-Protokoll drin, um evtl. Kollisionen 
erkennen zu können.

SDA - SCLK/MISO/MOSI?
SCL - SCLK/MISO/MOSI?

Es soll weder der EEPROM die ISP-Funktionalität beeinflussen noch eine 
ISP-Programmierung evtl. den EEPROM beeinflussen.

von usuru (Gast)


Lesenswert?

Der ISP-Anschluss ist eine SPI-Schnittstelle, I2C ist etwas anderes. 
Nimm ein EEPROM mit SPI-Schnittstelle.

von Entwickler (Gast)


Lesenswert?

Damit ein IIC-Device nicht angesprochen wird, muß man sicherstellen, 
dass es kein Startbit bekommt: fallende Flanke von CLK während DATA auf 
'1' liegt. Das läßt sich mit SPI-Programmierung nicht sicherstellen, da 
man SDA entweder an MOSI oder MISO klemmen muß, die beliebige Pegel 
haben können; SCL sollte an SCLK.

Am einfachsten dürfte es sein, wenn man das /Reset-Signal dazu 
verwendet, das IIC-EEPROM während der SPI-Programmierung passiv zu 
halten.

von H.Joachim S. (crazyhorse)


Lesenswert?

@usuru: Problem nicht verstanden :-)

von Entwickler (Gast)


Lesenswert?

Ergänzung:
Ich hatte mal ein Schieberegister (4094) + IIC an gemeinsame Leitungen 
angeschlossen. Das war möglich.

Hast Du die SPI-Routinen selber geschrieben oder kannst Du dies machen? 
Die AVRs übernehmen die Daten mit der pos. Flanke von SLCK. Für ein 
IIC-EEPROM würde daraus schlimmstenfalls eine STOP-Bedingung generiert; 
das macht nichts.

Wenn man sicherstellt, dass vor der neg. Flanke die Datenleitung wieder 
auf '0' geht, wird hiermit keine Startbedingung erzeugt.

von Reiner S. (chickstermi) Benutzerseite


Angehängte Dateien:

Lesenswert?

Also ich hab vor kurzem eine Schaltung eintworfen um zwei I2C-Busse über 
einen SPI zu steuern. Ob es jetzt zu irgendwelchen Problemen im 
Protokoll kommt kann ich auf die Schnelle nicht beurteilen. Aber vllt 
hilft dir der Schaltplan ja schonmal weiter.

Für ein I2C-Device entfallen der Inverter am I2C_Select, zwei der Buffer 
und 2 Transistoren...

Der Treiber IC39 wird benötigt, da der I2C an 5V läuft, der Controller 
aber an 3V3. Kann gegebenfalls weggelassen werden...

Gruß, der Icke

von Entwickler (Gast)


Lesenswert?

Na ja, da wäre es dann doch einfacher, mit einem 2/4 C4066 SCL und SDA 
per /Reset abzukoppeln.

von Peter D. (peda)


Lesenswert?

H.joachim Seifert schrieb:
> Steck jetzt nicht so im ISP-Protokoll drin, um evtl. Kollisionen
> erkennen zu können.

Kein Problem, Du kannst die ISP-Pins als ganz normale IOs benutzen, 
solange der RESET-Pin auf high ist.
Für SW-I2C gehen 2 beliebige Pins.

Beim ISP mußt Du allerdings den SDA abtrennen, sonst könnte er 
dazwischen quatschen.
Z.B. mit nem BS170 (Gate an Reset).


Peter

von Spess53 (Gast)


Lesenswert?

Hi

Allerdings könnten die Pull-Ups des I2C einem Programmer Schwierigkeiten 
bereiten.

MfG Spess

von H.Joachim S. (crazyhorse)


Lesenswert?

Ja, wird wohl nicht ganz einfach, ich werde mir mal den ISP-Kram genauer 
anschauen müssen.
Die Idee mit dem reset-Signal sollte auf jeden Fall funktionieren, damit 
entweder SCL oder SDA blockieren.

Am schönsten wäre natürlich, wenn es eine Variante gäbe, die keinerlei 
Zusatzaufwand erfordert. Im Zweifelsfall bau ich natürlich die 2 zus. 
Teilchen ein.

von Entwickler (Gast)


Lesenswert?

>Beim ISP mußt Du allerdings den SDA abtrennen, sonst könnte er
>dazwischen quatschen.

Das ist natürlich richtig. Schlimmer wäre es hingegen, wenn per SPI das 
EEPROM umprogrammiert/gelöscht würde.

>die keinerlei Zusatzaufwand erfordert.

Das geht nicht; wenn keine Hardware ergänzt werden soll, hift es nur, 
das SPI-Programm anzupassen. Die IIC-Routinen mußt Du sowieso per 
Software ergänzen.
Die Pullups stellen kein Problem da; 10k können es doch ruhig sein.

von hans (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.