cuadros de diagnóstico LIN: solicitar cuadros de continuación

0

Tengo una pregunta sobre la comunicación LIN. Para asegurarme de que mi conocimiento actual es correcto, comenzaré aquí:

Conceptos básicos de diagnóstico de LIN 2.1:

La comunicación en una sesión de diagnóstico LIN usa marcos con una carga útil de 8 bytes, y en general se ve así:

TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
RX:  <NAD> 10  08  <D1> <D2> <D3> <D4> <D5>
RX:  <NAD> 21 <D6> <D7> <D8>  FF   FF  FF
  • El maestro envía al dispositivo <NAD> a trama única ( 0 ) que contiene 3 data bytes <D1>...<D3>
  • El esclavo <NAD> responde con un primer cuadro ( 1 ) y enviará un total de 0 08 bytes de datos. Este mensaje contiene los primeros bytes de datos <D1>...<D5> .
  • El esclavo <NAD> envía un fotograma de continuación ( 2 ) numerado 1 y los últimos 3 bytes de datos <D6>...<D8> .

Ahora, simplemente hablando, ambos dispositivos tienen dos buffers de 8 bytes, uno para TX y otro para RX, y los datos se transfieren a intervalos predefinidos.
Como el intervalo puede ser muy rápido, el mismo mensaje se puede transmitir varias veces, antes de que el búfer de TX se llene con nuevo contenido. Viceversa, el mismo mensaje se puede recibir varias veces. Así que una comunicación real podría tener este aspecto:

TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
RX:  <NAD> 10  08  <D1> <D2> <D3> <D4> <D5> <- slave starts response
TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF <- Master still sending
RX:  <NAD> 10  08  <D1> <D2> <D3> <D4> <D5> <- slave still sending
TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
RX:  <NAD> 10  08  <D1> <D2> <D3> <D4> <D5>
TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF
RX:  <NAD> 10  08  <D1> <D2> <D3> <D4> <D5>

Pregunta:

El maestro sabe, debido a la respuesta 10 08 , que habrá un solo marco de continuación, pero ¿cómo lo solicita? De alguna manera, debe indicar al esclavo que la primera trama se procesó y ahora puede recibir la segunda.

    
pregunta sweber

2 respuestas

1

¿La tarea maestra solicita el marco adicional?

Para responder a esta pregunta, debe recordar cómo funciona el propio bus LIN:

  

La tarea maestra decide cuándo y qué trama se transferirá en el bus. Las tareas de esclavo proporcionan los datos transportados por cada fotograma.

Lin 2.1 Spec, 1.1.5.1

Las tareas esclavas no pueden enviar ningún dato sin que la tarea maestra lo solicite explícitamente.

¿Cómo solicita la tarea maestra los marcos normales?

  

Un marco consiste en un encabezado (proporcionado por la tarea maestra) y una respuesta (proporcionada por una tarea esclava). El encabezado consta de un campo de interrupción y un campo de sincronización seguido de un identificador de trama. El identificador de cuadro define de forma única el propósito del cuadro. La tarea esclava designada para proporcionar la respuesta asociada con el identificador de trama transmite [la respuesta]

Ibid, 1.1.5.2

La tarea maestra solicita datos y controla el flujo de datos en el bus mediante el envío de campos de encabezado. El campo de encabezado consiste en una ruptura (para indicar inequívocamente el inicio de un marco); un campo de sincronización (para sintonizar los transceptores a la velocidad de reloj del maestro); y un identificador de cuadro (para indicar qué datos se están transmitiendo).

Tan pronto como se haya transmitido el encabezado del cuadro, el nodo esclavo apropiado puede transmitir el cuerpo del cuadro. Un marco LIN normal podría tener este aspecto:

|         Header        |                              Body                                |
|  Break  | Sync |  Id  |  D0  |  D1  |  D2  |  D3  |  D4  |  D5  |  D6  |  D7  | Checksum |
============================================================================================
| <Break> | 0x55 | 0x21 | 0x01 | 0x23 | 0x45 | 0x67 | 0x89 | 0xAB | 0xCD | 0xEF |   0x1E   |
| Transmitted by master |                       Transmitted by slave                       |

¿En qué se diferencian los mensajes de diagnóstico?

Los mensajes de diagnóstico se especifican con la capa de transporte LIN en la Sección 3 de la especificación Lin 2.1. Los mensajes de diagnóstico forman un protocolo de nivel superior que se empaqueta en tramas LIN regulares. Es decir, todavía se basa en los encabezados maestros que transmiten de la forma habitual ; pero la información adicional se codifica en el cuerpo del marco, y un solo mensaje abarcará múltiples marcos.

La diferencia más significativa en los marcos utilizados por los mensajes de diagnóstico es el rol de la identificación del marco.

  

El primer byte en la carga útil se utiliza como una dirección de nodo (NAD). Los marcos de la capa de transporte tienen ID de fotogramas fijos, ya que se utilizan los marcos de diagnóstico. Esto significa que   el direccionamiento de un nodo (o función) se realiza utilizando el NAD.

Ibid, 3.2.1

  

El Identificador de servicio (SID) especifica la solicitud que debe realizar el nodo esclavo direccionado ... El Identificador de servicio de respuesta (RSID) especifica el contenido de la respuesta.

Ibid, 3.2.1.5

Todos los marcos que llevan mensajes de diagnóstico LIN tendrán uno de los dos identificadores:

  • 0x3C - Para marcos de solicitud maestra
  • 0x3D - Para marcos de respuesta esclavos

(Ver Lin 2.1 Spec, 2.3.3.4)

Esto significa que la identificación del marco por sí sola no le dice qué mensaje es, o qué nodo esclavo se espera que responda. En su lugar, el byte D0 del cuerpo del cuadro indica la Dirección del Nodo (NAD), y el byte SID / RSID (la ubicación exacta varía según el cuadro, los detalles exactos no son relevantes) indica el propósito del mensaje.

Debido a que esta información se encuentra en el cuerpo de la trama, no en el encabezado, se debe generar un campo de encabezado separado para que el esclavo responda. el esclavo no puede tomar el control de la transmisión después de 2-4 bytes de la trama porque esto rompería las partes de nivel inferior de la especificación LIN.

Cuando un esclavo recibe una trama de solicitud maestra (0x3C) con su propio NAD en D0, entra en un nuevo estado. El nodo realiza las acciones requeridas por el SID de acuerdo con los datos incluidos en el mensaje. A continuación, prepara su búfer de transmisión para responder en el siguiente marco de respuesta esclavo (0x3D). Si la respuesta tiene más de seis bytes, se dividirá en varios marcos y continuará respondiendo en los marcos de respuesta esclavos posteriores.

Volviendo a su ejemplo, se vuelve mucho más claro cuando agregamos los campos del protocolo LIN nuevamente a los datos de la capa de transporte que proporcionó.

|       LIN Header      |                            LIN Body                              |
|  Break  | Sync |  Id  |  D0  |  D1  |  D2  |  D3  |  D4  |  D5  |  D6  |  D7  | Checksum |
============================================================================================
| Master Request Frame  | NAD  | PCI  | SID  |  D1  |  D2  |  D3  |  D4  |  D5  |----------|
| <Break> | 0x55 | 0x3C | 0x64 | 0x06 | 0xB4 | 0x67 | 0x89 | 0xAB | 0xCD | 0xEF |   0x86   |
|                                  Transmitted by master                                   |
--------------------------------------------------------------------------------------------
| Slave Response Frame  | NAD  | PCI  | LEN  | RSID |  D1  |  D2  |  D3  |  D4  |----------|
| <Break> | 0x55 | 0x3D | 0x64 | 0x10 | 0x08 | 0xF4 | 0x89 | 0xAB | 0xCD | 0xEF |   0x9B   |
| Transmitted by master |                       Transmitted by slave                       |
--------------------------------------------------------------------------------------------
| Slave Response Frame  | NAD  | PCI  |  D5  |  D6  |  D7  |------|------|------|----------|
| <Break> | 0x55 | 0x3D | 0x64 | 0x21 | 0x01 | 0x23 | 0x45 | 0xFF | 0xFF | 0xFF |   0x11   |
| Transmitted by master |                       Transmitted by slave                       |

¿Cómo solicita el maestro el siguiente fotograma?

En resumen: enviando el siguiente encabezado del marco de respuesta del esclavo.

    
respondido por el Malacandrian
0

Por lo tanto, lo encontré yo mismo.

Esta comunicación sigue la norma ISO 15765-2 o, en resumen, ISO-TP.

Después de recibir el primer marco, uno tiene que enviar un marco de control de flujo:

TX:  <NAD> 03 <D1> <D2> <D3>  FF   FF  FF 
RX:  <NAD> 10  08  <D1> <D2> <D3> <D4> <D5>
TX:  <NAD> 30  00   00   FF   FF   FF   FF   <== Flowcontrol
RX:  <NAD> 21 <D6> <D7> <D8>  FF   FF  FF

Este marco consiste en

  • El <NAD>
  • 3 : este es un FlowControlFrame
  • 0 : Borrar para enviar ( 1 : Detener, 2 : ¡Oops, se ha excedido la detección, detener!)
  • 00 : Número de cuadros para enviar de una vez (0: Enviar todos)
  • 00 : tiempo en ms entre fotogramas (0: lo más rápido posible)

No hay más apretón de manos entre las tramas enviadas de una sola vez. Actualmente, no sé qué hacer cuando uno ha solicitado / recibido un número limitado de marcos y ahora está claro para recibir el siguiente, pero esto no es un problema para mí.

    
respondido por el sweber

Lea otras preguntas en las etiquetas