Distancia máxima SPI

tecnología athil

Distancia máxima SPI

Tengo un µController PIC16F877, conectado vía SPI a un MCP23S17 y el último conectado a una botonera y pantalla LCD, la distancia entre el µController y el circuito integrado del MCP es de 5m. Mi pregunta es ¿funcionará o no? Y si no funciona como puedo solucionar este problema. ¿Hay alguna solución (como un circuito integrado o un truco)?

Foto 1

KyranF

SPI está diseñado para comunicaciones en PCB ... esta es una idea terrible, tal vez pueda encontrar un método de comunicación alternativo y más apropiado que esté diseñado para comunicaciones externas o al menos a mayor distancia, como I2C

Samuel

@KyranF I2C es un circuito interintegrado , no está diseñado para uso externo o de larga distancia. Un bus SPI sin asistencia sería más adecuado para la comunicación externa que un bus I2C sin asistencia.

Nick Alexeev

@KyranF Apoyaré lo que dijo Samuel. Dado que I2C es un bus de colector abierto, el I2C simple tiene más problemas de larga distancia que el SPI simple.

KyranF

I2C tiene muchas adiciones excelentes que le permiten funcionar bastante bien. También es invariable al voltaje, lo que le permite elegir niveles de voltaje más altos y más resistentes al ruido.

KyranF

Si el OP tiene la opción, elegir algo como RS232 o 485 (mejor) sería mejor que tratar de hacer que las comunicaciones de estilo en PCB como SPI e I2C hagan algo para lo que no están destinados.

Nick Alexeev

@KyranF El I2C asistido por búfer puede funcionar a un voltaje más alto. El I2C simple solo puede funcionar con voltajes de microcontrolador. He realizado un ejercicio de endurecimiento de un bus I2C: Memorias de un bus I2C demasiado grande . Si volviera a hacerlo, quitaría las secciones de largo alcance de I2C y las reemplazaría con un bus diferencial, mientras sigo usando I2C para la comunicación local.

KyranF

@NickAlexeev Hay muchas buenas interfaces de bus que se convierten entre I2C y otros protocolos y hardware industriales de mayor distancia ... es solo que es más común usar I2C por varias razones (una es que es un colector abierto, otras son la cantidad de cables y aunque es lento en comparación con SPI estándar, su velocidad de datos sigue siendo alta). En un entorno de control industrial, a menudo veo sensores y dispositivos externos que interactúan con I2C a pesar de su nombre y la intención de diseño original. Creo que debido a su arquitectura de bus multiesclavo lo hace más útil que ejecutar líneas SPI de selección de chip en todas partes.

Nick Alexeev

@KyranF Si lo entendí correctamente, está diciendo que hay circuitos integrados de puente especializados que se convierten de I2C a autobuses de larga distancia. ¿Algún ejemplo?

KyranF

@NickAlexeev el NXP SC16IS752 es un ejemplo, nxp.com/documents/data_sheet/SC16IS752_SC16IS762.pdf . Puede hacer una interfaz SPI o I2C a una salida de controlador diferencial dual RS485 (dúplex completo). ¡Golpea uno de estos en cada dispositivo y estarás dorado!

Nick Alexeev

crosley

En una respuesta en un foro de Microchip , Jan Axelson, autor de 'Serial Port Complete', reclama una longitud máxima de cable de 10' para el bus SPI. Otras publicaciones han mencionado la misma figura. Entonces, su distancia de 5 m puede funcionar o no, ya que es un poco más larga.

Otra respuesta en el mismo foro recomienda usar resistencias de terminación de 120 ohmios en las líneas.

Hay varias recomendaciones en la discusión de este tema que dicen que un factor importante es reducir la velocidad del reloj, hasta tan solo 100 kHz. Luego mire sus señales con un osciloscopio.

Una forma de aumentar la distancia mucho más allá de sus requisitos es usar aisladores digitales y controladores de par trenzado como se explica en este artículo: "Extensión del bus SPI para comunicación de larga distancia" . Afirma una distancia de 100 m (no es un error tipográfico).

Spehro Pefhany

Puede usar controladores y receptores LVDS para convertir las señales lógicas de un solo extremo en señales diferenciales. Es más confiable para una configuración de una sola caída (desde la placa hasta la placa externa solamente), y requiere que las conexiones a tierra estén cerca entre sí en potencial.

Use pares trenzados (por ejemplo, cable Cat5) y asegúrese de usar las terminaciones adecuadas o no funcionará de manera confiable, en todo caso.

https://www.fairchildsemi.com/application-notes/AN/AN-5017.pdf

Raj

Es posible traducir los datos entre los módulos mediante el uso de controladores de receptor trans, por ejemplo. RS485 algo como esto

ingrese la descripción de la imagen aquí

MAX3490

Necesita usar un par de este receptor trans, la idea es solo para ilustración, puede usar cualquier controlador trans que incluya controladores duales y se adapte mejor a sus necesidades

robar

Esta sería mi solución preferida al problema. Esta es exactamente la solución utilizada por muchos fabricantes de codificadores con, por ejemplo, protocolos biss o ssi, que pueden considerarse SPI mejorados. (Ejemplo: hengstler.de/en/technology/encoder/absolute/… )