Estoy usando un microcontrolador de la serie 8051, y la documentación indica que si uso el modo serie 0, entonces su pin RXD puede funcionar como un pin bidireccional (tanto de entrada como de salida), mientras que TXD es estrictamente un reloj.
Tengo un IC que tiene pines MOSI, MISO y de reloj. y también uso circuitos integrados multiplexores/demultiplexores.
Quiero aprovechar el pin RXD del microcontrolador para no tener que hacer muchas rutinas de pérdida de tiempo de 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 alguna parte?
¿Y 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é?
La respuesta es, depende".
Si su esclavo SPI establece tres estados en su pin MISO cuando no está transmitiendo, entonces no hay daño en conectar MISO y MOSI a una MCU que admita esta función. Si el esclavo SPI hace esto o no, debe especificarse en la hoja de datos del dispositivo, pero si no es así, puede averiguarlo por su cuenta:
Ahora haga que su MCU realice una transacción SPI normal con el dispositivo, una a la que respondería el dispositivo. Lo que está buscando es el nivel de señal MISO mientras la MCU transmite al dispositivo. Debido a la red de polarización de la resistencia, la línea MISO debe estar ubicada aproximadamente a la mitad del nivel de suministro. Puede ser un poco más o menos dependiendo del dispositivo y la tolerancia de sus resistencias, pero debería ver algo que no sea +V ni GND si el dispositivo está triestableciendo su línea MISO.
Si la línea MISO está en uno de los rieles y luego comienza a alternar cuando el dispositivo responde, entonces el dispositivo no es 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 envía su respuesta, entonces este dispositivo es capaz de unir sus líneas MISO y MOSI. La hoja de datos puede mencionar que se debe usar una resistencia pull-up o pull-down en la línea MISO, que es otra pista 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 para no tener que hacer muchas rutinas de pérdida de tiempo de CPU para cada dispositivo que quiero controlar.
Reconozco que está utilizando un 8051, pero incluso entonces es difícil creer que su MCU hará mucho mientras la transacción SPI esté activa. A menos que esté transmitiendo bloques masivos de datos, su periférico SPI es muy lento o su 8051 en particular tiene un puerto serie increíble, entonces es probable que tenga muy poco tiempo entre bytes para hacer cualquier cosa. Incluso el reloj 8051 más rápido a aproximadamente 50 MHz, que también es la frecuencia de reloj SPI máxima para la mayoría de los esclavos SPI. Incluso si su 8051 específico puede ejecutar una instrucción por reloj, no obtendrá más de 8-48 instrucciones por byte transferidas a través de SPI (suponiendo que su puerto SPI esté funcionando a 6-50 MHz). Es poco probable que ahorre mucho tiempo o energía usando el periférico.
kiteloopdesign
usuario152879
bruce abbott
usuario152879