Use el transceptor de nivel 74LCX245 para SPI / I²C

Necesito convertir los niveles de los buses SPI e I²C de un microcontrolador de 5 V a un lector de tarjetas de 3,3 V y memoria EEPROM , así que elegí usar el 74LCX245 ya que es un transceptor bidireccional.

Pero solo es unidireccional al final porque tienes que establecer un alfiler para decirle en qué dirección traducir los niveles.

¿Todavía puedo usarlo? Dado que SPI e I²C tienen líneas de datos que deben ingresar al microcontrolador, serán de 3,3 V. Porque traducirá "Microcontrolador -> 74LCX245 -> lector de tarjetas", pero no hay forma de cambiar los datos que salen de la tarjeta de memoria con el mismo transceptor.

Microcontrolador: PIC 18F2550

¿Hay alguna forma de hacerlo? ¿Usando el mismo dispositivo o debo terminar usando los transistores de canal N?

¿Puede proporcionarnos los números de pieza y las hojas de datos del microcontrolador, el lector de tarjetas y la (E)EPROM?
La mayoría de las veces, un chip de 5V podrá leer un bus de 3.3V. Además, algunos dispositivos de 3,3 V son 'compatibles con 5 V', lo que significa que no les importa si les das 5 V en lugar de 3,3 V.
¿Podría usar PIC18LF2550 y alimentar todo el circuito a 3.3V?

Respuestas (3)

Como ya sabes, el 74LCX245 es bidireccional, pero la dirección se tiene que configurar con un pin. Entonces, el maestro I2C necesitaría lógica para alternar el pin de transmisión a recepción cada vez que termine de hablar, para que pueda recibir el reconocimiento. Dado que no está implementando el bloque de control I2C, sino que solo usa uno, y no expone las señales que indican las transiciones de transmisión/recepción, controlar este pin de transmisión/recepción será difícil, pero probablemente no imposible.

Por lo tanto, la respuesta a su pregunta, ¿puedo seguir usándola? es que si, creo. Necesitaría un circuito que intente adivinar cuándo el maestro está en un estado de transmisión. Esto se puede hacer monitoreando SDA y SCL para detectar el paso de las condiciones de arranque y parada que básicamente indican que el maestro está tomando el bus y soltándolo. Cuando el maestro quiera hablar, primero bajará SDA. Básicamente, en este punto parece una buena idea poner inmediatamente el 74LCX245 en transmisión. Lo que viene a continuación es la transición del borde del reloj que indica el inicio. Pero no desea retrasar el paso del menú desplegable SDA, para que los dispositivos esclavos obtengan una condición de inicio clara. Luego, si ve que SDA va alto mientras el reloj también está alto, esa es una condición de parada,

Un problema es que el chip tiene un único pin global para cambiar la dirección de todas sus líneas. No desea cambiar la dirección de la línea SCL, que siempre va de maestro a esclavo. Nunca querrás acelerar el reloj, ni siquiera por un momento. Entonces, si insiste en usar nada más que el 74LCX245, necesitará dos de ellos.

Otra consideración es que el chip no tiene salidas de drenaje abierto, sino salidas amortiguadas. Esto podría presentar un problema de dos maneras:

  • Cuando el 74LXC245 reduce su salida, se espera que la salida absorba la corriente de las resistencias desplegables en el bus. Afortunadamente, esto está bien ya que la hoja de datos enumera ± 50 mA como la fuente de salida máxima o la corriente de hundimiento.

  • Ocurre un problema si el 74LXC245 está configurado para transmitir y genera un estado alto en el bus, mientras sucede que un dispositivo detiene el bus, también tratando de transmitir. El búfer del transmisor alimenta corriente directamente al drenaje del dispositivo, que está casi en cortocircuito a tierra. Quizás alguna resistencia pequeña podría defenderse contra esto: lo suficientemente grande como para limitar la corriente, pero lo suficientemente pequeña como para que el nivel lógico se pueda bajar lo suficientemente cerca de cero (ya que esa resistencia se emparejará con la resistencia desplegable en el bus para formar la parte inferior de un divisor de tensión).

  • Con respecto al punto anterior, probablemente debería hacer uso de la desactivación global que pone a ambos lados en una determinación de alto ZIe cuando el bus está completamente inactivo y apaga el chip. Antes de detectar cuándo el maestro quiere transmitir, el chip no debe estar en modo de recepción porque entonces podría provocar el drenaje del maestro. Idealmente, desea que el chip esté en modo bilateral de alta Z y, desde allí, vaya a transmitir. Luego para recibir (para la respuesta desde el dispositivo) y luego de vuelta a alta-Z.

RE: "Línea SCL, que siempre va de maestro a esclavos", esto no es cierto en un sistema multimaestro, y no es cierto si el esclavo implementa el alargamiento del reloj (sin embargo, no muchos esclavos lo hacen).
Votado por las ediciones múltiples y la adición constante de información. Además, se refirió a mi pregunta y explicó que no iba a ser útil para mi propósito.
De acuerdo con Photon: I2C realmente necesita un cambio bidireccional, ya que el esclavo casi seguramente necesitará estirar el reloj después de decodificar la dirección. De manera similar, SPI realmente no se puede ejecutar con un solo pin de configuración, porque el esclavo envía al maestro al mismo tiempo que el maestro envía al esclavo.

No conozco ninguna forma de usar un chip '245 para hacer una traducción de nivel para I2C. Como señala, I2C no incluye ninguna señal que pueda usarse para controlar el pin de DIRECCIÓN del '245.

El método canónico para la traducción de nivel I2C se parece a esto:

ingrese la descripción de la imagen aquí

Cuando el lado de 5 V baja, el lado de 3 V baja a través del diodo del cuerpo del FET. Cuando el lado de 3 V baja, los FET actúan en una configuración de puerta común para bajar el lado de 5 V. La selección de los FET es bastante complicada, así que no se quede con los FET viejos que tenga por ahí.

Una búsqueda en Google de "traductor de nivel I2C" también arroja varios resultados de NXP, TI, Maxim (y probablemente otros) que muestran que fabrican chips especialmente para esta función. Estos chips básicamente incluyen el circuito anterior con algún circuito de "acelerador" para permitir alcanzar velocidades de bus más altas.

Sí, ya conozco esta solución. Estás mezclando las cosas. I2C no establece la dirección de traducción. El 74LCX245 tiene un pin que indica de qué manera se traducen los niveles, no el I2C. Por favor revise mi pregunta nuevamente.
@SeinOxygen, el '245 tiene un pin de entrada de dirección . No indica de qué manera traducir, necesita ser dicho. Pero I2C no tiene ningún resultado que pueda usar para contarlo.
Así es como lo haría, excepto que usaría pull-ups de 2,2 kOhm para asegurarme de conducir el I2C lo suficientemente rápido para frecuencias de 400 kHz o 1 MHz.

Hay muchos métodos para hacer "conversión de nivel", y el hilo del foro Conversión de nivel de línea TTL octal de 3,3 voltios a 5,5 voltios es muy útil.

Puede usar un divisor de voltaje si no necesita mucha velocidad (no sé si esto funcionará con usted).