Ich entwerfe ein Datenerfassungssystem, das seine Daten über 3G hochlädt.
Ich werde einen I2C-Sensor bei 10 Hz abtasten, diesen im lokalen Speicher (oder FRAM) puffern und dann den Inhalt des Puffers regelmäßig (alle paar Sekunden) auf eine SD-Karte ausgeben.
Etwa alle 15 Minuten möchte ich den Inhalt der Datei mithilfe eines 3G-Moduls (Sim5360) auf einen Webserver hochladen. Ich verstehe, dass dieses Modul direkt an eine SD-Karte angeschlossen werden kann und angewiesen werden kann, Dateien von der SD-Karte hochzuladen. Dies entlastet meinen uC und erhöht die erreichbare Upload-Geschwindigkeit im Vergleich zum Streamen der Daten vom uC über den UART.
Damit dies funktioniert, müssen sowohl der Sim5360 als auch der uC Zugriff auf die SD-Karte haben, was einen Multi-Master-SPI-Bus erfordert. Ist das möglich?
Solange beide Geräte die Fähigkeit haben, von der SD-Karte zu lesen und zu schreiben, kann ich sicherstellen, dass es keine Konflikte durch gleichzeitige Versuche gibt, die Ressource gleichzeitig zu verwenden.
Kann mir bitte jemand sagen, ob dies möglich ist und ob ich etwas Besonderes tun muss, damit dies funktioniert?
Alternativ, wenn jemand eine bessere Idee hat, wie man dies erreichen kann, würde ich es gerne hören.
Es ist nicht unmöglich, aber Sie müssen aus Software-Sicht sehr vorsichtig mit dem Dateisystem auf der Karte umgehen. Jedes Gerät muss Puffer leeren und die Karte aushängen, bevor es sie für das andere Gerät "freigibt".
Es spielt beispielsweise keine Rolle, ob Sie neben der MCU zwei Slaves haben oder einen Slave und einen ausgeschalteten anderen Master. Im Grunde sollte der ausgeschaltete SIM5360 der MCU keine Probleme bereiten, wenn er die SD-Karte ordnungsgemäß ausgehängt hat, bevor er sich selbst ausschaltet, genau wie @pjc50 erwähnt hat.
Das Trennen der Leitungen des SIM5360 durch einen von der MCU gesteuerten Multiplexer wird nicht empfohlen. Es würde mehr Risiken in das System bringen, da die MCU aufgrund eines Softwarefehlers die SIM5360 trennen könnte, während sie die SD-Karte liest/schreibt.
Ich denke, Sie sollten zwei Bedingungen von der MCU überprüfen, bevor Sie auf die SD-Karte zugreifen.
Wenn eine dieser Bedingungen falsch ist, fahren Sie nicht fort.
Machen Sie Sim5360 zum "Master" für die SD-Karte. So kann es bei Bedarf dedizierten Zugriff auf die SD-Karte erhalten. Dies kann mit einem Eingangspin am uC erreicht werden, der von Sim5360 gesteuert wird.
Wenn uC seine gepufferten Daten nicht auf die SD-Karte schreiben kann, muss es nur länger puffern oder einige Daten wegwerfen. Wenn die Datenmenge relativ gering ist, können sie sogar im Flash gespeichert werden, bis sie auf die SD-Karte kopiert werden können.
Steve
pjc50