Wir haben ein Produkt, das PIC18F4520 verwendet, und wir haben einige Geräte wie LCD-Treiber usw. verwendet, die alle den I2C-Bus verwenden, um mit dem Mikro zu kommunizieren. Aber jetzt wollen wir ein paar AD5504 hinzufügen , das ist ein DAC mit einer SPI-Schnittstelle. Wir haben jetzt eine Frage, ob sie die gleiche Verbindung mit dem I2C-Bus teilen könnten oder nicht.
Hast du einen guten Vorschlag dazu?
Eine andere Option wäre die Verwendung eines SPI-zu-I2C-Bridge-Chips. Dies würde Ihnen im Wesentlichen ermöglichen, eine Chipauswahl für Ihren gesamten I2C-Bus hinzuzufügen. Eine solche Option ist unten dargestellt.
http://www.silabs.com/products/interface/spitoi2c/Pages/default.aspx
Ein I2C-Gerät ignoriert stillschweigend alles, was auf dem Bus passiert, bis es eine fallende Flanke auf SDA sieht, während SCK hoch ist, gefolgt von acht Low-High-Low-Zyklen von SCK, während derer sich SDA nie ändert, während SCK hoch ist, und wo SDA schaltet Zustand bei bestimmten Übergängen, während SCK niedrig ist. Daher kann ein I2C-Gerät sicher einen Bus mit Geräten teilen, die ein anderes Protokoll verwenden, wenn garantiert werden kann, dass die obige Abfolge von Ereignissen niemals auftritt, außer wenn versucht wird, mit dem I2C-Gerät zu kommunizieren.
Es wäre möglich (und überhaupt nicht schwierig), eine "Bit-Bang"-Software-SPI-Implementierung zu haben, die sicherstellt, dass die obige Abfolge von Ereignissen niemals auftritt. Hardware-SPI-Implementierungen lassen jedoch häufig eine solche Garantie nicht zu. Typischerweise ändert sich die Datenausgabe konstruktionsbedingt entweder zur gleichen Zeit, wenn die Uhr ansteigt, oder zur gleichen Zeit, wenn die Uhr fällt. Wenn die Datenleitung ihren Zustand nach der ansteigenden Flanke der Taktleitung oder vor deren abfallender Flanke ständig ändern würde, bestünde keine Möglichkeit, dass SPI-Daten mit einer I2C-Start- und Adressierungssequenz verwechselt werden. Wenn sich die Signale jedoch gleichzeitig ändern, wäre es möglich, dass ein I2C-Gerät einige Übergänge vor der Taktflanke und andere danach sieht, so dass sie als I2C-Adressfolge interpretiert werden.
Wenn dieses AD5504-Ding (Sie haben keinen Link angegeben) ein anderes IIC-Gerät ist, sollte alles in Ordnung sein. Wenn es etwas anderes ist, wie SPI, dann nein, das wird nicht funktionieren. Ein SPI-Gerät kann dazu gebracht werden, MISO und MOSI zu ignorieren, indem es seine Slave-Auswahl nicht bestätigt, aber ein IIC-Gerät wird durch normale MISO- und MOSI-Signale auf den SCL- und SDA-Leitungen sehr verwirrt. Das hätte schon ein flüchtiger Blick auf die IIC-Spezifikation ergeben.
Möglicherweise können Sie eine der Schnittstellen durch einen Allzweck-E / A-Pin bitbangen, wobei die Spezialfunktions-Pins für die andere Schnittstelle verbleiben.
Möglicherweise können Sie eines der Signale - insbesondere die Uhr - mit etwas steuern, das durch einen Ausgangsstift aktiviert wird, sodass es den Chip nicht erreicht, der derzeit nicht das Ziel ist.
Sie könnten versuchen, Peripheriegeräte zu finden, die alle dieselbe Schnittstelle verwenden.
Im Extremfall können Sie ein zweites Mikro als Slave hinzufügen, um als Formatkonverter zu fungieren. Das ist nicht zu teuer, was die Teile betrifft, aber es bedeutet, dass ein anderes Programm gewartet und in jedes Gerät in der Produktion geladen werden muss.
fceconel