MSP430 Bluetooth interfiriendo con el módulo USB

Tengo un proyecto simple que básicamente envía y recibe datos a través de una conexión USB y Bluetooth. Tanto el módulo USB como el módulo BT comparten los mismos puertos UART RX (P1.2) y TX (P1.1).

El problema que tengo es que cuando el bluetooth está encendido, no puedo enviar comandos al MSP430 con el módulo USB. Si desenchufo el módulo BT, puedo enviar bien a través de USB.

¿Los estoy conectando incorrectamente o necesito desactivar el BT cuando uso USB?

El módulo USB se basa en FT232R: https://www.sparkfun.com/products/9716

El módulo BT se basa en RN-42: https://www.sparkfun.com/products/10269

Conexiones USB:

  • TIERRA --> TIERRA
  • CTS --> TIERRA
  • 3V3 --> N/C
  • TXD --> P1.1
  • RXD --> P1.2
  • DTR --> N/C

Conexiones BT:

  • CTS-I --> N/C
  • CCV --> 3,3 V
  • TIERRA --> TIERRA
  • TX-D --> P1.1
  • RX-I --> P1.2
  • RTS-D --> N/C

Respuestas (3)

El Arduino tiene el mismo problema y han implementado una solución hace mucho tiempo.

imagen

Como puede ver en la imagen, las resistencias RN4B y RN4A son resistencias en serie de 1k entre el USB-Serial ic y el ATMega328p de Arduino. Esto permite que un dispositivo conectado directamente a los encabezados de Arduino, como un escudo/boosterpack, se comunique con el Arduino sin interferencias del USB-Serial IC.

Quieres implementar lo mismo. Coloque resistencias de 1k entre su MSP430 y su módulo Bluetooth. Esto significará que la conexión USB-Serie tiene prioridad sobre el módulo Bluetooth. Cualquier comunicación entre el USB-Serial y el MSP430 no será interferida por el módulo Bluetooth. Dicho esto, no puede enviar/recibir desde el módulo bluetooth cuando la conexión USB-Serial está enchufada.

Actualización: Sin embargo, es posible que esto no siempre funcione. Algunos dispositivos, cuando no hay señal USB en un lado, convertirán el tx/rx en entradas flotantes/abiertas, en lugar de conducir la línea, lo cual es bueno, pero otros, cuando están apagados, aún pueden desviar energía a través de diodos de sujeción en pines gpio . Puede ser un dolor porque esto significa que intentan conducir la línea, evitando que otros lo hagan. En su caso, es posible que necesite un multiplexor bidireccional, o más simple, si la serie USB solo se usa ocasionalmente, podría agregar un puente a la línea. Enchufe el puente cuando necesite usar la conexión USB, retírelo cuando no lo necesite.

Intenté poner las resistencias de 1k en serie con el BT. El USB ahora puede enviar, pero como dijiste, el BT ya no puede enviar. Pensé que el módulo FTDI debería estar apagado cuando desconecto el cable USB ya que no estoy conectando 3.3V a la conexión 3V3.
@ user2218339 La mayoría de los dispositivos pueden desviar energía a través de diodos de sujeción en pines gpio. Puede ser un dolor. En su caso, es posible que necesite un multiplexor bidireccional, o más simple, si la serie usb solo se usa ocasionalmente, podría agregar un puente a la línea. Enchufe el puente cuando necesite usar la conexión USB, retírelo cuando no lo necesite.
Sí, supongo que sería la idea más simple. Gracias por las sugerencias.

Tanto el USB como el BT comparten los mismos pines GPIO, usa unos diferentes para cada módulo. Supongo que solo tiene un UART, por lo que requerirá alguna lógica o software adicional.

Sí, estás en lo correcto. Solo hay un UART en mi chip (g2553)

Los estás conectando incorrectamente.

El módulo Bluetooth y el convertidor de USB a serie (lo llamaré FTDI para abreviar) comparten los mismos pines UART. Están conectados en paralelo a la misma UART.

  • Cuando envía datos en UART TX, ¿cómo sabría el BT que debe transmitir y no el FTDI?
  • Es aún peor con UART RX. Cuando BT no está enviando datos a MSP430, aún reduce la línea UART RX, no desaparece de la imagen. FTDI no puede conducir la línea UART RX alta en esta condición. Cuando conecta el módulo BT y pierde la capacidad de enviar comandos a través de FTDI, eso es lo que sucede.

Por lo general, habría UART separados para Bluetooth y FTDI.
Alternativamente, puede agregar un multiplexor a su esquema para que el UART del microcontrolador "vea" solo un dispositivo a la vez.

Estoy usando el chip MSP430G2553, creo que solo hay un conjunto de pines UART. Puede que tenga que intentar añadir un multiplexor.
@ user2218339 solo tiene un UART de hardware, pero también podría usar un código uart de software.