LIN diagnostic frames: Request continuation-frames
Does the master task request the additional frame?

To answer this question, you need to remember how the LIN bus itself works: 


  The master task decides when and which frame shall be transferred on the bus. The slave tasks provide the data transported by each frame.


Lin 2.1 Spec, 1.1.5.1

The slave tasks cannot send any data without the master task explicitly requesting it.



How does the master task request normal frames?


  A frame consists of a header (provided by the master task) and a response (provided by a slave task). The header consists of a break field and sync field followed by a frame identifier. The frame identifier uniquely defines the purpose of the frame. The slave task appointed for providing the response associated with the frame identifier transmits [the response]


Ibid, 1.1.5.2

The master task requests data and controls the flow of data on the bus by sending header fields. The header field consists of a break (to unambiguously indicate the start of a frame); a sync field (to tune the transceivers to the master's clock speed); and a frame identifier (to indicate what data is being transmitted).

As soon as the frame header has been transmitted, the appropriate slave node can transmit the frame body. A normal LIN frame might look like this:

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




How are diagnostic messages different?

The diagnostic messages are specified with the LIN transport layer in Section 3 of the Lin 2.1 spec. Diagnostic messages form a higher-level protocol that is packetized into regular LIN frames. That is, it still relies on the master transmitting headers in the normal way; but additional information is encoded into the frame body, and a single message will span multiple frames.

The most significant difference in the frames used by diagnostic messages is the role of the frame Id.


  The first byte in the pay-load is used as an node address (NAD). The transport layer frames have fixed frame IDs, since the diagnostic frames are used. This means that
  the addressing of a node (or function) is made using the NAD.


Ibid, 3.2.1


  The Service Identifier (SID) specifies the request that shall be performed by the slave node addressed... The Response Service Identifier (RSID) specifies the contents of the response.


Ibid, 3.2.1.5

All frames that carry LIN diagnostic messages will have one of two ids:


0x3C - For master request frames
0x3D - For slave response frames


(See Lin 2.1 Spec, 2.3.3.4)

This means that the frame id alone does not tell you what the message is, or which slave node is expected to respond. Instead the D0 byte of the frame body indicates the Node ADdress (NAD), and the SID/RSID byte (exact location varies depending on frame, exact details not relevant) indicate the purpose of the message.

Because this information is in the body of the frame, not the header, a separate header field needs to be generated for the slave to respond. The slave can't take over control of transmission after 2-4 bytes of the frame because this would break the lower-level parts of the LIN spec.

When a slave receives a master request frame (0x3C) with its own NAD in D0, it enters a new state. The node perform any actions required by the SID according to the data included in the message. It then readies its transmit buffer to reply on the next slave response frame (0x3D). If the response is longer than six bytes, it will split it across multiple frames, and continue replying on subsequent slave response frames.

Going back to your example, it becomes a lot clearer when we add the LIN protocol fields back on to the transport layer data that you provided.

|       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  |----------|
| &lt;Break&gt; | 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  |----------|
| &lt;Break&gt; | 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  |------|------|------|----------|
| &lt;Break&gt; | 0x55 | 0x3D | 0x64 | 0x21 | 0x01 | 0x23 | 0x45 | 0xFF | 0xFF | 0xFF |   0x11   |
| Transmitted by master |                       Transmitted by slave                       |




How does the master request the next frame?

In short: by sending the next slave response frame header.