前言
本文主要介绍ISO-15765内容的四个CAN信号帧,单帧,首帧,连续帧,流控帧,对上述四种CAN信号帧,进行深度剖析解读。
ISO15765为实现基于CAN通信的拆包(SDU)与组包(PDU),定义了四种CAN信号帧。如下:
N_PDU name | N_PCI bytes | ||||||||||||||||||||
Byte #0 | Byte #1 | Byte #2 | |||||||||||||||||||
Bits 7 - 4 | Bits 3 - 0 | ||||||||||||||||||||
Single Frame(SF) | N_PCItype = 0 | SF_DL | N/A | N/A | |||||||||||||||||
First Frame(FF) | N_PCItype = 1 | FF_DL | N/A | ||||||||||||||||||
Consecutive Frame(CF) | N_PCItype = 2 | SN | N/A | N/A | |||||||||||||||||
Flow Control(FC) | N_PCItype = 3 | FS | BS | STmin |
单帧
单帧(Single Frame):一条消息仅用一帧即可完成传输,即为单帧
N_PDU name | N_PCI bytes | ||||||||||||||||||||
Byte #0 | Byte #1 | Byte #2 | |||||||||||||||||||
Bits 7 - 4 | Bits 3 - 0 | ||||||||||||||||||||
Single Frame(SF) | N_PCItype = 0 | SF_DL | N/A | N/A |
SF_DL :接下来准备传输的数据长度,定义如下:
HEX | 描述 | |||||||||||
0 | 保留 | |||||||||||
1 ~ 6 | 单帧数据长度值(SF_DL) | |||||||||||
7 | SF_DL = 7时,只允许标准地址 | |||||||||||
8 ~ F | 无效 |
真实帧数据:
BYTE | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BITS | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
定义 | N_PCItype=0 | SF_DL | 数据段 空白数据补齐AA或FF或CC | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BIN | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
HEX | 0 | 4 | 7 | 4 | 2 | 0 | 0 | 4 | 0 | 2 | C | C | C | C | C | C | |||||||||||||||||||||||||||||||||||||||||||||||||
FRAME | 04 | 74 | 20 | 04 | 02 | CC | CC | CC |
FRAME示例: | 04 | 74 | 20 | 04 | 02 | CC | CC | CC |
首帧
首帧(First Frame):当一条消息需要多帧才能完成传输,那么第一帧即被称为首帧
N_PDU name | N_PCI bytes | ||||||||||||||||||||
Byte #0 | Byte #1 | Byte #2 | |||||||||||||||||||
Bits 7 - 4 | Bits 3 - 0 | ||||||||||||||||||||
First Frame(FF) | N_PCItype = 1 | FF_DL | N/A |
FF_DL:接下来准备传输的数据长度,定义如下:
HEX | 描述 | |||||||||||||||
0 ~ 6 | 保留 | |||||||||||||||
7 | FF_DL = 7 只允许扩展地址及混合地址 | |||||||||||||||
8 ~ FFF | 数据总字节数,拆分信息最大数据长度支持 4095 个用户数据 |
真实帧数据:
BYTE | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BITS | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
定义 | N_PCItype=1 | FF_DL | 数据段 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BIN | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
HEX | 1 | 4 | 0 | 2 | 3 | 6 | 0 | 1 | F | F | F | F | F | F | F | F | |||||||||||||||||||||||||||||||||||||||||||||||||
FRAME | 1 | 402 | 36 | 01 | FF | FF | FF | FF |
FRAME示例: | 14 | 02 | 36 | 01 | FF | FF | FF | FF |
连续帧
连续帧(Consecutive Frame):当一条消息需要多帧才能完成传输时,除了首帧外,其他帧被称为连续帧
N_PDU name | N_PCI bytes | ||||||||||||||||||||
Byte #0 | Byte #1 | Byte #2 | |||||||||||||||||||
Bits 7 - 4 | Bits 3 - 0 | ||||||||||||||||||||
Consecutive Frame(CF) | N_PCItype = 2 | SN | N/A | N/A |
SN:表示当前连续帧的顺序,第一条连续帧的 SN = 1,后面每发出一帧连续帧SN加1,范围0 ~ 15,当SN = 15时,下一条连续帧重新变成0
真实帧数据:
BYTE | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BITS | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
定义 | N_PCItype=2 | SN | 数据段 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BIN | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
HEX | 2 | 1 | F | F | F | F | F | F | F | F | F | F | F | F | F | F | |||||||||||||||||||||||||||||||||||||||||||||||||
FRAME | 21 | FF | FF | FF | FF | FF | FF | FF |
FRAME示例: | 21 | FF | FF | FF | FF | FF | FF | FF |
流控帧
流控帧(Flow Control):流控帧的作用在于接收端告知发送端接受能力,控制消息传输速度的作用。
发送端收到接收端反馈的流控帧后,发送端会按照流控帧给出的接收能力进行发送连续帧。
连续传输的连续帧不超过 BS ,连续帧的发送间隔时间大于等于STmin。
若接收端已经收到 BS 数量的数据,且与首帧中包含的数据长度对比,发现数据还没接收满,则会发送流控帧,发送端会接着发送连续帧。
以此类推,直至所有的数据发送完成。
N_PDU name | N_PCI bytes | ||||||||||||||||||||
Byte #0 | Byte #1 | Byte #2 | |||||||||||||||||||
Bits 7 - 4 | Bits 3 - 0 | ||||||||||||||||||||
Flow Control(FC) | N_PCItype = 3 | FS | BS | STmin |
FS (Flow Status):用来通知发送端当前流状态,定义如下:
HEX | 描述 |
0 | 继续发送(CTS),通知发送方重新发送连续帧,该值意味着接收者准备好接收最大 BS 个连续帧 |
1 | 等待(WT),通知发送方继续等待新的流控帧(N_PDU)的到来,并重新设置 N_BS 定时器 |
2 | 溢出(0verFlow),通知发送方无法接收该多帧,该流控参数值仅能在跟在回应首帧的流控帧中使用,并且仅能在首帧中 FF_DL 信息的长度超过了接收实体缓冲区大小时使用 |
3 ~ F | 保留 |
BS(Block size):表示接收端在发送下一帧流控帧之前允许发送端连续发送的最大连续帧个数,定义如下:
HEX | 描述 |
0 | 用于指示发送端在拆分数据的发送期间接收端不在发送流控制帧了,发送端应当不停的发送剩下的连续帧,以便接收接收端另外的流控帧。 |
01 ~ FF | 该范围的 BS 参数值用于指示发送方在没有接收到下一帧流控帧期间能发送的最大数目的连续帧。 |
STmin(Separation Time min):表示发送端发送连续帧的最小间隔时间,定义如下:
HEX | 描述 |
00 ~ 7F | 间隔时间(STmin)范围:0ms - 127ms 该 STmin 单元的范围 00 - 7F 时,单位为毫秒(ms) |
80 - F0 | 保留 |
F1 - F9 | 间隔时间(STmin)范围:100us - 900us 该 STmin 单元的范围 F1 - F9 时,最小分辨为 100 微秒(us),参数值 F1 = 100us,F9 = 900us |
FA - FF | 保留 |
真实帧数据:
BYTE | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BITS | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
定义 | N_PCItype=3 | FS | BS | STmin | N/A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BIN | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | ||
HEX | 3 | 0 | 0 | 8 | 0 | 0 | C | C | C | C | C | C | C | C | C | C | ||||||||||||||||||||||||||||||||||||||||||||||||||
FRAME | 30 | 08 | 00 | CC | CC | CC | CC | CC |
FRAME示例: | 30 | 08 | 00 | CC | CC | CC | CC | CC |