[AutoSar]BSW_Com021单帧 首帧 流控帧 连续帧 详解


  

关键词

嵌入式、C语言、autosar、OS、BSW、UDS、diagnostic

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1
参考文档《15765-2》 《AUTOSAR_SWS_CANTransportLayer.pdf》

在这里插入图片描述
  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

缩写描述
SF单帧 SingleFrame
FF首帧 First Flame
FC流控帧 Flow Control
CF连续帧 Consecutive Frame
N_PCInetwork protocol control information
N_PCItypenetwork protocol control information type
N_PDUnetwork protocol data unit
N_SAnetwork source address
N_AIaddress information
SF_DLsingle frame data length

一、N_PDU和N_PCI

  在网络层协议中,将N_PDU分为了N_AI N_PCI 和N_Data。
在这里插入图片描述

其中N_PCI (network protocol control information)用在网络层实体间识别PDU类型和传递控制参数,有如下几类:
在这里插入图片描述
在第一个byte中的高四位分别用0-3表示 SF FF CF FC。
举个栗子:
在这里插入图片描述

二、单帧

在这里插入图片描述
在这里插入图片描述

  长度小于6byte的数据,可以一次性发送完毕。
SF_DL表示如下:
在这里插入图片描述
注意: 忽略接收到的数据:SF_DL当等于0,大于7或扩展、混合寻址大于6

三、首帧

  
在这里插入图片描述
在这里插入图片描述

  表示后面还有很多帧需要接着收取。首帧是需要多帧才能传输完成数据的第一帧,接收方接收到首帧后,应返回流控帧告知接收能力,同时做好接收多帧的准备。

四、流控帧

  流控帧的作用是调节连续帧的发送速率,流控帧应包含帧的控制信息:FS,BS,STmin。在收到首帧后就
应返回流控帧,告知发送方当前接收状态以及接收能力。
在这里插入图片描述
BS(Block Size):发送的数据量。
STmin(Separation Time Min):多帧间的最小间隔时间。
FS(Flow Status)有三种状态:
FC.CTS:continue to send, the authorization to continue
FC.WAIT:the request to continue to wait
FC.OVFLW:buffer overflow

五、连续帧

  连续帧应在首帧之后发送,接收节点一旦收到连续帧,应将全部数据组装完成。最大支持数据长度4095byte。
在这里插入图片描述
在这里插入图片描述
  其中,SN 从0-F循环累加。
在这里插入图片描述

六、case

在这里插入图片描述

  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

### 连续帧的技术定义与实现方法 #### (Single Frame, SF) 是指在 ISO-TP(ISO 15765-2)协议中用于传输小于等于 8 字节的数据包的方式。在这种模式下,整个消息可以被封装到一个 CAN 中完成发送,而无需额外的确认机制或后续的支持。的第一个字节被称为制字节,其中包含了长度信息以及标识该的信息[^1]。 以下是的结构示例: ```python def create_single_frame(data_length, data_payload): if data_length > 8 or data_length < 0: raise ValueError("Data length must be between 0 and 8 bytes.") control_byte = 0x0 | (data_length & 0xF) # Single frame identifier with length info. can_message = bytearray([control_byte]) + bytearray(data_payload[:data_length]) return can_message ``` --- #### (First Frame, FF) 当需要传输超过 8 字节的数据时,则会使用来启动多传输过程。不仅携带部分实际数据还包含指示剩余数据量大小的信息。具体来说,在其第一个字节里编码了一个特殊的标志位加上所要传送整体数据块的总长度值。 下面是创建的一个简例子: ```python def create_first_frame(total_data_length, initial_payload_chunk): if total_data_length <= 8: raise ValueError("Total data length exceeds the limit of a single frame.") first_control_byte_high = ((total_data_length >> 8) & 0xFF) | 0x10 # First frame marker plus high byte of length. first_control_byte_low = total_data_length & 0xFF # Low byte of length. ff_can_message = bytearray([first_control_byte_high, first_control_byte_low]) \ + bytearray(initial_payload_chunk[:6]) return ff_can_message ``` --- #### 连续帧 (Consecutive Frames, CF) 一旦通过发起了大尺寸的消息传递之后,紧接着的就是一系列由接收方请求并按顺序编号好的连续帧继续补充余下的有效载荷直到全部交付完毕为止。每一个这样的连续帧都拥有自己独特的计数器用来保持同步状态以便于重组原始报文。 下面展示如何构建连续帧的方法: ```python def create_consecutive_frames(sequence_number, payload_chunk): cf_control_byte = 0x20 | (sequence_number % 0x10) # Consecutive frame marker combined with sequence number. cf_can_message = bytearray([cf_control_byte]) + bytearray(payload_chunk) return cf_can_message ``` --- #### 总结 以上分别介绍了三种不同类型的——适用于短小精悍的数据交换;负责开启较大规模的数据操作;最后则是依靠连续帧逐步填充完整的内容直至结束。这些概念共同构成了基于CAN网络上的高效可靠通讯解决方案之一即ISO-TP标准的核心组成部分。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值