I2C y SPI, si comparten la misma conexión, ¿existe o no un conflicto?

5

Tenemos un producto que usa PIC18F4520, y usamos algunos dispositivos como el controlador de LCD, etc., que usan el bus I2C para comunicarse con el micro. Pero ahora queremos agregar un par de AD5504 , que es un DAC con SPI interfaz. Ahora tenemos una pregunta sobre si podrían compartir la misma conexión con el bus I2C o no.

¿Tiene alguna buena sugerencia al respecto?

    
pregunta qing zhang

4 respuestas

5

Otra opción sería usar un chip de puente SPI a I2C. Básicamente, esto le permitiría agregar una selección de chip para todo su bus I2C. Una de estas opciones se muestra a continuación.

enlace

    
respondido por el spearson
3

Si esta cosa AD5504 (no proporcionó un enlace) es otro dispositivo IIC, entonces todo debería estar bien. Si es otra cosa, como SPI, entonces no, eso no funcionará. Se puede hacer que un dispositivo SPI ignore MISO y MOSI al no confirmar su selección de esclavo, pero un dispositivo IIC se confundirá mucho con las señales normales MISO y MOSI en las líneas SCL y SDA. Incluso una mirada rápida a la especificación de la IIC hubiera revelado eso.

    
respondido por el Olin Lathrop
3

Un dispositivo I2C ignorará silenciosamente todo lo que suceda en el bus hasta que vea un borde descendente en SDA mientras SCK es alto, seguido de ocho ciclos de SCK bajo-alto-bajo durante los cuales SDA nunca cambia mientras SCK es alto, y donde SDA cambia el estado en ciertas transiciones mientras SCK es bajo. Por lo tanto, un dispositivo I2C puede compartir de forma segura un bus con dispositivos que utilizan algún otro protocolo si se puede garantizar que la secuencia de eventos anterior nunca ocurrirá, excepto cuando se intenta hablar con el dispositivo I2C.

Sería posible (y nada difícil) tener una implementación SPI de software "bit-bang" que garantice que la secuencia de eventos anterior nunca ocurra. Sin embargo, las implementaciones de SPI de hardware a menudo no permitirán tal garantía. Típicamente, la salida de datos por diseño cambiará ya sea al mismo tiempo que aumenta el reloj, o al mismo tiempo que cae el reloj. Si el cable de datos cambiara constantemente el estado después del borde ascendente del cable del reloj o antes del borde descendente del mismo, no habría posibilidad de que los datos SPI se confundan con una secuencia de inicio y direccionamiento I2C. Sin embargo, si las señales cambian al mismo tiempo, sería posible que un dispositivo I2C viera que algunas transiciones ocurren antes del borde del reloj y otras que suceden después, de tal manera que se interpreten como una secuencia de direcciones I2C.

    
respondido por el supercat
2

Es posible que pueda golpear una de las interfaces a través de un pin de E / S de propósito general, dejando los pines de función especial para la otra interfaz.

Es posible que pueda activar una de las señales, especialmente el reloj, con algo habilitado por un pin de salida, para que no alcance el chip que no es el objetivo actualmente.

Puedes intentar encontrar periféricos que usen la misma interfaz.

En un extremo, puede agregar un segundo micro como esclavo para funcionar como un convertidor de formato. No es demasiado caro en cuanto a partes, pero significa otro programa para mantener y cargar en cada dispositivo en producción.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas