Ich habe zwei Mikrocontroller, die beide ziemlich ausgereizt sind. MC1 muss MC2 ein 14-Bit-Messergebnis zur Verfügung stellen. MC1 kann mit SPI kommunizieren und MC2 kann mit I2c kommunizieren, aber sie arbeiten asynchron.
Gibt es eine Art einfachen IC, mit dem MC1 mithilfe von SPI einen Wert im IC speichern kann, und MC2 diesen Wert dann mithilfe von I2c nach Belieben des anderen lesen kann?
Ich würde @Voltage Spike zustimmen, wahrscheinlich ist das Upgrade einer der beiden MCUs die einfachste Lösung.
Wenn es jedoch wirklich nur darum geht, Daten ein- und auszulagern, dann wäre das eine Aufgabe für eine andere MCU. Ich kann verstehen, dass Sie zögern würden, noch mehr Software auf ein Board zu bringen. Aber ehrlich gesagt, würde es sicherlich am einfachsten klingen, das SPI-Peripheriegerät auf dieser dritten MCU für DMA in einen großen Puffer und einen I²C-Handler einzurichten, um MC2 die neuesten Daten auf Abruf zu geben.
Beachten Sie, dass dies meines Erachtens tatsächlich dafür spricht, die Aufgabe von MC1 von der dritten MCU übernehmen zu lassen: Wenn das Datenvolumen gering genug ist, um es über I²C abzufragen, würde es keinen etwas modernen Cortex-M0+ zur Schnittstelle drängen mit jedem ADC, den Sie haben, oder übernehmen Sie einen wesentlichen Teil der Berechnung dieses 14-Bit-Werts.
Es wäre viel einfacher, eine MCU in einem anderen Paket mit besseren Fähigkeiten zu finden und eine vorhandene MCU aufzurüsten, als etwas dazwischen hinzuzufügen.
Eine andere Sache, die Sie vielleicht in Betracht ziehen sollten, ist die Suche nach Hardware-SPI- oder I2C-Peripheriegeräten, wenn Sie sie derzeit nicht verwenden (fast jede moderne MCU hat so etwas). Ein Hardware-SPI empfängt Informationen, speichert sie dann im Speicher, ohne den SPI abzufragen, und schaltet dann einen Interrupt um, damit Sie die Informationen abrufen können. Gleiches gilt für Hardware-I2C.
Wenn das Ihren Anforderungen nicht entspricht, könnte ein FPGA (wie im Gitterteil) für die von Ihnen beschriebene Schnittstelle verwendet werden, die jedoch viel schwieriger und zeitaufwändiger zu implementieren ist.
Es gibt I2C/SPI-Brücken mit eingebauten Puffern wie die SC18IS602B, die für diesen Zweck geeignet sein könnten.
Können Sie einen I2C-Master in Software auf MC1 implementieren? Du brauchst nur 2 GPIOs. Natürlich würde es einige Zeit dauern, aber wenn Ihre Übertragung kurz und selten genug ist, könnte es machbar sein.
Da I2C synchron ist und Sie die Master-Seite implementieren, haben Sie keine strengen Timing-Anforderungen. Sie könnten mit Ihrer Hauptprogrammschleife fortfahren, nachdem Sie jedes Bit gesetzt haben. In diesem Fall wären die Laufzeitanforderungen minimal, nur ein einziger Speicherbefehl für jedes Bit und ein Verzweigungsbefehl. Alternativ könnten Sie einen Timer-Interrupt so einstellen, dass er beispielsweise bei einer Frequenz von 100 kHz auslöst und jedes Bit im Interrupt überträgt. In diesem Fall hätten Sie mehr Overhead, da Sie den Interrupt betreten und verlassen müssen.
Wenn Sie es auch in Software auf MC2 implementieren (z. B. mit einem GPIO-Interrupt für den Taktleitungseingang), muss es nicht einmal I2C mit seinem Overhead für Startbedingung, Adresse usw. sein. Sie könnten die 14 Bit einfach seriell und synchron übertragen. Wenn Sie mehr als 2 GPIOs zur Verfügung haben, können Sie sogar mehrere Bits parallel übertragen.
krass
krass
krass
Jasen
Lorenzo Marcantonio
Nur ich