SimCom SIM5360 teilt SD-Karte mit uController

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.

Antworten (3)

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 gibt eine begrenzte Kontrolle darüber, wie der SIM5360 mit der SD-Karte interagiert, da er über AT-Befehle auf dem UART gesteuert wird. Glauben Sie daher, dass dies zu Problemen führen würde?
Möglicherweise, ja, vorausgesetzt, es gibt ein FAT oder ein ähnliches Dateisystem auf der Karte - die Geräte speichern unterschiedliche Ansichten und Dateien werden möglicherweise nicht angezeigt oder überschreiben sich gegenseitig. Sie müssen nicht überlappende Halterungen sein.

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.

  1. Überprüfen Sie immer, ob der SIM5360 richtig und vollständig ausgeschaltet ist.
  2. Überprüfen Sie den Status des Slave-Select-Pins der SD-Karte, wenn er sich im logisch hohen Zustand befindet (unter der Annahme, dass der Slave-Select-Pin aktiv niedrig ist).

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.

Ich mache mir keine Sorgen um den Umgang mit Ressourcenkonflikten, ich möchte nur wirklich wissen, ob der uC in der Lage sein wird, auf die SD-Karte zu lesen/schreiben, während der SIM5360 ausgeschaltet ist.
Sie können beide Geräte an den Slave (SD-Karte) anschließen, sofern sie nicht gleichzeitig den SPI-Bus verwenden.