一、流控制帧的功能
二、流控制帧组成说明
1、流控制帧组成
2、流控制帧字段说明
a、FlowControl
b、FlowState
c、BlockSize
d、STmin
e、Padding bytes
三、流控制帧使用举例
1、数据发送方发送所有连续帧数据
2、数据发送方每次发送至多2条连续帧
3、流控制帧等待
在CAN&CANFD总线协议的诊断层测试中,我们除了对于诊断功能(或叫UDS诊断功能)的测试、ID测试(DID、Routine ID、IO Control ID等测试)、DTC故障码的测试外,还有一块非常重要的功能,那就是对于CAN&CANFD协议的传输层CANTP的测试,CAN&CANFD传输层中我们都知道诊断数据存在单帧和多帧2种诊断数据类型;其中单帧比较好理解,就是一帧数据即可完成完整的数据交互信息;然而当数据在一帧数据中无法完成传输的时候,这时候我们的多帧数据出厂的时候,多帧数据中有一个非常重要的数据,那就是流控制帧,今天我们主要就是来看下流控制帧到底是什么?
指示发送网络实体是否可以继续进行消息传输。
FC N_PDU由FlowControl协议控制信息(FC N_PCI)来标识。 FC N_PDU指示发送网络实体开始、停止或恢复CF N_PDU的传输。 当准备好接收更多数据时,在正确接收
a、FF N_PDU
b、如果需要发送更多连续帧,则连续帧块的最后一个 CF N_PDU。
FC N_PDU 还可以通知发送网络实体在分段消息传输期间暂停 CF N_PDU 的传输,或者如果发送实体发送的 FF N_PDU 中的长度信息 (FF_DL) 超过缓冲区大小,则中止分段消息的传输 接收实体的。
组成:FlowControl + FlowState + BlockSize + STmin + Padding bytes
byte 0高四位(bit4-bit7),值为3,代表流控制帧
Value | 名称 | 说明 |
0 | ContinueToSend (CTS) | FlowControlContinueToSend参数应通过将N_PCI字节#1的低半字节设置为“0”来编码。 它应导致发送方恢复连续帧的发送。 该值的含义是接收器准备好接收最大BS数量的连续帧。 |
1 | Wait (WAIT) | FlowControl 等待参数应通过将 N_PCI 字节 #1 的低半字节设置为“1”来编码。 它将导致发送方继续等待新的 FlowControl N_PDU 并重新启动其 N_BS 计时器。 如果FlowStatus设置为Wait,则FlowControl消息中的BS(BlockSize)和STmin(SeparationTime最小值)的值不相关并且应被忽略。 |
2 | Overflow (OVFLW) | FlowControl Overflow 参数应通过将 N_PCI 字节 #1 的低半字节设置为“2”来编码。 它应导致发送方中止分段消息的传输,并使用参数 如果 FlowStatus 设置为 Overflow,则 FlowControl 消息中的 BS(BlockSize)和 STmin(SeparationTime 最小值)的值不相关,应被忽略 |
3-F | Other | 保留值 |
Value | 名称 | 说明 |
0 | BlockSize (BS) | BS参数值0应用于向发送方指示在分段消息的传输期间不再发送FC帧。 发送网络层实体应发送所有剩余的连续帧,并且对于来自接收网络层实体的进一步 FC 帧不进行任何停止。 |
01-FF | BlockSize (BS) | 该 BS 参数值范围应用于向发送方指示在没有来自接收网络实体的中间 FC 帧的情况下可以接收到的连续帧的最大数量 |
Value | 名称 | 说明 |
00-7F | SeparationTime:0 ms–127 ms | STmin在0x00–0x7F(0–127) 范围内的单位是绝对毫秒 (ms)。 |
80-F0 | Reserved | ISO 15765 的这一部分保留了该值范围。 |
F1-F9 | SeparationTime:100 us–900 us | 0xF1–0xF9范围内STmin 的单位是100 µs 的偶数倍,其中参数 值 0xF1 代表 100 µs,参数值0xF9 代表 900 µs。 |
FA-FF | Reserved | ISO 15765 的这一部分保留了该值范围。 |
填充字节这里根据不同的主机厂,有不同的定义的,不过常见的填充字节主要有0x00、0xAA、0xCC、0x55等字节对未使用字节进行填充,我们根据主机厂的规范定义进行填充即可。
Tester:03 22 F1 90 00 00 00 00
DUT:10 14 62 F1 90 30 30 30
Tester:30 00 14 00 00 00 00 //希望DUT返回所有的连续帧数据
DUT:21 30 30 30 30 30 30 30 T1
DUT:22 30 30 30 30 30 30 30 T2
帧间隔:20ms < T2 - T1 < 150ms
Tester:03 22 F1 F2 00 00 00 00
DUT:10 26 62 F1 F2 30 30 30
Tester:30 02 1E 00 00 00 00 //希望DUT返回2帧连续帧数据
DUT:21 30 30 30 30 30 30 30 T1
DUT:22 30 30 30 30 30 30 30 T2
帧间隔:30ms < T2 - T1 < 150ms
Tester:30 02 28 00 00 00 00 //希望DUT返回2帧连续帧数据
DUT:23 30 30 30 30 30 30 30 T3
DUT:24 30 30 30 30 30 30 30 T4
帧间隔:40ms < T2 - T1 < 150ms
Tester:30 02 14 00 00 00 00 //希望DUT返回2帧连续帧数据
DUT:25 30 30 30 30 00 00 00
Tester:03 22 F1 90 00 00 00 00
DUT:10 14 62 F1 90 30 30 30
Tester:31 00 14 00 00 00 00 //Tester繁忙,DUT等待
Tester:30 00 14 00 00 00 00 //希望DUT返回所有的连续帧数据
DUT:21 30 30 30 30 30 30 30 T1
DUT:22 30 30 30 30 30 30 30 T2
以上是今天对于流控制帧介绍的所有内容,以及我们经常会遇到的使用的方法。