nali
24.04.2008, 20:02
Hi,
ich bin nicht sicher, ob ich meine Frage ins richtige Forum poste (falls nicht, bitte Thread verschieben). Also mein Problem: Ich arbeite an einem Projekt mit einem MPC565 (http://www.phytec.com/pdf/datasheets/MPC565_DS.pdf) und einem Modellauto. Nun sollen an den MPC565 verschiedene Ultraschallsensoren angeschlossen werden. Es handelt sich dabei um die bekannten Modelle SRF08/10 - also per I2C-Interface anzusteuern.
Nun hat der MPC565 aber leider kein I2C-Interface. Und ich müsste ein passendes Interface selber erstellen. An sich keine große Sache: Digital-IN/Out und eine Clock, fertig bin ich. Leider kann ich aber für die Programmierung nicht 100 % an den Controller ran. Ich MUSS über eine gegebene Hardware-Abstraktionsschicht gehen.
Das hat zur Folge, dass ich z.B. KEINE Interrupts nutzen kann. Jedenfalls nicht direkt. Ich habe nur Zugriff auf verschiedene ADC, PWM, SPI, SPM und eben DIO-Kanäle über verschiedene Interfaces, welche wiederrum direkt auf die Hardware zugreifen.
Aus dieser Situation ergeben sich jetzt zwei Fragen:
1. Der Controller verfügt über ein SPI-Interface, was ich leicht nutzen kann. Ist möglich I2C-Geräte über ein SPI-Interface anzusprechen? Theoretisch müsste das doch möglich sein. Ich muss natürlich weiter ein entsprechende I2C-Interface aufsetzen, aber dieses würde intern auf einem SPI basieren. Clock, Data-In-Out sind ja auch hier vorhanden. Die Idee kam mir durch diese Seite: http://www.i2cchip.com/mix_spi_i2c.html
Hat jemand schon mal etwas ähnliches gemacht oder kann mir bestätigen, dass sowas Sinn funktioniert?
2. Falls die Variante I2C über SPI nicht funktioniert, muss ich halt ein "richtiges" I2C-Interface schreiben, aber eben ohne die Nutzung von IR. Ich kann mir dabei nicht so recht vorstellen, wie ich das Senden / Empfangen der Bytes auf das Clock-Signal synchronisieren kann. Ich bin ehrlich gesagt jetzt auch nicht sehr erfahren im Umgang mit I2C / SPI, die ganzen Gedanken entstammen jetzt eher meinem theoretischen Wissen ;-) Nach meinem Wissen muss die Datenleitung bei I2C ja passend zum Clock-Signal gesetzt werden. Wie mache ich sowas aber ohne Interrupts? Muss ich dann in meinen i2c_read/write-Funktionen fortwährend prüfen, ob das clock-Signal passt? Das kommt mir alles etwas "gebastelt" vor.
Wie auch immer: Welche Variante wäre hier die richtige / mögliche -I2C über SPI oder I2C ohne Interrupts?
Hoffe ich habe das Problem ausführlich genug beschrieben. Ansonsten kann ich´s gerne ausführlicher machen...
Danke
Christian
ich bin nicht sicher, ob ich meine Frage ins richtige Forum poste (falls nicht, bitte Thread verschieben). Also mein Problem: Ich arbeite an einem Projekt mit einem MPC565 (http://www.phytec.com/pdf/datasheets/MPC565_DS.pdf) und einem Modellauto. Nun sollen an den MPC565 verschiedene Ultraschallsensoren angeschlossen werden. Es handelt sich dabei um die bekannten Modelle SRF08/10 - also per I2C-Interface anzusteuern.
Nun hat der MPC565 aber leider kein I2C-Interface. Und ich müsste ein passendes Interface selber erstellen. An sich keine große Sache: Digital-IN/Out und eine Clock, fertig bin ich. Leider kann ich aber für die Programmierung nicht 100 % an den Controller ran. Ich MUSS über eine gegebene Hardware-Abstraktionsschicht gehen.
Das hat zur Folge, dass ich z.B. KEINE Interrupts nutzen kann. Jedenfalls nicht direkt. Ich habe nur Zugriff auf verschiedene ADC, PWM, SPI, SPM und eben DIO-Kanäle über verschiedene Interfaces, welche wiederrum direkt auf die Hardware zugreifen.
Aus dieser Situation ergeben sich jetzt zwei Fragen:
1. Der Controller verfügt über ein SPI-Interface, was ich leicht nutzen kann. Ist möglich I2C-Geräte über ein SPI-Interface anzusprechen? Theoretisch müsste das doch möglich sein. Ich muss natürlich weiter ein entsprechende I2C-Interface aufsetzen, aber dieses würde intern auf einem SPI basieren. Clock, Data-In-Out sind ja auch hier vorhanden. Die Idee kam mir durch diese Seite: http://www.i2cchip.com/mix_spi_i2c.html
Hat jemand schon mal etwas ähnliches gemacht oder kann mir bestätigen, dass sowas Sinn funktioniert?
2. Falls die Variante I2C über SPI nicht funktioniert, muss ich halt ein "richtiges" I2C-Interface schreiben, aber eben ohne die Nutzung von IR. Ich kann mir dabei nicht so recht vorstellen, wie ich das Senden / Empfangen der Bytes auf das Clock-Signal synchronisieren kann. Ich bin ehrlich gesagt jetzt auch nicht sehr erfahren im Umgang mit I2C / SPI, die ganzen Gedanken entstammen jetzt eher meinem theoretischen Wissen ;-) Nach meinem Wissen muss die Datenleitung bei I2C ja passend zum Clock-Signal gesetzt werden. Wie mache ich sowas aber ohne Interrupts? Muss ich dann in meinen i2c_read/write-Funktionen fortwährend prüfen, ob das clock-Signal passt? Das kommt mir alles etwas "gebastelt" vor.
Wie auch immer: Welche Variante wäre hier die richtige / mögliche -I2C über SPI oder I2C ohne Interrupts?
Hoffe ich habe das Problem ausführlich genug beschrieben. Ansonsten kann ich´s gerne ausführlicher machen...
Danke
Christian