MSP430 Bluetooth stört das USB-Modul

Ich habe ein einfaches Projekt, das im Wesentlichen Daten über eine USB-Verbindung und Bluetooth sendet und empfängt. Sowohl das USB-Modul als auch das BT-Modul teilen sich dieselben UART RX (P1.2)- und TX (P1.1)-Ports.

Das Problem, das ich habe, ist, dass ich mit dem USB-Modul keine Befehle an den MSP430 senden kann, wenn das Bluetooth mit Strom versorgt wird. Wenn ich das BT-Modul ausstecke, kann ich problemlos über USB senden.

Schließe ich sie falsch an oder muss ich BT deaktivieren, wenn ich USB verwende?

Das USB-Modul basiert auf FT232R: https://www.sparkfun.com/products/9716

Das BT-Modul basiert auf RN-42: https://www.sparkfun.com/products/10269

USB-Anschlüsse:

  • Masse -> Masse
  • CTS -> GND
  • 3V3 --> Öffner
  • TXD --> P1.1
  • RXD -> P1.2
  • DTR --> N/C

BT-Verbindungen:

  • CTS-I --> N/C
  • VCC -> 3,3 V
  • Masse -> Masse
  • TX-D -> P1.1
  • RX-I -> P1.2
  • RTS-D --> Öffner

Antworten (3)

Der Arduino hat das gleiche Problem, und sie haben vor langer Zeit eine Lösung implementiert.

Bild

Wie Sie im Bild sehen können, sind die Widerstände RN4B und RN4A 1k-Serienwiderstände zwischen dem USB-Serial ic und dem ATMega328p des Arduino. Dadurch kann ein Gerät, das direkt mit den Arduino-Headern verbunden ist, wie z. B. ein Shield/Boosterpack, mit dem Arduino ohne Störung durch den USB-Serial-IC kommunizieren.

Sie wollen dasselbe umsetzen. Platzieren Sie 1k-Widerstände zwischen Ihrem MSP430 und Ihrem Bluetooth-Modul. Dies bedeutet, dass die USB-Serial-Verbindung Vorrang vor dem Bluetooth-Modul hat. Jegliche Kommunikation zwischen dem USB-Serial und dem MSP430 wird nicht durch das Bluetooth-Modul gestört. Allerdings können Sie nicht vom Bluetooth-Modul senden/empfangen, wenn die USB-Serial-Verbindung angeschlossen ist.

Update: Dies funktioniert jedoch möglicherweise nicht immer. Wenn auf einer Seite kein USB-Signal anliegt, verwandeln einige Geräte den TX/RX in schwebende/offene Eingänge, anstatt die Leitung anzusteuern, was gut ist, aber andere können im ausgeschalteten Zustand immer noch Strom über Klemmdioden in gpio-Pins abziehen . Es kann ein Schmerz sein, weil dies bedeutet, dass sie versuchen, die Leitung zu fahren und andere daran hindern. In Ihrem Fall benötigen Sie möglicherweise einen bidirektionalen Multiplexer oder einfacher, wenn die USB-Seriell nur gelegentlich verwendet wird, könnten Sie hinzufügen ein Jumper zur Leitung. Stecken Sie den Jumper ein, wenn Sie die USB-Verbindung verwenden müssen, und entfernen Sie ihn, wenn Sie dies nicht tun.

Ich habe versucht, die 1k-Widerstände mit dem BT in Reihe zu schalten. Der USB kann jetzt senden, aber wie Sie sagten, der BT kann nicht mehr senden. Ich dachte, das FTDI-Modul sollte ausgeschaltet sein, wenn ich das USB-Kabel abziehe, da ich keine 3,3 V an den 3V3-Anschluss anschließe.
@ user2218339 Die meisten Geräte können Strom über Klemmdioden in gpio-Pins absaugen. Es kann ein Schmerz sein. In Ihrem Fall benötigen Sie möglicherweise einen bidirektionalen Multiplexer, oder einfacher, wenn die USB-Seriell nur gelegentlich verwendet wird, können Sie der Leitung einen Jumper hinzufügen. Stecken Sie den Jumper ein, wenn Sie die USB-Verbindung verwenden müssen, und entfernen Sie ihn, wenn Sie dies nicht tun.
Ja, ich denke, das wäre die einfachste Idee. Danke für die Vorschläge.

Sowohl der USB als auch der BT teilen sich die gleichen GPIO-Pins, verwenden Sie für jedes Modul unterschiedliche Pins. Ich gehe davon aus, dass Sie nur einen UART haben, daher ist zusätzliche Logik oder Software erforderlich.

Ja du hast Recht. Es gibt nur einen UART auf meinem Chip (g2553)

Du verbindest sie falsch.

Bluetooth-Modul und USB-zu-Seriell-Konverter (ich nenne es kurz FTDI) teilen sich die gleichen UART-Pins. Sie sind parallel mit demselben UART verbunden.

  • Wenn Sie Daten über UART TX senden, wie würde das BT wissen, dass es und nicht das FTDI senden sollte?
  • Mit UART RX ist es noch schlimmer. Wenn BT keine Daten an MSP430 sendet, fährt es die UART RX-Leitung immer noch niedrig, es verschwindet nicht aus dem Bild. FTDI kann die UART-RX-Leitung in diesem Zustand nicht hochtreiben. Wenn Sie das BT-Modul anschließen und die Fähigkeit verlieren, Befehle über FTDI zu senden, passiert genau das.

Typischerweise gibt es getrennte UARTs für Bluetooth und FTDI.
Alternativ können Sie Ihrem Schaltplan einen Multiplexer hinzufügen, sodass der UART des Mikrocontrollers jeweils nur ein Gerät "sieht".

Ich verwende den MSP430G2553-Chip, ich denke, es gibt nur einen Satz UART-Pins. Vielleicht muss ich versuchen, einen Multiplexer hinzuzufügen.
@ user2218339 es hat nur einen Hardware-UART, aber Sie könnten auch einen Software-UART-Code verwenden.