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.
Der ISP-Anschluss ist eine SPI-Schnittstelle, I2C ist etwas anderes. Nimm ein EEPROM mit SPI-Schnittstelle.
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.
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.
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
Na ja, da wäre es dann doch einfacher, mit einem 2/4 C4066 SCL und SDA per /Reset abzukoppeln.
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
Hi Allerdings könnten die Pull-Ups des I2C einem Programmer Schwierigkeiten bereiten. MfG Spess
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.
>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.
Vielleicht reicht 1-Wire auch: http://para.maxim-ic.com/en/search.mvp?fam=memory&157=1-Wire&tree=master hans
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.