en SPI, ¿se pueden conectar MOSI y MISO juntos?

1

Estoy usando un microcontrolador de la serie 8051 y la documentación indica que si uso el modo serial 0, su pin RXD puede funcionar como un pin bidireccional (entrada y salida) mientras que TXD es estrictamente un reloj.

Tengo un IC que tiene pines MOSI, MISO y reloj. y también uso IC de multiplexor / demultiplexor.

Quiero aprovechar el pin RXD del microcontrolador, por lo que no tengo que hacer muchas rutinas de supresión de bits de la CPU para cada dispositivo que quiero controlar.

Entonces, ¿es aceptable conectar los pines MOSI, MISO y RXD juntos o debería haber una resistencia en algún lugar?

¿Es seguro conectar una salida de un demultiplexor (Ejemplo: 74hc151) al pin RXD del 8051 y a una entrada de un decodificador (Ejemplo: 74HC138) o debo usar resistencias?

Si se requieren resistencias, ¿qué valores sugeriría y por qué?

    
pregunta

1 respuesta

2

La respuesta es "depende".

Si su esclavo SPI prueba su pin MISO cuando no está transmitiendo, entonces no hay daño en la conexión de MISO y MOSI a una MCU que admita esta función. Si el esclavo SPI hace esto o no, se debe detallar en la hoja de datos del dispositivo, pero si no lo está, puede resolverlo por su cuenta:

  • deje la línea MISO desconectada de la MCU
  • conecte la línea MISO a dos resistencias, una a + V y otra a GND
  • el valor real de las resistencias no importa. Deberían tener el mismo valor, y cualquier valor entre 1k y 10k estaría bien para este experimento.
  • conecte un canal de un osciloscopio a la línea MISO y otro canal a la línea MOSI o CS #.

Ahora haga que su MCU realice una transacción SPI normal con el dispositivo, una a la que el dispositivo respondería. Lo que está buscando es el nivel de señal MISO mientras la MCU está transmitiendo al dispositivo. Debido a la red de polarización de resistencia, la línea MISO debe estar situada aproximadamente a la mitad del nivel de suministro. Puede ser un poco más o menos dependiendo del dispositivo y de la tolerancia de sus resistencias, pero debería ver algo que no sea + V y no GND si el dispositivo tiene tres líneas de MISO.

Si la línea MISO está en uno de los rieles y luego comienza a alternar cuando el dispositivo responde, entonces el dispositivo es no un buen candidato para combinar las líneas MISO y MOSI. Esto se debe a que el dispositivo está impulsando activamente la línea MISO cuando no está hablando. Esto no está mal porque SPI es un sistema de comunicaciones full-duplex y cada dirección tiene su propia señal física. El dispositivo espera ser el único elemento impulsor en esa red, por lo que está haciendo lo correcto al mantener un nivel de señal.

Sin embargo, si la línea MISO se encuentra más o menos a medio camino entre los rieles y luego solo cambia a los rieles cuando está enviando su respuesta, entonces este dispositivo es capaz de tener sus líneas MISO y MOSI unidas. La hoja de datos puede mencionar que se debe usar una resistencia de pull-up o pull-down en la línea MISO, lo cual es otro indicio de que este es un dispositivo capaz de unir las líneas MISO y MOSI.

Ahora para abordar algo que has dicho:

  

Quiero aprovechar el pin RXD del microcontrolador, por lo que no tengo que hacer muchas rutinas de supresión de bits de la CPU para cada dispositivo que quiero controlar.

Reconozco que estás usando un 8051, pero incluso entonces es difícil creer que tu MCU estará haciendo mucho mientras la transacción SPI esté activa. A menos que esté transmitiendo bloques masivos de datos, su periférico SPI es dog-slow o su 8051 particular tiene un puerto serial increíble, entonces probablemente tendrá muy poco tiempo entre bytes para hacer algo. Incluso el reloj más rápido de 8051s a aproximadamente 50MHz, que está alrededor de la frecuencia máxima del reloj SPI para la mayoría de los esclavos SPI también. Incluso si su 8051 específico es capaz de ejecutar una instrucción por reloj, no recibirá más de 8-48 instrucciones por byte transferido a través de SPI (suponiendo que su puerto SPI esté operando a 6-50MHz). Es poco probable que ahorre mucho tiempo o energía con el uso del periférico.

    
respondido por el akohlsmith

Lea otras preguntas en las etiquetas