[AutoSar]BSW_Com012 CAN TP 模块介绍

news2024/10/7 11:24:01

目录

  • 关键词
  • 平台说明
  • 一、知识储备
  • 二、缩写对照表
  • 三、CAN TP 所在架构位置
  • 四、CAN TP 的主要作用
  • 五、CAN TP 在 autosar 架构中的基本概念
    • 5.1、CAN TP 的处理模式
    • 5.2 数据一致性
    • 5.3 静态配置
  • 六、功能规范
    • 6.1 Services provided to upper layer
      • 6.1.1 Initialization and shutdown
      • 6.1.2 Transmit request
      • 6.1.3 Transmit cancellation
    • 6.2 Services provided to the lower layer
      • 6.2.1 Transmit confirmation
      • 6.2.2 Reception indication
    • 6.3 Internal behavior
      • 6.3.1 N-SDU Reception
      • 6.3.2 N-SDU Transmission
      • 6.3.3 Buffer strategy
    • 6.4 Relationship between CAN NSduId and CAN LSduId
  • 七、帧类型定义
    • 7.1 单帧
    • 7.2 首帧
    • 7.3 连续帧
    • 7.4 流控帧

  

关键词

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

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

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

一、知识储备

1.ISO 14229
2.ISO15765
3.CAN 协议

二、缩写对照表

PDU SDU PCI 见 [AutoSar]BSW_Com02 PDU详解

项目描述
CAN N-SDU Info Structure这是一个CAN传输层内部常量结构,包含特定的CAN传输层信息,用于处理相关CAN N-SDU的传输、接收、分段和重组
CAN NSduId在CAN传输层中唯一的SDU标识符。用来引用N-SDU的路由属性。因此,为了通过其API与CAN传输层交互,上层使用CAN NSduId来引用CAN N-SDU信息结构。
BSBlock Size
CanCAN Driver module
CAN CFCAN Consecutive Frame N-PDU
CAN FCCAN Flow Control N-PDU
CAN FFCAN First Frame N-PDU
CAN SFCAN Single Frame N-PDU
DLCData Length Code (part of CAN PDU that describes the SDU length)
FIMFunction Inhibition Manager
MtypeMessage Type (possible value: diagnostics, remote diagnostics)
N_AINetwork Address Information (see ISO 15765-2).
N_ArTime for transmission of the CAN frame (any N-PDU) on the receiver side (see ISO 15765-2).
N_AsTime for transmission of the CAN frame (any N-PDU) on the sender side (see ISO 15765-2).
N_BrTime until transmission of the next flow control N-PDU (see ISO 15765-2).
N_BsTime until reception of the next flow control N-PDU (see ISO 15765-2).
N_CrTime until reception of the next consecutive frame N-PDU (see ISO 15765-2).
N_CsTime until transmission of the next consecutive frame N-PDU (see ISO 15765-2).
N_DataData information of the transport layer
N_PCIProtocol Control Information of the transport layer
N_SANetwork Source Address (see ISO 15765-2).
N_TANetwork Target Address (see ISO 15765-2). It might already contain the N_TAtype(physical/function) in case of ExtendedAddressing.
N_AENetwork address extend
N_TAtypeNetwork Target Address type (see ISO 15765-2).
FSFlow Status
CAN FDCAN flexible data rate
CAN_DLCAN frame data length
TX_DLTransmit data link layer data length
RX_DLReceived data link layer data length
SF_DLSingleFrame data length in bytes
CTSClearToSend status (FC(CTS))

三、CAN TP 所在架构位置

服务层

在这里插入图片描述

在这里插入图片描述

四、CAN TP 的主要作用

  CANTp模块的主要作用是对CAN I-PDU进行分段和重新组装,使得I-PDU的长度不大于8个字节,对CAN FD而言,CAN I-PDU不大于64个字节。
  CanTp只处理传输协议帧(即SF, FF, CF和FC pdu),根据N-PDU ID, CAN接口必须将I-PDU转发给CanTp或PduR。

根据AUTOSAR BSW架构,CanTp提供以下服务:
1.发送数据的时候把长帧拆分。
2.接收数据的时候组帧。
3.控制数据流;
4.检查组帧拆帧错误。
5.取消发送。
6.取消接收。

五、CAN TP 在 autosar 架构中的基本概念

  在AUTOSAR架构的最终版本中,传输协议设施将用于传输诊断(例如OBD和UDS协议)和AUTOSAR COM i - pdu。因此,CanTp模块能够同时处理多个连接(即并行处理多个分段会话)。
  最大同时连接数是根据静态配置实现。这种配置对生成的代码的复杂性和资源消耗(CPU、ROM和RAM)有较大的影响,因为必须为每次同时访问(例如Rx和Tx状态机、用于处理N-PCI数据的变量等)需要保留相应资源。
  为了可以同时接收或发送I-PDU,每个N-SDU标识符将通过配置好的CanTp”连接通道“进行内部路由。由于“连接通道”不能从外部访问,所有传输N-SDU所需的信息都将链接到的N-SDU标识符,比如“连接通道”号、超时、寻址格式等。
  根据元数据配置,N-SDU可以作为具有定义的N_AI的特定连接,也可以作为通用连接,其中N_TA, N_SA和N_AE在运行时变化,而N_TAtype, MType和寻址格式是静态定义的。

5.1、CAN TP 的处理模式

  AUTOSAR通信栈支持轮询和事件触发模式。因此,每个通信层都可以从其下层接收信息,并通过不同的机制向其上层传播信息。
但是:对于CAN传输层(CAN TP),只支持事件触发模式。

5.2 数据一致性

  为了优化通信栈,AUTOSAR限制了CAN传输层缓冲容量。因此,CanTp将N-SDU负载直接从上层(DCM、COM或PDU路由器——在1:1 TP路由的情况下)复制到CAN驱动程序,反之亦然。因此,为了保证数据的一致性,上层将遵循以下规则:

在传输的时候,N-SDU数据payload将保持不变,直到发送请求到收到发送确认。
在接收的时候,N-SDU将被锁定无法访问,直到 RX indication 被收到

5.3 静态配置

  在运行时,CAN传输模块必须具有管理传输连接所需的所有信息。因此,应该静态配置以下属性:
  1.CAN N-SDU个数。
  2.每个CAN N-SDU的唯一标识符。
  3.每个CAN N-SDU的通信方向(Tx或Rx)。
  4.每个通道的通信类型:半双工或全双工。
  5.每个连接的寻址格式(普通、扩展、混合11位、普通固定或混合29位),根据寻址格式的不同,对于使用n - sdu和元数据的通用连接,可以省略静态寻址信息:
  Normal: none
  Extended: N_TA
  Mixed 11 bit: N_AE
   Normal fixed: N_TA, N_SA
  Mixed 29 bit: N_TA, N_SA, N_AE
  6.每个连接的寻址格式(普通、扩展或混合),如果是扩展寻址格式,则为N_TA值,如果是混合寻址格式,则为N_AE值。
  7.每个CAN N-SDU标识符的关联CAN L-SDU标识符,必要时(多帧分段会话)用于传输CAN FC N-PDU的CAN L-SDU标识符.
  8.Classic CAN frames and CAN FD frames

六、功能规范

  CanTp模块提供了分段、流控制传输和消息重组的服务。它的主要目的是发送和接收可能适合或不适合单个CAN帧的消息。不能装入单个CAN帧的消息被分割成多个部分,这样每个部分都可以在单个CAN帧中传输。

6.1 Services provided to upper layer

主要提供两类服务:
1.Initialization and shutdown
2.Communication services

6.1.1 Initialization and shutdown

在这里插入图片描述

  
1.CAN TP 状态机有两种状态 – CANTP_OFF和CANTP_ON。
2.在CANTP_ON 中包含 RX(TX)_WAIT 和 RX(TX)_PROCESSING两种子状态。
3.在上电后,CAN TP 会默认在CANTP_OFF状态,当通过调用CanTp_Init() 初始化成功后会进入CANTP_ON状态。
4.只有当CAN TP 在CANTP_ON的时候CAN TP才会执行它自身的功能。
5.当其中既不进行分段发送也不进行分段接收的时候,处于RX(TX)_WAIT子状态。
6.当CAN TP 未初始化的时候,上层调用TP服务会产生CANTP_E_UNINIT 错误。
7.当CanTp模块处于全局状态CANTP_ON时,如果调用CanTp_Init, CanTp模块将丢失所有当前连接。

6.1.2 Transmit request

  传输操作异步调用CanTp_Transmit(),允许上层请求使用CAN传输协议设施(分段、扩展寻址格式等)进行数据传输。在传输请求被接受,N-PDU被处理完成后canTP会通知上层。

6.1.3 Transmit cancellation

  通过静态配置CanTpTc可以实现取消传输,调用CanTp_CancelTransmit()。例如当由于接收到另一个具有更高优先级的诊断协议的时候,当前正在进行的诊断传输会被取消。

6.2 Services provided to the lower layer

  根据AUTOSAR通信栈规范,CAN传输层为CAN接口提供以下两个回调函数:CanTp_TxConfirmation()和CanTp_RxIndication()。

6.2.1 Transmit confirmation

  CanIf模块应调用发送确认函数,通知CAN传输层CanTp请求的CAN帧传输是否成功。L-PDU标识符与呼叫相关联,以便识别相应的传输。
  当超过最大时间(等于n_a)仍未收到发送确认时,CanTp模块将终止相应的会话。N-PDU对其他并发会话保持不可用状态,直到收到TxConfirmation,不管是否成功。
  当CanTp_TxConfirmation()返回否定相应的时候,CANTP放弃相应的会话。

6.2.2 Reception indication

  CanIf模块调用接收指示函数CanTp_RxIndication()通知CanTp模块一个新的CAN N-PDU帧(即传输协议帧)已经收到。接收指示可以根据CanIf配置在ISR上下文中执行。

6.3 Internal behavior

  CAN TP 提供传输单帧和多帧的内部机制,由于CAN TP 为事件触发,所以它可以处理来自 can if 的L-PDU 和来自PDUR 的 N-PDU。

6.3.1 N-SDU Reception

  当CAN TP 收到单帧或者首帧的时候应该调用PduR_CanTpStartOfReception()通知并将帧内容传递到上层的PDUR。
  接收到的数据链路层数据长度(RX_DL)由CAN帧/PDU的第一个接收到的有效载荷长度(CAN_DL)导出,如下所示:
    对于小于等于8字节的CAN_DL值,RX_DL值为8。
    对于大于8字节的CAN_DL值,RX_DL值等于CAN_DL值。

在这里插入图片描述

6.3.2 N-SDU Transmission

  上层通过调用CanTp_Transmit()请求传输N-SDU。CanTp_Transmit()的参数描述了CAN NSduId和要发送的完整Tx N-SDU长度。

6.3.3 Buffer strategy

  因为CanTp没有缓冲能力,所以要发送的N-SDU负载不会在内部复制,收到的N-PDU也不会在内部重新组装。
  CAN传输层直接作用于上层(例如PduR、DCM或COM)的内存区域。为了访问这些内存区域,CAN传输层使用PduR_CanTpCopyTxData()或PduR_CanTpCopyRxData()函数。
因此,为了保证数据一致性,上层应该锁定该内存区域,直到出现指示.
  当发送缓冲区被锁定时,上层不能在缓冲区内写入数据。
  当接收缓冲区被锁定时,CAN传输层不能保证缓冲区的数据一致性。上层既不能读也不能写缓冲区中的数据。
在这里插入图片描述

  假定上层模块在向PduR_CanTpStartOfReception()调用返回状态BUFREQ_OK时锁定了缓冲区,CanTp_Transmit()返回E_OK,并保持缓冲区锁定,直到确认或指示(PduR_CanTpTxConfirmation()或PduR_CanTpRxIndication()调用)发生。

在这里插入图片描述

上图描述了用CAN 2.0 传输长度为50 byte 的数据流程:
1.PduR要求传输50个数据字节。
2.CanTp向PduR请求有效负载数据;可以发送第一帧。
3.CanTp将剩余的有效载荷数据作为连续帧的序列发送;上层在每个CF上复制6或7个有效载荷数据字节;
4.CanTp确认有效载荷数据的传输。
在这里插入图片描述

上图描述了以25个字节作为可用的Rx缓冲区,接受49 byte 数据的流程:
1.CanIf用CanTp_RxIndication()通知新的接收。CanTp将此通知转发给PduR;
2: PduR返回可用缓冲区大小为25字节,CanTp向发起者发送FlowControl CTS;
3: CanTp向PduR提供接收到的每一帧的数据,并监控剩余的缓冲区大小。在连续第二帧之后,剩余的缓冲区大小不够下一个块(两个连续帧);
4.CanTp通过调用PduR_CanTpCopyRxData()以0作为数据长度和NULL_PTR作为数据,向PduR请求剩余的缓冲区大小,并向发起者发送FlowControl Wait。直到下一个块有足够的缓冲区可用为止;
5.当缓冲区大小最终足够下一个块时,CanTp将发送一个FlowControl CTS给发起者,并继续接收下一个连续帧块;
6.在复制完块的最后一个连续帧后,剩余的缓冲区对于下一个块来说太低了,因此CanTp再次发送等待帧并监视剩余的缓冲区大小。
7.当最后一个区块的缓冲区可用时,CanTp将继续接收;
8. CanTp通过调用PduR_CanTpRxIndication()通知PduR接收结束。

6.4 Relationship between CAN NSduId and CAN LSduId

  如下图所示,CAN TP 将L-SDU 根据不同的帧类型,提取出来填入 TA AE SA 后生成N-SDU。
在这里插入图片描述

七、帧类型定义

  CanTp提供四种帧类型对网络层数据进行解析。分别是单帧(Signle Frame),首帧(Frist Frame),连续帧(Consecutive Frame),流控帧(Flow Control)。

7.1 单帧

  DLC小于8,可以被一帧发完。
在这里插入图片描述

7.2 首帧

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

7.3 连续帧

  连续帧应在首帧之后发送,接收节点一旦收到连续帧,应将全部数据组装完成。
在这里插入图片描述

7.4 流控帧

  流控帧的作用是调节连续帧的发送速率,流控帧应包含帧的控制信息: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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于cnn的卷机神经网络的项目毕业课题实践应用(毕业选题-深度学习-卷及神经网络)

这些项目可以作为毕业课题选择&#xff0c;共计超过20个&#xff1a; 往期热门项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别…

Mybatis操作sql报错ibatis.binding.BindingException: Parameter ‘empId‘ not found.

你们好&#xff0c;我是金金金。 场景 在使用Mybatis操作sql语句过程当中&#xff0c;更新操作&#xff0c;报错信息如下&#xff1a;Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘empId’ not found. Available parameters are [arg1, arg0, param1, …

PyTorch搭建AlexNet训练集

本次项目是使用AlexNet实现5种花类的识别。 训练集搭建与LeNet大致代码差不多&#xff0c;但是也有许多新的内容和知识点。 1.导包&#xff0c;不必多说。 import torch import torch.nn as nn from torchvision import transforms, datasets, utils import matplotlib as p…

电子价签前景璀璨,汉朔科技革新零售行业的数字化新篇章

新型商超模式数字化“秘密武器”——电子价签 传统纸质价签&#xff0c;只要商品价格、日期等信息发生变化&#xff0c;就必须重新打印进行手动替换。电子价签的应用使传统的人工申请、调价、打印、营业员去货架前端更换等变价流程均可省略&#xff0c;所有门店的价格由后台统…

Linux命令深入学习——列出帮助手册,开机关机

linux中有多种方法查看一个不熟悉命令的详细信息&#xff0c;如 ls --help&#xff0c;help ls&#xff0c;man ls&#xff0c;info ls 在linux系统中可以使用命令进行开关机以及相关基础操作 同时在进行写入操作时&#xff0c;可以使用快捷键进行操作

图论(二)之最短路问题

最短路 Dijkstra求最短路 文章目录 最短路Dijkstra求最短路栗题思想题目代码代码如下bellman-ford算法分析只能用bellman-ford来解决的题型题目完整代码 spfa求最短路spfa 算法思路明确一下松弛的概念。spfa算法文字说明&#xff1a;spfa 图解&#xff1a; 题目完整代码总结ti…

【LeetCode每日一题】2129. 将标题首字母大写

文章目录 [2129. 将标题首字母大写](https://leetcode.cn/problems/capitalize-the-title/)思路&#xff1a;代码&#xff1a; 2129. 将标题首字母大写 思路&#xff1a; 1.先根据空格&#xff0c;将每个单词切割&#xff0c;依次遍历 2.用StringBuilder来对结构进行拼接 3.…

element plust的表格 el-table数据不按列展示

ElementPlus的表格demo代码放到原生的html <template><el-table :data"tableData" style"width: 100%"><el-table-column prop"date" label"Date" width"180" /><el-table-column prop"name"…

使用Python查询和下载Sentinel卫星数据

欢迎学习本教程,了解如何使用 Python 访问和下载 Sentinel 卫星数据。在深入探讨技术方面之前,让我们先了解一下哨兵卫星是什么以及它们为何如此重要。 哨兵家族。资料来源:欧空局。 Sentinel 卫星是欧洲航天局 (ESA) 开发的一组地球观测任务,是哥白尼计划的一部分,该计划…

Spark性能优化指南——高级篇

调优概述 有的时候&#xff0c;我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜&#xff0c;此时Spark作业的性能会比期望差很多。数据倾斜调优&#xff0c;就是使用各种技术方案解决不同类型的数据倾斜问题&#xff0c;以保证Spark作业的性能。 数据倾斜发生时的现…

一文了解Cornerstone3D中窗宽窗位的3种设置场景及原理

&#x1f506; 引言 在使用Cornerstone3D渲染影像时&#xff0c;有一个常用功能“设置窗宽窗位&#xff08;windowWidth&windowLevel&#xff09;”&#xff0c;通过精确调整窗宽窗位&#xff0c;医生能够更清晰地区分各种组织&#xff0c;如区别软组织、骨骼、脑组织等。…

SSM整合项目(校验)

文章目录 1.前端校验1.需求分析2.HomeView.vue的数据池中添加校验规则3.HomeView.vue 绑定校验规则![image-20240311213428771](https://img-blog.csdnimg.cn/img_convert/7770bfa16814a0efd4eb818c9869a5bd.png)4.验证是否生效5.如果验证不通过&#xff0c;阻止用户提交表单1.…

机器学习之分类回归模型(决策数、随机森林)

回归分析 回归分析属于监督学习方法的一种&#xff0c;主要用于预测连续型目标变量&#xff0c;可以预测、计算趋势以及确定变量之间的关系等。 Regession Evaluation Metrics 以下是一些最流行的回归评估指标: 平均绝对误差(MAE):目标变量的预测值与实际值之间的平均绝对差…

webpack5零基础入门-4使用webpack处理less文件

1.安装less npm install less -D 2.创建less文件 .box{width: 100px;height: 100px;background: red; } 3.引入less文件并打包 执行npx webpack 报错无法识别less文件 4.安装less-loader并配置 npm install less-loader9 -D 这里指定一下版本不然会因为node版本过低报错 …

Java 启动参数 -- 和 -D写法的区别

当我们配置启动1个java 项目通常需要带一些参数 例如 -Denv uat , --spring.profiles.activedev 这些 那么用-D 和 – 的写法区别是什么&#xff1f; 双横线写法 其中这种写法基本上是spring 和 spring 框架独有 最常用的无非是就是上面提到的 --spring.profiles.activede…

【golang】28、用 httptest 做 web server 的 controller 的单测

文章目录 一、构建 HTTP server1.1 model.go1.2 server.go1.3 curl 验证 server 功能1.3.1 新建1.3.2 查询1.3.3 更新1.3.4 删除 二、httptest 测试2.1 完整示例2.2 实现逻辑2.3 其他示例2.4 用 TestMain 避免重复的测试代码2.5 gin 框架的 httptest 一、构建 HTTP server 1.1…

如何配置固定TCP公网地址实现远程访问内网MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

JDK环境变量配置-jre\bin、rt.jar、dt.jar、tools.jar

我们主要看下rt.jar、dt.jar、tools.jar的作用&#xff0c;rt.jar在​%JAVA_HOME%\jre\lib&#xff0c;dt.jar和tools.jar在%JAVA_HOME%\lib下。 rt.jar&#xff1a;Java基础类库&#xff0c;也就是Java doc里面看到的所有的类的class文件。 tools.jar&#xff1a;是系统用来编…

星星魔方

星星魔方 1&#xff0c;魔方三要素 &#xff08;1&#xff09;组成部件 6个中心块和8个角块和三阶魔方同构&#xff0c;另外每个面还有构成五角星的十个块。 &#xff08;2&#xff09;可执行操作 一共12种操作&#xff0c;其中6种是每个层顺时针旋转90度&#xff0c;另外6…

Gateway(路由映射)

1.SpringCloud Gateway Spring Cloud Gateway组件的核心是一系列的过滤器&#xff0c;通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器&#xff0c;隐藏微服务结点IP端口信息&#xff0c;从而加…