40 votos

SPI o I2C: que usar para un autobús largo

Estoy contemplando un proyecto que requeriría varios AVR hablando entre ellos sobre un autobús. Estarían separados hasta por 6 pies.

Parece que tanto I2C como SPI pueden dejar que una serie de micros se comuniquen a través de un autobús, pero no he visto nada que hable de cuánto tiempo sería eso. ¿Alguien ha intentado conectar estos protocolos a distancias de varios pies?

0 votos

En una ocasión he pasado el bus I2C por un cable. En retrospectiva, debería haber utilizado CAN o RS-485 en su lugar (tenía microcontroladores en ambos extremos).

10voto

fearphage Puntos 250

Varios pies no deberían ser problemáticos, simplemente usa cables trenzados si puedes. SPI es mucho más fácil de amortiguar (si lo necesitas) que I2C ya que las señales de SPI son todas unidireccionales, mientras que las de I2C están en líneas compartidas.

¿pueden los microcontroladores AVR manejar los modos esclavo I2C y SPI así como los modos maestro? (se necesitan ambos)

2 votos

¿¿¿¿¿¿¿¿?????????????????????? NUNCA retuerzas las líneas de datos y de reloj de I2C. Con SPI esto es probablemente un problema menor, pero yo nunca retorcería las líneas de señal a menos que sea un par balanceado, en cuyo caso retorcerlas es una muy buena idea.

0 votos

Nunca digas nunca; yo preferiría un pequeño acoplamiento capacitivo (debido a la torsión) entre los datos y el reloj en lugar de un pequeño acoplamiento inductivo a una electrónica de potencia ruidosa (debido a la no torsión)

4 votos

Lo siento, definitivamente no estoy de acuerdo. En el estado 1 las líneas tienen una impedancia bastante alta. Lo he visto hacer, lo he visto fallar. La mejor opción es tener líneas de tierra de baja corriente entre o incluso mejor en ambos lados de las líneas I2C.

10voto

Bryan Denny Puntos 18960

Para I2C en distancias largas, es posible que quieras buscar algunas soluciones de "repetidor de bus I2C". Tenga en cuenta que cualquier distancia máxima que pueda encontrar para la comunicación I2C o SPI se refiere principalmente a la distancia total del bus y no a la distancia entre dos nodos en un bus.

Puede que quieras mirar el RS485 para este tipo de problemas. Es un protocolo de bus en serie que se comunica a través de líneas diferenciales, por lo que al utilizar cables trenzados se minimizan las posibilidades de ruido. De esta manera se pueden alcanzar distancias muy largas. El inconveniente sería que necesitarías un IC codificador RS485 adicional (como un MAX485 ,no muy caro) en tu circuito.

0 votos

El RS485 es sin duda una buena forma de hacerlo.

0 votos

Tenga en cuenta que RS485 tiene dos aspectos diferentes a RS232 que son algo independientes: los niveles lógicos diferenciales físicos, y el aspecto multimaster. Usted puede escoger + elegir estos, hemos utilizado ambos traductores LVDS y RS485 con UART (RS232) para punto a punto sin entrar en las partes multidrop de RS485.

2 votos

Por cierto, el RS485 no es un protocolo, sólo define la capa física. Dicho esto, se puede utilizar SPI sobre RS485. Sería una buena solución para mantener las comunicaciones en modo SPI si es necesario ( estoy asumiendo que es, podría estar conectado a un ADC remoto o similar). Usando SPI sobre RS485 tendrás que comprobar que las velocidades de giro del transceptor son compatibles con las velocidades de datos SPI propuestas

8voto

Alex Andronov Puntos 178

Esta es la forma en que un electricista resuelve el problema:

Dejemos que $U$ sea una tensión en la entrada de la escalera de las resistencias. Sea $I_k$ sea la corriente en el brazo horizontal de la sección k-ésima, $I_0$ sea la corriente en el brazo horizontal de la sección 0 (sección inicial), $I_n$ sea la corriente en el brazo horizontal de la n-ésima sección (última sección) Así que estoy trabajando actualmente con $n+1$ secciones. Aplicando sucesivamente a los circuitos cerrados la ley de tensión de Kirchhoff, encontramos:

$$RI_0+R(I_0-I_1)=U$$

$$R(I_0-I_1)-RI_1-R(I_1-I_2)=0$$

$$..............................$$

$$-R(I_{n-1}- I_n)+2RI_n=0$$ Después de la simplificación:

$$2I_0-I_1=\frac{U}{R}$$

$$3I_k-I_{k+1}-I_{k-1}=0$$

$$3I_n-I_{n-1}=0$$ Ahora, la resistencia efectiva:

$$R_e=\frac{U}{I_0}$$ El siguiente paso es resolver la relación de recurrencia. Sorprendentemente, Wolfram Alpha hace un buen trabajo: Enlace aquí . Hay $f(k)$ en lugar de $I_k$

Así que $R_e=R\frac{(7-3\sqrt 5)(3-\sqrt 5)^n+(3+\sqrt 5)^{n+1}}{(1+\sqrt 5)(3+\sqrt 5)^n-2(\sqrt 5-2)(3-\sqrt 5)^n}$

Esta respuesta es coherente con la de Zassounotsukushi

0 votos

Esta es una respuesta muy antigua, pero ¿podrías decir a qué distancia estabas enviando tu protocolo SPI modificado? (Ese es el objetivo de la pregunta...)

1 votos

@DanielGriscom: Alrededor de 3 pies típicamente, sobre un cableado no muy impresionante, pero a veces más largo.

6voto

Pat Puntos 3464

Aunque tanto I2C como SPI están diseñados para recorridos de corta distancia (unos pocos centímetros), ambos pueden utilizarse en recorridos más largos con un cable adecuado y prestando atención a la capacitancia general del bus.

Aunque tengo poca experiencia con SPI, I2C no es terriblemente difícil dado que siempre hay que calcular el tamaño adecuado de la resistencia de pull-up. Además, hay búferes I2C dedicados y baratos que son bastante fáciles de usar. Sin embargo, tendrás que usar una resistencia de pull-up de tamaño adecuado para tu red.

He utilizado I2C para conectar en red dos AVRs a una distancia de 8 pies, utilizando sólo resistencias pull-up y un cable trenzado de alta calidad y bien apantallado.

0 votos

Hay que tener cuidado con I2C con cables multiconductores, la capacitancia puede hacer que el bus se ralentice considerablemente.

2voto

Duncan Smart Puntos 9195

Un grupo es una categoría con un único objeto y todos los morfismos son invertibles; un grupo abeliano es un monocompartimento categoría con un solo objeto y todos los morfismos invertibles.

Esto se puede ver mediante el truco de que si un conjunto (en este caso los morfismos de la categoría) tiene dos multiplicaciones que conmutan entre sí (en este caso composición de morfismos y producto tensorial de morfismos) y tienen la misma unidad (el único morfismo identidad de la categoría), entonces coinciden y son conmutativas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X