¿Puedo usar SPI para entrada serial asíncrona? [cerrado]

0

Necesito un segundo canal de entrada asíncrono en serie en el MSP430G2553 y me gustaría usar SPCI USCI para hacer esto.

¿Es la velocidad de transmisión de USCI SPI lo suficientemente estable para hacer esto a 300 baudios, 2400 baudios o 9600 baudios? Actualmente estoy usando el reloj de 8 MHz.

¿Hay alguna otra opción que pueda salvarme de los golpes de bits?

¿Podría ser posible hacer una recepción asíncrona al iniciar la salida del reloj cuando se recibe el bit de inicio?

Mi pensamiento actual para Rx en el SPI a 300 baudios es el siguiente:

  1. inhabilitar la interrupción de bit de inicio
  2. esperar 1/2 bit
  3. habilitar Rx
  4. Interrupción Rx
  5. habilitar la interrupción de bit de inicio

Uno puede usar la recepción de 10 bits en algunos de los otros miembros de la familia que contiene un SPI.

Tenga en cuenta que esta es una pregunta similar a: ¿Puedo usar SPI para la salida en serie asíncrona? pero la respuesta es mucho más compleja porque la salida del reloj SPI debe estar alineada con el flujo de bits Rx.

Sólo es posible la mitad dúplex si quieres hacer Tx de la misma manera.

Gracias.

    
pregunta skvery

2 respuestas

0

Algunas soluciones posibles:

1. UART por software: Tal vez sea un buen momento para que usted considere esta opción. En este caso la transmisión es muy simple utilizando un temporizador. La recepción es un poco más complicada. Sin embargo, las cosas se vuelven más fáciles con el soporte de interrupción externa en el pin RX (para detectar el bit de inicio). Siempre teniendo en cuenta que el receptor muestreará el pin en el medio del período de bits. La solución está limitada a tasas de baudios pequeños, por lo que el error es inferior al 5%.

2. UART compatible con MAX3100 SPI de MAXIM o MAX14830 (UART cuádruple serie con 128-Word FIFO) .

3. UART a través de SPI ": Sí, el MSP430G2553 tiene dos módulos UCSI independientes: USCI_A0 puede operar en los modos UART / LIN, IRDA y SPI y USCI_B0 en los modos SPI e I2C. Por lo tanto, creo que tiene la intención de usar USCI_B0 para emular Un UART adicional. Al igual que el UART por software, la complejidad dependerá de si solo desea la transmisión, la recepción o ambas. Además, la transmisión será más sencilla. Debe considerar qué modo SPI (0 a 3) debe elegir para Definir el comportamiento de UCCKPL (CPOL) y UCCKPH (CPHA). Recuerdo que la definición de UCCKPH está invertida en relación con la definición tradicional de CPHA. En muchas aplicaciones basadas en SPI, el MSB se envía primero. De lo contrario, en UART, el bit D0 es transmitido primero. Eso se puede configurar en registros UCSI.

En cualquier caso, siguen referencias con pautas para una posible implementación (la primera es más detallada):

Uso del SPI ST626X como UART, desde ST

Uso de SPI como un Transmisor UART adicional, desde TI

Pero siempre habrá una sobrecarga de software, porque el protocolo SPI es como su nombre lo dice: SPI, no UART, y finalmente, asegúrese de que valga la pena.

    
respondido por el Dirceu Rodrigues Jr
1

Bastante simple no. No tiene un reloj para acompañar sus datos de RX, por lo que el controlador spi no tiene nada con qué sincronizar los datos. Si de alguna manera pudieras usar un temporizador para simular el reloj, posiblemente se desviará dentro de unos pocos caracteres, pero eventualmente. Nada dicta que el remitente vaya tan rápido como sea posible, por lo que habrá espacios vacíos.

Los datos que ingresan se alinearán inmediatamente o eventualmente, de manera deseable, si es posible, todavía tendría que hacer su propia búsqueda de bits de inicio y bits de parada y paridad si se utiliza. Un poco más fácil que los golpes de bits, pero quién sabe. No estoy seguro de si el bit bitging es el término correcto más como sondeo.

Loco, pero puedes crear un temporizador que sea 8 o 16 o un número de veces overclockeado, aliméntalo al reloj del controlador spi, ata la habilitación como habilitada (¿esa parte tiene un controlador spi esclavo o es solo maestra)? y luego, básicamente, convierta el controlador spi en un analizador lógico desde el que tendrá que encontrar los bordes de bits y extraer los caracteres en el software como lo haría un uart.

También puede usar interrupciones si el gpio admite ambos bordes o si usa dos pines y une la señal a ambos para buscar el levantamiento y el otro para caer, usando un temporizador para medir el tiempo entre los bordes y, de nuevo, debe hacer lo siguiente en el software. Decodificación de uart del Bistream.

Es mucho más fácil simplemente por la parte correcta con los recursos correctos u obtener un spi externo o i2c uart y conectarlo al MSP430, y dejar que funcione el uart. Tal vez incluso un dual y los dos uarts vengan desde allí, tal vez compre un msp430 menor sin un uart pero con spi.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas