Un automóvil es una pila de cientos de microcontroladores en estos días, solo pregunte a cualquier mecánico de GreyBeard y él comience su periódico “carburador”. Todos estos sistemas y subsistemas deben hablar entre sí en un entorno eléctricamente hostil, y no es una exageración decir que la falta de comunicación, o incluso la comunicación retrasada, puede tener consecuencias importantes. La creación de redes en automóvil es un negocio importante. La producción en masa de automóviles hace numerosos del Relevante Transceptor ICS de bajo costo para el hacker de hardware no automotriz. Entonces, ¿por qué no vemos más proyectos de hackers que aprovechan esta extraordinaria base de recursos?
La columna vertebral de la red de un automóvil es la red de área del controlador (lata). El propio Eric Nurchick] es un extraordinario de automóviles de pirata informático, y escribió muchos todo lo que querrás saber sobre el autobús de Can en una serie Multipart que ciertamente querrás marcar para leer más tarde. El motor, los frenos, las puertas y todas las revisiones de datos de instrumentación (diferencial) pueden. Es rápida y alta confiabilidad. También es complicado y un poco caro de implementar.
A fines de 1990, numerosos productores tuvieron sus propios protocolos de autobuses propietarios que se ejecutan junto con las partes no críticas de la red automotriz: cómo una consola montada en la puerta habla con los motores de chofer y ventana de bloqueo de la puerta, por ejemplo. No vale la pena abarrotar el autobús principal de la lata con comunicaciones no críticas y locales, por lo que las subidas se hirieron a la lata principal. Estos no necesitaban las garantías de velocidad o confiabilidad de la red principal, y por razones de costo tenían que ser fáciles de implementar. El microcontrolador más pequeño debería ser suficiente para rodar una ventana hacia arriba y hacia abajo, ¿verdad?
A principios de la década de 2000, la especificación de la red de interconexión local (LIN) estandarizó un método para estas subbetes, centrándose en un bajo costo de implementación, velocidad media, reconfigurabilidad y comportamiento predecible para la comunicación entre un microcontrolador maestro y un pequeño número de esclavos en un clúster. Barato, simple, implementable en microcontroladores pequeños, y lo mejor posible para proyectos a mediano escala? ¡El sueño de un hacker! ¿Por qué no estás usando Lin en tus múltiples proyectos micro? Vamos a cavar y puedes ver si algo de esto es útil para ti.
El protocolo LIN
Un Lin “Cluster”, que es lo que se llama la mini-red local en la jerga, consiste en un solo microcontrolador maestro y una serie de esclavos. Lin se inicia como serial convencional 8N1 UART, típicamente a 19,200 baudios, y se aleja con un solo cable. A continuación, agrega un protocolo que permite que este cable único se use como un autobús, compartido entre múltiples esclavos. Si intentó rodar su propio protocolo de red para facilitar la comunicaciones en serie de UART, terminará con algo como Lin. ¡Ve a buscar una copia de la especificación (PDF) y lee junto!
Cada transacción LIN es fundamentalmente lo mismo: el maestro envía un encabezado que incluye un identificador protegido (PID), que especifica la tarea a realizar. Las tareas pueden ser algo así como “Sensor de temperatura del informe 2” o “Establecer la posición del servo 3”. Dependiendo de la tarea, entre uno y ocho bytes de datos a continuación, con una suma de comprobación de dos bytes. Los esclavos deben saber en qué tareas responder y cómo responder. Por lo tanto, si se envía “SET SERVO 3 POSIBLE”, el esclavo servo 3 necesita escuchar los siguientes bytes y reaccionar en consecuencia. Todos los esclavos que no responden al comando pueden ignorar los datos hasta el próximo preámbulo.
En el caso de “Sensor de temperatura del informe 2”, el esclavo con el sensor de temperatura envía sus datos de inmediato después de recibir el comando. Debido a que la longitud del byte se conoce de antemano, y solo el sensor 2 puede responder a esta tarea, el Maestro sabe escuchar exactamente, por ejemplo, cuatro bytes en reacción y sabe cuánto tiempo debe tomar.
Este sistema de votación con los encabezados de envío maestro y las reacciones de envío de esclavos garantizan que ninguno de los dispositivos accederá al autobús al mismo tiempo, por lo que Lin obtiene con una sola línea RX / TX. El preámbulo incluye un byte de sincronización (0x55) que ayuda a los esclavos a bloquear el reloj maestro, por lo que los esclavos pueden ejecutarse con fuentes de reloj RC menos costosas y la transmisión automática es posible.
Dado que la longitud de los mensajes se conoce con anticipación, el tiempo para la rutina de sondeo del maestro se puede escribir en un horario. El Maestro encuestó la red en intervalos definidos, y si el esclavo no responde dentro de 1.4 veces el tiempo requerido para la transacción, se presume que le falta en acción. De cualquier manera, el maestro está en el siguiente artículo en su horario, y no volverá a intentar el esclavo potencialmente defectuoso hasta que su turno se vuelva nuevamente. Esto garantiza una tasa de actualización conocida para todos los dispositivos, lo que hace que la vida sea mucho más sencilla para programar el maestro.
Esos son lo básico. El maestro envía PIDS, y sigue una serie de bytes de datos. Todo está cómodo Old UART, Call and Respuesta, adaptado de la manera más simple posible para crear una pequeña red.
Extras
Aplicación de configuración GUI LIN de un VI InstructivoDEO.
Mantener la red que sea fácil requiere que todos los maestros y esclavos estén de acuerdo con el conjunto de comandos y las longitudes de reacción válidas. Eso es una gran cantidad de información necesaria para que el clúster LIN funcione, en principio. Ayudando a los asuntos por un poco, hay un formato convencional para observar todo esto establecido en la especificación LIN.
También hay una API convencional para C que tanto los microcontroladores maestros como los esclavos pueden usar para hacer que el manejo codifique el comportamiento en un clúster de LIN. Combinado, esto hace que un flujo de trabajo convencional para especificar e implementar los buses de LIN, muy útil para los fabricantes de automóviles, y tampoco es inútil para el hacker.
También hay un estado de sueño y un comportamiento que se define para el autobús, con señales asociadas para dormir y despertador. Todos los esclavos deben responder a la señal de suspensión, y cualquiera de ellos debería irse a dormir automáticamente después de un tiempo de espera de cuatro segundos si no han escuchado del maestro. Cualquier nodo, esclavo o maestro, puede enviar el comando de activación y, después de eso, el maestro debe volver a su programa de sondeo normal.
Lin Version 2.0 incluyó una serie de tipos de cuadros opcionales que hacen que la red sea mucho más flexible. En particular, “los marcos esporádicos” hacen que la reacción del esclavo sea opcional si no ha obtenido ningún dato nuevo porque la última actualización. “Los marcos disparados por evento” son como marcos esporádicos, excepto que pueden responder adicionalmente por cualquier nodo esclavo que tenga datos nuevos.
Esto introduce la posibilidad de una colisión en el autobús, en cuyo caso esperamos que la suma de control no se suma y el maestro se vuelve a los marcos específicos de esclavos como antes. Estos dos modos aceleran el autobús cuando las actualizaciones de datos son poco frecuentes, pero agregan alguna indeterminación a la programación y la complejidad condicional al código. Úsalos solo si los necesitas.
El maestro también puede tener múltiples horarios, y cambiar entre ellos. A los esclavos no les importa, simplemente escuchan las tareas que son relevantes para ellos de todos modos. No hay razón para que el Maestro envíe datos de posición de servo cada período si no ha cambiado, por ejemplo, incluso si hace que las cosas conceptualmente sean más simples. Tu llamada.
Incluso hay una especificación de capa de transporte opcional que es compatible con el bus CAN y lo hace más sencillo para integrar el clúster LIN local con la red más grande. En resumen, Lin es un pensamiento muy pensado a través del protocolo de autobuses de UART con una buena adopción de la industria. Encontrará buenos tutoriales de cada proveedor de Lin Transceiver Hardware. (Aquí hay una terrible introducción de los instrumentos nacionales).
Hardware – la capa física
Topping Todo este protocolo Minery desactivado es una amplia variedad de chips de transceptor LIN que van desde $ 0.25 a $ 0.50 para transceptores lisos, hasta alrededor de un dólar o dos para los chips de “base del sistema” con reguladores de voltaje integrados. Estos son especialmente resbaladizos, porque el transceptor puede cuidar la lógica de sueño / despertador y encender y apagar la fuente de alimentación a su microcontrolador. Esto hace que la integración de un nodo esclavo que funcione a 3.3 V muy simple.
Pequeño chip te compra mucho.
Dado que el bus LIN está desarrollado para automóviles, normalmente se especifica por 12 V porque eso es lo que cursos a través de las venas del arnés de cableado de su automóvil. El hardware de LIN TRANSCEIVER debe poder acomodar voltajes aún más altos, ya que los sistemas eléctricos de automóviles pueden ser entornos puntiagudos. También tienen que hacer frente a la contienda de autobuses, cuando el chip del transceptor puede intentar sacar la línea de LIN mientras otra persona está tratando de lograrlo, por lo que también hay una protección de sobrecalentamiento incorporada. Los transceptores LIN son pequeñas bestias robustas.
En contraste con las líneas I2C, que se detienen con resistencias punzantes, un bus de linaje automotriz se detiene hasta 12 V con una resistencia de 1 kΩ. Para tirar de esta línea lo suficientemente rápido, los transceptores LIN deben poder conducir decenas de miliampers, por lo que tienen transistores ligeramente cursos (para ICS) incorporados. La combinación de una corriente de línea de alto voltaje y relativamente alta implica que una especificación automotriz. Lin Bus es bueno por 40 metros, en lugar de los metros de pareja que I2C te da sin recurrir a los conductores. Si necesita la distancia o la inmunidad de ruido, Lin está ahí para usted.
Pero nada te obliga a ejecutar su autobús a las 12 V, incluso el hardware del transceptor. Los transceptores de microchip que he visto se ejecutan a 5.5 V, mientras que los de NXP y Melexis se agotan en un 5 V. compatible con Arduino.
¡Y nada te obliga a usar el hardware del transceptor en absoluto! Simplemente podría conectar un transistor PNP (o P-canal MOSFET) a la línea de bus y conduzca con el UART TX, muestreando el autobús con la línea RX. Esto tiene el inconveniente del eco local, pero eso podría manejarse en software. O, con solo unas pocas partes mucho más, hay este servicio que hemos visto antes. Sin embargo, no pude encontrar ningún proyecto de piratas informáticos que implementan los transceptores LIN desde cero. Tal vez eso es porque los industriales son tan baratos.
Fortalezas y debilidades
Ningún bus es ideal para todas las ocasiones, y Lin no es una excepción. Lin no es particularmente rápido, se desarrolla alrededor de 19,200 BAUD UART. Las actualizaciones se vuelven bastante poco frecuentes, desde la perspectiva de un microcontrolador. Una transacción completa, con tiempo de espera, toma alrededor de diez milisegundos. Si el Maestro encuestó dieciséis dispositivos, eso es una tasa de actualización de alrededor de siete hertz en el peor de los casos. Por supuesto, el maestro no necesita ser encuesta en cada dispositivo cada vez, y numerosas veces los mensajes serán la mitad de esa longitud, pero no va a obtener mucho más de 200 Hz. Por otro lado, la tasa de actualización es constante debido a la capacidad de ejecutar los tiempos de espera ajustados para dispositivos escamosos, lo que es fantástico para la confiabilidad y la simplicidad, y no es mucho más lento que I2C.
Hay dos versiones principales de Lin que verás en la naturaleza, 1.x y 2.x. Además de los tipos de cuadros opcionales descritos anteriormente, las dos versiones tienen diferentes fórmulas de suma de comprobación, y la de 2.x es realmente extraña, que requiere una calculadora basada en la web para asegurarse de que lo está haciendo bien. En lugar de la adición MOD-256, restan 255 de cualquier valor 256 o mayor. Es como un desbordamiento de 8 bits que se envuelve a 1 en lugar de 0. ¿Tiene esto sentido para alguno de ustedes?
Los dispositivos LIN no son tan frecuentes fuera de la industria automotriz como I2C o SPI, por un tiro largo, por lo que probablemente nunca se ha visto obligado a lidiar con el protocolo. Pero si desea redactar un pequeño número de módulos basados en microcontroladores, lo más fácil y económico posible, use solo un cable (más suelo), es difícil pensar en algo más fácil. Escribir el código de esclavo I2C sin ciertamente ningún picnic. Escribe código para escuchar un byte particular en una línea UART y luego reaccionar no podría ser más sencillo.
¿Quieres convertir tu uart de vainilla en un autobús? ¡Toma una página o dos fuera del libro de Lin! ¿Ya lo has hecho ya? ¡muéstranos!