Traducción de nivel SPI dual (desplazamiento hacia arriba y desplazamiento hacia abajo)

Me enfrento a un desafío interesante: estoy usando un microcontrolador con lógica de 3,3 V, pero necesito usar una interfaz SPI (4 hilos) con piezas que funcionan en tres niveles lógicos, a saber, 1,8, 3,3 y 5 V. Obviamente, 3,3 V no es un problema, pero tengo curiosidad sobre la mejor manera de manejar los componentes de 1,8 y 5 V. Por supuesto, podría usar dos circuitos integrados traductores de nivel discreto, pero espero que haya una solución más simple (es decir, más económica y de menor tamaño). Ya tengo formas de generar los suministros de voltaje, por lo que no es un problema.

Conozco la siguiente técnica de traducción de nivel MOSFET, que entiendo lo suficientemente bien:

ingrese la descripción de la imagen aquí

Esto permite que una señal de 3,3 V desde el µC (desde la izquierda) se desplace hasta 5 V hacia un determinado dispositivo (hacia la derecha). (Tendría que ser al revés para MISO). De manera similar, podría cambiar el voltaje de la derecha a 1.8 V para cambiar hacia abajo para un dispositivo diferente. Aquí está mi problema: si tuviera que cambiar simplemente el voltaje entre 5 y 1,8 V, casi con certeza destruiría los pines de 1,8 V cuando esté a 5 V. ¿Existe una técnica elegante para permitir un cambio a dos niveles diferentes, o lo haré? ¿Tienes que absorberlo y usar dos circuitos separados para las dos traducciones?

Cada línea de señal es unidireccional. Se puede utilizar un ic aislador de 4 canales con tolerancia a diferentes suministros. Ti fabrica algunos basados ​​en RF que se comportan como optoacopladores rápidos.
En mi experiencia, solo he encontrado aquellos que requieren que un lado tenga el voltaje más alto de los dos. ¿Existen dispositivos que permitan tanto bajar como subir el nivel lógico?
Sí, los he usado con éxito en el bus SPI

Respuestas (1)

Lo primero que debe hacer es observar las especificaciones de sus piezas con más cuidado. Es posible que descubras que algunos de tus enlaces en realidad no necesitan traducción. ¿Cuáles son los umbrales de entrada? ¿Las entradas toleran voltajes fuera de los rieles de alimentación? Es bastante común que los dispositivos de 3,3 V tengan entradas tolerantes a 5 V. No sé acerca de los dispositivos de 1.8V.

Con el truco del mosfet, solo necesita un pullup en cada riel, además, si la traducción es unidireccional y el controlador no está usando una salida de colector abierto, solo necesita el pullup en el lado de salida.

También hay que pensar en la velocidad. A bajas frecuencias, el truco del mosfet está bien, pero debido a su naturaleza de colector abierto, no se adapta bien a las altas frecuencias. Las resistencias deben tener un valor lo suficientemente bajo como para cargar la capacitancia parásita lo suficientemente rápido como para llevar las líneas a su nivel "alto" apropiado a tiempo. Hasta cierto punto, puede usar resistencias más pequeñas para acelerar las cosas, pero luego las corrientes más altas causan una mayor caída de voltaje en los dispositivos de conmutación (tanto el mosfet de cambio de nivel como los controladores de salida en sus dispositivos), lo que puede causar problemas.

Gracias por la respuesta. No tengo ningún problema con los dispositivos de 3,3 V, ya que ese es el nivel que usa mi µC, por lo que tener pines tolerantes a 5 V es irrelevante. Las partes de 5V tienen una lógica alta de 0.7*Vdd = 3.5V, por lo que definitivamente tengo que cambiar hacia arriba para esas. Los dispositivos de 1,8 V están especificados a un máximo de ~ 2,1, por lo que definitivamente tengo que reducir la velocidad para esos. En cuanto a la velocidad, necesito esto para operar hasta 10 MHz, lo que podría impulsarlo para la implementación de un solo transistor. De todos modos, me has dado algo en lo que pensar.
A ese tipo de velocidades, sin duda estaría buscando el uso de cambiadores de nivel adecuados (con pines de activación de salida explícitos si es necesario) como la solución preferida.
Eso es lo que había asumido, pero esperaba evitar entrar en esta escapada. ¡Gracias por tu ayuda!