6.5.1 N_PCI
每个N_PDU由N_PCI来标识
Hex value | Description |
---|---|
0 | 单帧 对于未分段的消息,网络层协议提供了网络协议的优化实现,其消息长度仅嵌入在PCI字节中。 SingleFrame(SF)用于支持单个CAN帧的消息传输。 |
1 | 首帧 第一帧(FF)只能用于支持无法在单个CAN帧中传输的消息,即分段消息。分段消息的第一帧被编码为FF。接收到FF后,接收网络层实体应开始组装分段消息。 |
2 | 连续帧 发送分段数据时,FF之后的所有连续帧都被编码为连续帧(CF)。接收到CF后,接收网络层实体应将接收到的数据字节集合起来,直到接收到整个消息。接收实体应在无误地接收到消息的最后一帧后,将组装好的消息传递到相邻的上层协议层。 |
3 | 流控帧 流量控制(FC)的目的是调节CF N_pdu发送到接收器的速率。指定了三种不同类型的FC协议控制信息来支持此功能。类型由协议控制信息的字段FlowStatus(FS)表示,如下所述。 |
4-F | 保留 ISO 15765的本部分保留了该值范围。 |
6.5.2 单帧N_PCI参数定义
6.5.2.1 SF N_PCI byte
例如Tester发送数据:
03 01 31 51 55 55 55 55
服务端回复:
06 41 31 1D E6 51 01 55
首字节06,高四位为0,即N_PCItype = 0表示是单帧,低四位表示SF_DL,即单帧数据长度为6,其后的41 31 1D E6 51 01为此帧传输的数据,55为填充字节
6.5.2.2 SF_DL错误处理
- 如果网络层接收到SF_DL等于0(0)的SF,则网络层将忽略接收到的SF N_PDU。
- 如果网络层在正常寻址时收到SF_DL大于7的SF,或者在扩展寻址或混合寻址时收到SF_DL大于6的SF,则网络层应忽略收到的SF N_PDU。
6.5.3 首帧N_PCI参数定义
6.5.3.1 FF N_PCI bytes
例如Tester发送请求数据:
07 01 0B 0C 0D 0E 0F 10
服务端回复:
10 0F 41 0B 21 0C 0C 38
首字节为10,高四位为1,即N_PCItype = 1 ,表示首帧,首字节低四位和第二字节一起构成数据长度,Byte#1的低4位为FF_DL的最高位,所以此处为00F,即FF_DL = 00F,长度为15,后面的41 0B 21 0C 0C 38为前6个数据,后面还有9个数据在连续帧里面。
请求端在接收到首帧后应该立即发送流控帧,服务端接收到流控帧后才会继续发送剩下的数据。
注:FF_DL的值只有在扩展帧或者混合地址时才能为7,否则有效值只能为8-0xFFF.
6.5.3.3 FF_DL错误处理
- 如果网络层接收到的FF的FF_DL大于可用的接收器缓冲区大小,那么这将被认为是一个错误条件。网络层应中止消息接收,并发送一个参数为FlowStatus = Overflow的FC N_PDU。
- 如果网络层在使用正常寻址时收到一个FF_DL小于(8)8的FF,或者在使用扩展或混合寻址时收到一个FF_DL小于7的FF,则网络层应忽略收到的FF N_PDU,不发送FC N_PDU。
6.5.4 连续帧N_PCI参数定义
6.5.4.1 CF N_PCI byte
连续帧只在流控帧后面出现,不会单独出现。例如Tester和服务端有如下交互:
请求端发送1:
07 01 0B 0C 0D 0E 0F 10
服务端回复1(首帧):
10 0F 41 0B 21 0C 0C 38
请求端发送2(流控帧):
30 00 01 55 55 55 55 55
服务端回复2(连续帧):
21 0D 00 0E 8C 0F 4D 10
22 01 4E 55 55 55 55 55
服务端回复2的内容即为连续帧,回复的第一帧首字节21,高四位为2,即N_PCItype = 2表示为,流控帧,首字节低四位为1,即SN = 1,表示连续帧的第二帧,回复的第二帧首字节低四位为2,即SN=2,表示连续帧的第二帧
首帧10 0F 41 0B 21 0C 0C 38中00F表示此次传输数据总长度为15,41 0B 21 0C 0C 38为前6字节数据
回复的连续帧第一帧21 0D 00 0E 8C 0F 4D 10加粗字节为7-13字节数据,连续帧第二帧22 01 4E 55 55 55 55 55加粗字节为14-15字节数据,最终拼接起来,接收到的数据为**41 0B 21 0C 0C 38 0D 00 0E 8C 0F 4D 10 01 4E **
6.5.4.2 SN参数定义
参数SN在CF N_PDU中用来指定连续帧的顺序
- 对于所有分段消息,SN应以零(0)开始。FF应该被赋值为0(0),它在N_PCI字段中不包含显式的SequenceNumber,但是应该被视为段号0(0)。
- 紧跟着FF的第一个CF的SN应设置为1(1)。
- 在分段消息传输过程中,每传输一个新的CF, SN应增加1(1)。
- SN值不受FC帧的影响。
- 当SN达到十五(15)的值时,它将回绕并为下一个CF设置为零(0)。
6.5.4.3 SN错误处理
如果接收到带有错误序列号的CF N_PDU消息,则应在网络层中进行适当的错误处理。 消息接收将被中止,并且网络层将向相邻的上层发起一个N_USData.indication服务调用,其参数为<N_Result> = N_WRONG_SN。
6.5.5 流控帧参数定义
6.5.5.1 FlowControl N_PCI bytes
流控帧数据交互见6.5.4.1中的流控帧,其数据为:30 00 01 55 55 55 55 55
Byte#1高4位为3,即N_PCItype= 3 ,表示流控帧,低四位为0,即FS = 0,表示发送方可继续发送连续帧
Byte#2为00,即BS = 00,表示发送方可直接连续发送剩余所有连续帧,且中间接收方不再发送流控帧
Byte#3为01,即STmin = 01,表示发送方后续连续帧的时间间隔为1ms
剩余的55都为填充字节。
FS: 流状态
发送方接收到流控帧 FC 的流状态 FS 来判断是否继续发送信息。流状态 FS 参数范围如下图所示:
16进制值 | 说明 |
---|---|
0 | 继续发送(CTS) 流控帧继续发送参数,通过编码N_PCI第一字节为“0”,表示继续发送,它会促使发送方重新发送连续帧,该值意味着接受者准备好接收最大BS个连续帧 |
1 | 等待(WT) 流控帧等待参数,通过编码N_PCI第1字节为“1“。它会促使发送方继续等待新的流控帧(N_PDU)的到来,并重新设置N_BS定时器 |
2 | 溢出(OVFLW) 流控帧溢出参数,通过编码N_PCI第1字节为”2“。它会促使发送方终止拆分信息的发送,并且做传递参数<N_Result>=N_BUFFER_OVFLW的N_USData.confirm指示服务。该N_PCI流控参数值仅能跟在首帧N_PDU的流控帧中使用,并且仅能在首帧中FF_DL信息的长度超过了接收实体缓冲区大小时使用 |
3-F | 保留 该范围的值为该协议保留 |
FS 出错处理:如果接收到的 FC N_PDU 信息参数出错,网络层进行出错处理。信息的发送被中止,并且网络层传递一个参数 <N_Rwsult> = <N_INVALID_FS > 的结果通知上传至上层应用。
BS:块大小
允许发送方一次最大可发送连续帧 CF 次数,即一次发送连续帧帧数要小于等于块大小 BS。当块大小为 0 时,发送方可无限发送连续帧直至信息发送完毕,再无流控帧 FC。
STmin:流控帧间隔时间
STmin 是发送方发送连续帧 CF 与连续帧 CF 间的最小间隔时间,即 STmin 的度量是在一个连续帧发送完开始到请求下一个连续帧时的间隔时间。控制信息参数定义如下:
- 00 - 7F:间隔时间范围为:0ms~127ms。该STmin单元的范围00-7F为绝对单位毫秒ms
- 80 - F0:保留。该范围为协议保留
- F1 - F9:间隔时间范围为:100us ~ 900us.该STmin单元的范围F1-F9最小分编为100微秒us,参数值F1代表100us,F9代表900us。
- FA - FF:保留,该范围为该协议保留
注意:如果接收到的 STmin 参数值为保留值,则按照最长的 ST 值,即 7F->127ms,而不是使用接收到的 ST 值。