¿Es posible convertir SPI a UART sin un microcontrolador?

Me preguntaba si convertir SPI a UART solo en esa dirección, no al revés, sin usar ningún microcontrolador o puente.

Si la sincronía puede verse como un caso particular de comunicación asíncrona, ¿no sería posible de alguna manera hacer que el Rx solo lea la entrada? (Al menos en el caso de que fuera un flujo ininterrumpido de bits).

Por supuesto, la velocidad en baudios debe coincidir... pero ¿hay alguna otra limitación que me esté perdiendo?

¡Salud!

Siempre que el objetivo sea una simple conversión por bytes, en realidad se adapta mejor a una máquina de estado que a una computadora de programa almacenado. Sin embargo, los MCU están más fácilmente disponibles en pequeñas unidades de funcionalidad que la estructura lógica programable, y más personas están familiarizadas con el desarrollo eficiente para ellos. Las cosas pueden ser más simples si la tasa de baudios de salida es más rápida que la entrada por más que el factor de longitud de palabra transmitida sobre bits de carga útil.

Respuestas (2)

Sí, si la tasa de bits de SPI coincide con la tasa de bits de UART que desea generar, se puede hacer.

El flujo de datos SPI debe construirse cuidadosamente:

  • Los datos SPI normalmente son MSB primero, pero los datos UART normalmente son LSB primero, por lo que deberá invertir el orden de bits en cada uno de los bytes de datos.
  • Los datos UART contienen un bit de inicio y un bit de parada que delimitan cada byte, por lo que para cada byte de datos de 8 bits que desee transmitir, debe colocar (al menos) 10 bits en el flujo de datos SPI. Una manera fácil (pero ineficiente) de hacer esto sería alternar bytes de datos con bytes de 11111110.
¡Lindo! ¿Qué sucede si no puedo cambiar la forma en que se construye el flujo de datos SPI? ¿Seguiría siendo posible reconstruir la información después de UART?
No. Si no puede cambiar el flujo de datos SPI, entonces necesita construir un dispositivo esclavo SPI que pueda interpretarlo tal cual. De lejos, la forma más fácil de hacer esto es usar un pequeño microcontrolador. ¿Por qué descartas esto?
No tengo permitido modificar el dispositivo que genera el flujo de datos SPI. Tenía la esperanza de evitar la necesidad de un microcontrolador adicional debido al espacio y la simplicidad... ¡pero no puedo imaginar otras alternativas! ¡Parece que va a ser un micro entonces! ¿Alguna sugerencia? Sería bueno evitar diseñar una placa y soldar cosas, pero también sin usar placas tipo Arduino.
¿Qué tipo de dispositivo físico estás buscando? ¿Qué tipo de conexiones entre dispositivos? ¿Cabrá dentro del recinto original o será su propio animal?
El dispositivo recibirá un flujo continuo de datos SPI y lo enviará a UART. UART está conectado a la interfaz de usuario, por lo que se puede usar en ambos sentidos (dúplex completo), para eventualmente configurar el dispositivo que estamos discutiendo si es necesario. El tamaño es un problema, debe ser pequeño (un Arduino Micro ya es demasiado grande) y debe admitir una velocidad de transmisión de 115200. El consumo de energía debe ser razonablemente bajo, pero eso es secundario. Además de eso, no puedo pensar en ninguna otra limitación...
"Esperaba evitar la necesidad de un microcontrolador adicional debido al espacio y la simplicidad..." ¿Estás diciendo que no quieres cosas pequeñas y simples? Porque así es como se vería una solución de microcontrolador. Arduino no es un microcontrolador, es una placa de desarrollo que contiene, entre otras cosas, un microcontrolador (y cabezales y conectores y suministro de regulador de voltaje e interfaz USB y... @Fran Probablemente un ATtiny de 8 pines sería perfecto para el trabajo.
Con sencillez y espacio me refiero a no agregar nada, por eso la pregunta principal!! Sé que Arduino no es solo el micro, pero no puedo crear imágenes usando solo un micro ... ¡por lo general, necesitarás una placa, conectores y esas cosas! De todos modos, ¡verificaré el pequeño Arduino! ¡Gracias!
correcto: revisaré el ATtiny
Restricción adicional: los datos SPI deben registrarse en los momentos exactos. Para SPI 'normal' esto no es un requisito, por lo que probablemente una fuente SPI normal no preste atención a esto.
En su pregunta original, dijo que se trataba de una transferencia de ida. Ahora estás diciendo que es bidireccional. Esto significa que existe algún protocolo de nivel superior mediante el cual el maestro SPI determina si hay datos entrantes. Tendrá que implementar ese protocolo, suponiendo que tenga la documentación adecuada.
No, déjame aclarar... Solo necesito convertir de SPI a UART, es un proceso unidireccional. El maestro SPI solo genera salida y no recibe entrada. Si tuviera que usar un dispositivo intermedio para realizar este proceso, entonces podría usar UART en ambas direcciones para configurar este dispositivo, ya que el lado UART se puede modificar según mis necesidades. Pero los datos provenientes de UART no necesitan enviarse al SPI. En realidad, no debería, ya que no sé qué tipo de consecuencias podría tener.
@WoutervanOoijen: ¿Está hablando de control de flujo? El OP ya ha declarado que es un "flujo continuo" de datos SPI, por lo que es un hecho que la tasa de datos UART debe ser lo suficientemente alta como para eliminar cualquier preocupación sobre el control de flujo.
Con UART, los límites de las celdas de bits deben espaciarse con precisión en el tiempo, porque el receptor muestrea solo en función del tiempo. Con SPI, el único requisito es que los datos deben cambiar en algún momento entre los bordes del reloj activo. No hay ningún requisito sobre la sincronización exacta de esos cambios de datos (o de los bordes del reloj). Por lo tanto, no es imposible que algún flujo de datos SPI pueda usarse para falsificar un flujo de datos UART, pero está lejos de estar garantizado. (No, esto no tiene nada que ver con el control de flujo).
@WoutervanOoijen: Pensé que estaba claro que habíamos ido mucho más allá de la idea de usar el hardware SPI para generar una señal UART: el OP ha declarado que no puede modificar el maestro SPI de ninguna manera.
No de leer tu respuesta, eso era lo que comentaba.

Hay circuitos integrados personalizados, por ejemplo, este de NXP: http://www.nxp.com/products/interface_and_connectivity/bridges/i2c_spi_slave_to_uart_irda_gpio_bridges/series/SC16IS740_750_760.html

Probablemente tengan un MCU oculto en su interior, para almacenamiento en búfer y arbitraje.

¡Gracias! Tengo uno de esos, pero el dispositivo está configurado usando SPI y mi principal limitación es que el SPI es generado por un sistema que no puedo modificar de ninguna manera.
¡Por cierto! ¿Sabes si sería posible configurar uno de esos a través de UART? Eso resolvería mi problema :-)