{"id":353,"date":"2022-03-20T21:27:52","date_gmt":"2022-03-20T21:27:52","guid":{"rendered":"https:\/\/jagumiel.xyz\/blog\/?p=353"},"modified":"2025-03-06T21:46:26","modified_gmt":"2025-03-06T21:46:26","slug":"puesta-en-marcha-del-protocolo-para-automocion-lin","status":"publish","type":"post","link":"https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/","title":{"rendered":"Puesta En Marcha Del Protocolo Para Automoci\u00f3n LIN"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p>Existen infinidad protocolos de comunicaci\u00f3n diferentes, muchos son dependientes del campo de aplicaci\u00f3n. En automoci\u00f3n conviven varios protocolos que intercambian datos entre s\u00ed dentro del mismo coche. Algunos ejemplos son LIN, CAN, FlexRay, SENT o MOST. En esta entrada se va a explicar la puesta en marcha del protocolo para automoci\u00f3n LIN.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Los veh\u00edculos modernos<\/h3>\n\n\n\n<p>Los coches han dejado de ser puramente mec\u00e1nicos para convertirse en nada menos que un conjunto de sistemas embebidos en movimiento. Durante d\u00e9cadas, ha habido una incorporaci\u00f3n continuada de nuevos elementos electr\u00f3nicos, desde <a href=\"https:\/\/jagumiel.xyz\/blog\/2021\/03\/30\/autoradio-hack-anade-una-entrada-de-audio-auxiliar\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"A\u00f1ade una entrada de audio auxiliar a tu autorradio.\">autorradios<\/a> hasta complejos elementos de seguridad (como el ABS, ESC, AEB\u2026), pasando por el control electr\u00f3nico de inyecci\u00f3n y llegando a los ADAS, que se acercan a la conducci\u00f3n aut\u00f3noma.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La electr\u00f3nica en los coches<\/h3>\n\n\n\n<p>La electr\u00f3nica no s\u00f3lo llega a los elementos cr\u00edticos del veh\u00edculo, sino que est\u00e1 presente en muchos otros aspectos, desde la eficiencia del veh\u00edculo hasta el confort. Y es que podemos encontrar elementos electr\u00f3nicos que mejoren la aerodin\u00e1mica, que iluminen la carretera para que el conductor tenga la mejor visibilidad posible sin cegar al resto de usuarios de la v\u00eda, que regulen la posici\u00f3n de los asientos y espejos, o que faciliten la interacci\u00f3n con el sistema de infotenimiento sin que el conductor aparte la mirada de la carretera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La raz\u00f3n de la variedad de protocolos<\/h3>\n\n\n\n<p>Dicho esto, los diferentes sistemas tienen diferentes necesidades. Hay elementos que deben tener un tiempo de respuesta muy bajo y cuya probabilidad de fallo ha de ser nula (como por ejemplo el airbag) y hay otros que necesitan de un gran ancho de banda, pero que los fallos no son cr\u00edticos (como la c\u00e1mara de visi\u00f3n trasera).<\/p>\n\n\n\n<p>Que se pierda un fotograma o que la imagen tenga alguna interferencia no es algo cr\u00edtico, pero que ante una colisi\u00f3n no salte el airbag, s\u00ed que puede tener serias consecuencias. Esto da lugar a que convivan diferentes protocolos de comunicaci\u00f3n dentro del veh\u00edculo, y la elecci\u00f3n de uno u otro depende de la aplicaci\u00f3n y par\u00e1metros como la tolerancia a fallos, la velocidad de transmisi\u00f3n, el ancho de banda o el coste.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Protocolo para automoci\u00f3n LIN: Local Interconnect Network<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es?<\/h3>\n\n\n\n<p>LIN es un protocolo de comunicaciones de automoci\u00f3n. Tiene un bajo coste y est\u00e1 orientado hacia aplicaciones que no tengan requisitos de seguridad. Su velocidad y ancho de banda son bajos. Tal y como se ve en la siguiente imagen, las comunicaciones de automoci\u00f3n LIN son una subred de CAN.<\/p>\n\n\n\n<div id=\"attachment_356\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/1-1024x496.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-356\" class=\"aligncenter size-full wp-image-356\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/1-1024x496.png\" alt=\"Esquema del protocolo para automoci\u00f3n LIN\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-356\" class=\"wp-caption-text\">Imagen 1. Dos esquemas que reflejan la arquitectura de red LIN.<\/p><\/div>\n\n\n\n<p>La ventaja del protocolo para automoci\u00f3n LIN reside en que permite reducir costes respecto a un sistema CAN para aquellas aplicaciones que no requieran una velocidad de transmisi\u00f3n elevada. Adem\u00e1s, es una comunicaci\u00f3n determinista, es el maestro el que tiene que iniciar la comunicaci\u00f3n, y se dirige al esclavo a trav\u00e9s de su identificador. La longitud de las tramas y el tiempo de transferencia se puede conocer de antemano.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo funciona el protocolo para automoci\u00f3n LIN?<\/h3>\n\n\n\n<p>En el siguiente ejemplo se muestra una trama del protocolo para automoci\u00f3n LIN 2.2:<\/p>\n\n\n\n<div id=\"attachment_358\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/2-1024x432.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-358\" class=\"aligncenter size-full wp-image-358\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/2-1024x432.png\" alt=\"Estructura del frame en el protocolo para automoci\u00f3n LIN\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-358\" class=\"wp-caption-text\">Imagen 2. Estructura de una trama en el protocolo de comunicaci\u00f3n LIN.<\/p><\/div>\n\n\n\n<p>La l\u00ednea del protocolo est\u00e1 activa a \u20181\u2019, se pone a \u20180\u2019 mediante un Sync Break, que suele ser de una duraci\u00f3n superior a 13 bits. Inmediatamente despu\u00e9s se manda un campo de sincronizaci\u00f3n, equivale al env\u00edo del n\u00famero hexadecimal 0x55. Es una comunicaci\u00f3n que no usa un reloj, por lo que el esclavo se sincroniza a partir de esa velocidad. <\/p>\n\n\n\n<p>Lo que se le manda a continuaci\u00f3n es el identificador, en la versi\u00f3n 2.2 del protocolo consta de 6 bits del PID y otros 2 bits de paridad, m\u00e1s adelante se explicar\u00e1 c\u00f3mo obtener este dato. <\/p>\n\n\n\n<p>Por \u00faltimo, se manda la trama y se termina con el checksum. En caso de que no se env\u00ede un comando, si no que se espere recibir una respuesta, ser\u00e1 el esclavo el que env\u00ede el dato solicitado. Un mismo dispositivo puede responder a m\u00e1s de un ID, dependiendo de la acci\u00f3n que se quiera obtener de \u00e9l.<\/p>\n\n\n\n<p>Cabe a\u00f1adir que, al igual que en una comunicaci\u00f3n UART, por cada Byte hay un bit de <em>start<\/em> y otro de <em>stop<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00e1lculo del identificador<\/h3>\n\n\n\n<p>Como se ha comentado anteriormente, en la versi\u00f3n 2.2 de LIN la cabecera consta de los campos break, sincronizaci\u00f3n e identificador.<\/p>\n\n\n\n<p>El identificador protegido (PID) se obtiene a trav\u00e9s del ID de la trama de LIN y dos bits de paridad. Para ello se toman los seis bits menos significativos del ID y se hacen las siguientes operaciones para obtener los bits de paridad (P0 y P1).<\/p>\n\n\n\n<div id=\"attachment_359\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/3-1024x368.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-359\" class=\"aligncenter size-full wp-image-359\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/3-1024x368.png\" alt=\"LIN frame ID Field\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-359\" class=\"wp-caption-text\">Imagen 3. Estructura del campo de identificaci\u00f3n de la trama.<\/p><\/div>\n\n\n\n<p>Para comprenderlo mejor se va a poner un ejemplo pr\u00e1ctico. Vamos a poner que el ID del esclavo sea 0x10, y vamos a descomponerlo para ver c\u00f3mo se obtiene su PID.<\/p>\n\n\n\n<p>0x10 = 0001 0000<\/p>\n\n\n\n<p>Quitando los dos bits menos significativos queda lo siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Binario<\/strong><\/td><td><strong>ID 5<\/strong><\/td><td><strong>ID 4<\/strong><\/td><td><strong>ID 3<\/strong><\/td><td><strong>ID 2<\/strong><\/td><td><strong>ID 1<\/strong><\/td><td><strong>ID 0<\/strong><\/td><\/tr><tr><td><strong>010000<\/strong><\/td><td>0<\/td><td>1<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Tabla 1. Campo identificador prescindiendo de los dos bits menos significativos.<\/figcaption><\/figure>\n\n\n\n<p>P0 = 0 \u2295 0 \u2295 0 \u2295 1 = 1<\/p>\n\n\n\n<p>P1 = \u00ac(0 \u2295 0 \u2295 1 \u2295 0) = 0<\/p>\n\n\n\n<p>Cambiamos la disposici\u00f3n y queda de la siguiente forma:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>PID<\/strong><\/td><td><strong>P1<\/strong><\/td><td><strong>P0<\/strong><\/td><td><strong>ID 5<\/strong><\/td><td><strong>ID 4<\/strong><\/td><td><strong>ID 3<\/strong><\/td><td><strong>ID 2<\/strong><\/td><td><strong>ID 1<\/strong><\/td><td><strong>ID 0<\/strong><\/td><\/tr><tr><td><strong>01010000<\/strong><\/td><td>1<\/td><td>0<\/td><td>0<\/td><td>1<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Tabla 2. Campo identificador tras a\u00f1adir los bits de paridad (P0 y P1) previamente calculados.<\/figcaption><\/figure>\n\n\n\n<p>El PID en binario es 0b01010000, que en hexadecimal se traduce en 0x50.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00e1lculo del checksum<\/h3>\n\n\n\n<p>Una vez que conocemos el PID y tenemos ya una trama de datos para enviar, el \u00faltimo campo de la trama es el checksum. Este se forma a partir del PID y de los datos a enviar. Este m\u00e9todo se denomina \u201c<em>enhanced<\/em>\u201d.<\/p>\n\n\n\n<p>Para obtener el checksum se hace el sumatorio del PID y los bytes de datos. Cuando se supera el valor 0xFF, se le resta. Cuando se llega al \u00faltimo dato, con el resultado obtenido, se hace la funci\u00f3n inversa. A continuaci\u00f3n, se explica con un ejemplo:<\/p>\n\n\n\n<p>PID = 0x50<\/p>\n\n\n\n<p>Data = 0x52, 0xC3, 0x32<\/p>\n\n\n\n<p>0x50 + 0x52 = 0xA2;<\/p>\n\n\n\n<p>0xA2 + 0xC3 = 0x165; (Hay overflow, 0x165&gt;0xFF. Hay que restarle a ese valor 0xFF)<\/p>\n\n\n\n<p>0x165 &#8211; 0xFF = 0x66;<\/p>\n\n\n\n<p>0x66 + 0x32 = 0x98;<\/p>\n\n\n\n<p>\u00ac(0x98) = 0x67;<\/p>\n\n\n\n<p>El campo checksum es 0x67. Existen herramientas que son capaces de calcular estos resultados de forma autom\u00e1tica. Un ejemplo se encuentra en <a href=\"https:\/\/linchecksumcalculator.machsystems.cz\/\" title=\"LIN Checksum Calculator\" target=\"_blank\" rel=\"noreferrer noopener\">esta calculadora en l\u00ednea<\/a>, aunque tambi\u00e9n se ha creado un programa en C que hace eso mismo. Se encuentra en <a href=\"https:\/\/github.com\/jagumiel\/LIN-Automotive\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"GitHub: LIN-Automotive repository\">mi repositorio de GitHub dedicado a LIN<\/a>.<\/p>\n\n\n\n<p>En la siguiente imagen se muestra c\u00f3mo se han introducido los datos en la calculadora y el resultado obtenido. Como se aprecia, tanto en el m\u00e9todo manual como en el autom\u00e1tico, llegamos a la misma conclusi\u00f3n.<\/p>\n\n\n\n<div id=\"attachment_363\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/4.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-363\" class=\"aligncenter size-full wp-image-363\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/4.png\" alt=\"Comprobaci\u00f3n de la trama en LIN.\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-363\" class=\"wp-caption-text\">Imagen 4. C\u00e1lculo y verificaci\u00f3n del checksum de la trama LIN con la herramienta online de Mach Systems.<\/p><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Hardware<\/h3>\n\n\n\n<p>El protocolo LIN funciona a 12V, que es uno de los valores est\u00e1ndares en automoci\u00f3n. Para esta comunicaci\u00f3n es necesario en transceptor de LIN, como el TJA1020. Se encarga de adaptar los valores para que los microcontroladores (\u00b5C) que interpreten los datos puedan transmitir y recibir datos. Desde el lado del \u00b5C, una comunicaci\u00f3n de este tipo podr\u00eda resumirse (muy a grandes rasgos) en una UART con un transceptor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Puesta En Marcha<\/h2>\n\n\n\n<p>Se ha puesto en marcha el protocolo LIN utilizando la familia PSoC 4 de Cypress. Se han utilizado las siguientes placas de evaluaci\u00f3n y software:<\/p>\n\n\n\n<p><strong><u>Hardware:<\/u><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2x CY8CKIT-042<\/li>\n\n\n\n<li>1x CY8CKIT-026<\/li>\n<\/ul>\n\n\n\n<p><strong><u>Software:<\/u><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PSoC Creator 4.2<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Arquitectura Hardware<\/h3>\n\n\n\n<p>Las tarjetas CY8CKIT-026 y CY8CKIT-042 est\u00e1n pensadas para usarse conjuntamente, y el pin-out est\u00e1 hecho para que puedan montarse como un s\u00e1ndwich. Tambi\u00e9n tiene compatibilidad con Arduino.<\/p>\n\n\n\n<p>La 026 es simplemente una tarjeta que monta dos interfaces CAN y LIN. Al haber dos interfaces de LIN, se puede configurar una como maestro y otra como esclavo. Mientras que la 042 monta un \u00b5C PSoC4. Lo que se ha hecho es utilizar una tarjeta para conectarla a la interfaz de esclavo y la otra usarla como maestro.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Modificaciones sobre el Hardware<\/h4>\n\n\n\n<p>Lo primero que ha habido que hacer es cambiar algunos de los componentes electr\u00f3nicos de la interfaz de LIN para convertirla en maestro, ya que por defecto ambas interfaces est\u00e1n configuradas como esclavos. Se ha dejado de la siguiente forma:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Interfaz<\/strong><\/td><td><strong>Diodo<\/strong><\/td><td><strong>Resistencia<\/strong><\/td><td><strong>Condensador<\/strong><\/td><\/tr><tr><td><strong>LIN 1 (Maestro)<\/strong><\/td><td>D4 = PMLL4148L<\/td><td>R22 = 1 kW<\/td><td>C20 = 220 pF<\/td><\/tr><tr><td><strong>LIN 2 (Esclavo)<\/strong><\/td><td>D2 = &#8211;<\/td><td>R7 = &#8211;<\/td><td>C13 = 1 nF<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Tabla 3. Componentes que hay que modificar para que el transceptor haga de maestro o de esclavo.<\/figcaption><\/figure>\n\n\n\n<div id=\"attachment_365\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/5.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-365\" class=\"aligncenter size-full wp-image-365\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/5.png\" alt=\"Modificaciones en el esquema del circuito.\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-365\" class=\"wp-caption-text\">Imagen 5. Esquem\u00e1tico. Indica que cambios se deben hacer en el circuito.<\/p><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Conectando el maestro y el esclavo<\/h4>\n\n\n\n<p>El conexionado entre las tarjetas de evaluaci\u00f3n se ha hecho de la siguiente forma:<\/p>\n\n\n\n<div id=\"attachment_366\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/6.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-366\" class=\"aligncenter size-full wp-image-366\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/6.png\" alt=\"Comunicaci\u00f3n entre master y slave con development boards\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-366\" class=\"wp-caption-text\">Imagen 6: Interconexionado entre las tarjetas de evaluaci\u00f3n de Cypress para establecer una comunicaci\u00f3n Maestro-Esclavo.<\/p><\/div>\n\n\n\n<p>Como se quiere establecer una comunicaci\u00f3n maestro-esclavo, el conjunto de 026+042 en s\u00e1ndwich act\u00faa como esclavo, y la otra tarjeta, env\u00eda una trama a trav\u00e9s de la UART a la interfaz LIN1, configurada como maestro en la placa 026. Cabe mencionar que se han puesto ambas tarjetas para que sus pines funcionen a 5VDC. Las dos tienen un jumper para configurar el voltaje a 3V3 o a 5V. Se ha puesto GND en com\u00fan entre ambas tarjetas. El pin de NSLP tiene que estar activo a \u20181\u2019. Se ha conectado directamente a 5V.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Arquitectura Software<\/h3>\n\n\n\n<p>Como se ha explicado anteriormente, el protocolo LIN funciona como una UART, lo \u00fanico que se necesita es un transductor, ya que funciona a diferentes niveles de voltaje. Adem\u00e1s, ese elemento permite convertir las l\u00edneas de RX y TX en una \u00fanica l\u00ednea.<\/p>\n\n\n\n<p>Simplific\u00e1ndolo mucho, lo que se va a hacer es usar una UART en el maestro para enviar y recibir tramas y la API de LIN que proporciona Cypress en el esclavo. No existe actualmente una API de LIN para el maestro, es por eso por lo que se recurre a la UART, de la que tambi\u00e9n existe una API.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Maestro:<\/h4>\n\n\n\n<p>En el maestro se a\u00f1ade la API de UART. Servir\u00e1 para enviar la trama de datos a la interfaz LIN.<\/p>\n\n\n\n<div id=\"attachment_368\" style=\"width: 187px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/7.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-368\" class=\"aligncenter size-full wp-image-368\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/7.png\" alt=\"Api del m\u00f3dulo UART en Cypress PSoC 4\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-368\" class=\"wp-caption-text\">Imagen 7. API del M\u00f3dulo UART.<\/p><\/div>\n\n\n\n<p>El c\u00f3digo que se ha escrito para el env\u00edo del mensaje es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UART_MASTER_UartSendBreakBlocking(13);\t\t\/\/ Break\nUART_MASTER_UartPutChar(sync);\t\t\t\/\/ Sync (0x55)\nUART_MASTER_UartPutChar(pid);\t\t\t\/\/ Protected ID (PID). \nfor(int i=0; i&lt;8; i++){\n      \tUART_MASTER_UartPutChar(packet&#091;i]);\t\/\/ Command Frame\n\t}\nUART_MASTER_UartPutChar(checksum);\t\t\/\/ Checksum. LIN 2.2\n<\/code><\/pre>\n\n\n\n<p>Tanto el PID como el contenido del paquete a enviar y el checksum, se definen y calculan previamente al env\u00edo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Esclavo:<\/h4>\n\n\n\n<p>Para el esclavo, lo primero que se ha hecho ha sido utilizar el ejemplo que proporciona Cypress. Aunque a partir de ese ejemplo, posteriormente se han hecho otros nuevos y se ha ido incrementando la complejidad.<\/p>\n\n\n\n<p>El ejemplo de LIN que se ha tomado es el \u201c<em>Basic LIN Slave Implementation in PSoC 4<\/em>\u201d. En resumen, es un programa al que le llega un c\u00f3digo a trav\u00e9s de LIN y en funci\u00f3n de la trama recibida cambia los colores del led (o lo apaga por completo) o env\u00eda el estado del led informando de su color actual (o de si est\u00e1 apagado).<\/p>\n\n\n\n<p>Dado que se ha modificado la tarjeta CY8CKIT-026 para que la interfaz LIN 1 se comporte como maestro, se ha tenido que modificar tambi\u00e9n el pin-out del \u00b5C.<\/p>\n\n\n\n<div id=\"attachment_369\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/8.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-369\" class=\"aligncenter size-full wp-image-369\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/8.png\" alt=\"Pin-out electr\u00f3nico del microcontrolador.\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-369\" class=\"wp-caption-text\">Imagen 8. Pin-out del microcontrolador que hace el papel de esclavo.<\/p><\/div>\n\n\n\n<p>La estructura de LIN se hace mediante una API. Est\u00e1 previamente configurada:<\/p>\n\n\n\n<div id=\"attachment_370\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/9.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-370\" class=\"aligncenter size-full wp-image-370\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/9.png\" alt=\"Configuraci\u00f3n de los m\u00f3dulos LIN y su output.\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-370\" class=\"wp-caption-text\">Imagen 9. Configuraci\u00f3n de los m\u00f3dulos de LIN y las se\u00f1ales de salida que van hacia los LEDs.<\/p><\/div>\n\n\n\n<p>En la configuraci\u00f3n de LIN se ha elegido el est\u00e1ndar 2.2. Los ID que vienen por defecto son el 0x10 para solicitar el cambio de color (que al hallar el PID en el maestro habr\u00e1 que enviar un mensaje con el valor 0x50) y para obtener una respuesta del estado del esclavo hay que mandarle el ID 0x11, cuyo PID casualmente coincide.<\/p>\n\n\n\n<div id=\"attachment_371\" style=\"width: 579px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/10.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-371\" class=\"aligncenter size-full wp-image-371\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/10.png\" alt=\"Configuraci\u00f3n de las IDs del LIN Slave.\" width=\"569\" height=\"234\" \/><\/a><p id=\"caption-attachment-371\" class=\"wp-caption-text\">Imagen 10. Configuraci\u00f3n de la API de LIN para que tenga dos IDs, una para leer lo que env\u00eda la ECU y realizar una acci\u00f3n y otra para publicar hacia la ECU cuando se lo soliciten.<\/p><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Hacia dise\u00f1os m\u00e1s complejos<\/h2>\n\n\n\n<p>Los pasos que se han dado posteriormente para comprender el protocolo han sido los siguientes:<\/p>\n\n\n\n<p>-Cambiar la velocidad de transmisi\u00f3n.<\/p>\n\n\n\n<p>-Crear nuevas tramas.<\/p>\n\n\n\n<p>-Introducir tramas de distintos tama\u00f1os.<\/p>\n\n\n\n<p>-Utilizar el <em>deep-sleep<\/em> para bajar el consumo del \u00b5C.<\/p>\n\n\n\n<p>-Controlar la se\u00f1al NSLP para evitar que est\u00e9 constantemente a 5VDC.<\/p>\n\n\n\n<p>-A\u00f1adir interrupciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo<\/h2>\n\n\n\n<p>Si quieres acceder a proyectos en los que uso el protocolo LIN, puedes echar un vistazo en el siguiente repositorio de GitHub:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/jagumiel\/LIN-Automotive\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"LIN Automotive - GitHub Repository\">LIN Automotive<\/a><\/li>\n<\/ul>\n\n\n\n<p>Proximamente, siguiendo con la tem\u00e1tica <em>Automotive<\/em>, dedicar\u00e9 una entrada dedicada al <a href=\"https:\/\/github.com\/jagumiel\/SENT-Automotive\" target=\"_blank\" rel=\"noreferrer noopener\">protocolo SENT<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Galer\u00eda<\/h2>\n\n\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 20%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-353 gallery-columns-5 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/1\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Dos esquemas que reflejan la arquitectura de red LIN.\" aria-describedby=\"gallery-1-356\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-356'>\n\t\t\t\tDos esquemas que reflejan la arquitectura de red LIN.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/2\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/2-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Estructura de una trama en el protocolo de comunicaci\u00f3n LIN.\" aria-describedby=\"gallery-1-358\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-358'>\n\t\t\t\tEstructura de una trama en el protocolo de comunicaci\u00f3n LIN.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/3\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/3-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Estructura del campo de identificaci\u00f3n de la trama.\" aria-describedby=\"gallery-1-359\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-359'>\n\t\t\t\tEstructura del campo de identificaci\u00f3n de la trama.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/4\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/4-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"C\u00e1lculo y verificaci\u00f3n del checksum de la trama LIN con la herramienta online de Mach Systems.\" aria-describedby=\"gallery-1-363\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-363'>\n\t\t\t\tC\u00e1lculo y verificaci\u00f3n del checksum de la trama LIN con la herramienta online de Mach Systems.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/5\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/5-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Esquem\u00e1tico. Indica que cambios se deben hacer en el circuito.\" aria-describedby=\"gallery-1-365\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-365'>\n\t\t\t\tEsquem\u00e1tico. Indica que cambios se deben hacer en el circuito.\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/6\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/6-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Interconexionado entre las tarjetas de evaluaci\u00f3n de Cypress para establecer una comunicaci\u00f3n Maestro-Esclavo.\" aria-describedby=\"gallery-1-366\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-366'>\n\t\t\t\tInterconexionado entre las tarjetas de evaluaci\u00f3n de Cypress para establecer una comunicaci\u00f3n Maestro-Esclavo.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/7\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/7-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"M\u00f3dulo UART. Sirva para emular la ECU, es posible enviar una trama de mensajes con esta API.\" aria-describedby=\"gallery-1-368\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-368'>\n\t\t\t\tM\u00f3dulo UART. Sirva para emular la ECU, es posible enviar una trama de mensajes con esta API.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/8\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/8-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Pin-out del microcontrolador que hace el papel de esclavo.\" aria-describedby=\"gallery-1-369\" srcset=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/8-150x150.png 150w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/8-300x300.png 300w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/8.png 605w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-369'>\n\t\t\t\tPin-out del microcontrolador que hace el papel de esclavo.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/9\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/9-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Configuraci\u00f3n de los m\u00f3dulos de LIN y las se\u00f1ales de salida que van hacia los LEDs.\" aria-describedby=\"gallery-1-370\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-370'>\n\t\t\t\tConfiguraci\u00f3n de los m\u00f3dulos de LIN y las se\u00f1ales de salida que van hacia los LEDs.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/attachment\/10\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"148\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2022\/02\/10-150x148.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Configuraci\u00f3n de la API de LIN para que tenga dos IDs, una para leer lo que env\u00eda la ECU y realizar una acci\u00f3n y otra para publicar hacia la ECU cuando se lo soliciten.\" aria-describedby=\"gallery-1-371\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-371'>\n\t\t\t\tConfiguraci\u00f3n de la API de LIN para que tenga dos IDs, una para leer lo que env\u00eda la ECU y realizar una acci\u00f3n y otra para publicar hacia la ECU cuando se lo soliciten.\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Explicaci\u00f3n te\u00f3rica y puesta en marcha del protocolo para automoci\u00f3n LIN sobre la plataforma PSoC4 de Cypress, creando una comunicaci\u00f3n Maestro-Esclavo.<\/p>\n<p class=\"continue-reading-button\"> <a class=\"continue-reading-link\" href=\"https:\/\/jagumiel.xyz\/blog\/2022\/03\/20\/puesta-en-marcha-del-protocolo-para-automocion-lin\/\">Continue reading<i class=\"crycon-right-dir\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":393,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[73,11,5],"tags":[75,74,81,64,14,77,78,79,76,80],"class_list":["post-353","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automotive","category-diy","category-hardware","tag-automocion","tag-automotive","tag-bus","tag-electronica","tag-hardware","tag-lin","tag-local-interconnect-network","tag-protocolos-de-comunicacion","tag-psoc-4","tag-uart"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts\/353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/comments?post=353"}],"version-history":[{"count":29,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts\/353\/revisions"}],"predecessor-version":[{"id":643,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts\/353\/revisions\/643"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/media\/393"}],"wp:attachment":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/media?parent=353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/categories?post=353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/tags?post=353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}