生活不易,猫咪叹气。好久没更新,距离上次更新已经是快半年前了。毕业到现在,已经在这家公司呆了快2年了。快的话一个月,慢的话两个月,马上就是提桶的日子了。
说回我们的正题。
平时在工作上,对于通信工程师外的人来说,使用CAN分析仪(如CANoe、Can卡、Canpro等)采报文、分析报文是一件极其日常的事情。对于他们来说,从一块单板上电到电脑看见单板发出的报文,这中间的操作实际并不多(用Canoe举个栗子):
步骤1、把单板的CAN线跟Canoe连接好并接上终端电阻
步骤2、CANoe连接电脑,打开Canoe软件并配置Canoe的波特率、采样点(这个简单的步骤对于通信工程师外的人来说其实他们并不知道怎么配,他们经常是让别人配好一个工程,然后一直用一直用。。。)
步骤3、单板上电并唤醒单板,在电脑上看Canoe接收到的报文数据
好了,简简单单只需要两三个步骤,不管你懂CAN还是不懂CAN,它就通讯上了。但对于我们通讯工程师,我们通常需要解决的是在他们做了这些操作之后仍然无法正常通讯的问题。
从上面的步骤1至步骤3,所涉及的内容就是CAN物理层的内容。
我们从步骤1说起。
CAN通讯使用的线为双绞线:
CAN通讯所使用的CAN线都是双绞线,就是CAN高和CAN低两根线卷成麻花,类似于下面这张的图。(大晚上的,饿了,淦)
(图片来源:网络)
使用双绞线的原因是由于CAN是差分信号:数据1和数据0是CANH和CANL的电平作差,两者电压差为2V时表示数据0,两者电压差为0V时表示数据1。所以当CANH和CANL是双绞线时,当有外界电磁干扰的时候,一干扰就同时干扰到CANH和CANL,比如原来CANH和CANL的差值为正常的2V,突然外界干扰让CANH和CANL同时都升高了0.5V,CANH和CANL作差实际还是2V,所以不影响通讯。
CAN通讯的终端电阻的作用:
关于终端电阻,下面这篇文章讲的很棒。
以我菜鸟的水平就只会说:没了它是通讯不了的,报文是接收或者发不出去的。。。
【技术课堂】CAN总线缺少终端电阻现象解析 (qq.com)https://mp.weixin.qq.com/s?__biz=MjM5NzkxNDgxMw==&mid=2654934289&idx=2&sn=139e07718c9741d2774467e0f0ccdd1f&chksm=bd1904c38a6e8dd527fa42f47e2be18386b8893e2f894a99d90468d25ff70d1459bc862b35b6&scene=27 步骤1完成后就是步骤2:
波特率
仲裁域和数据域的波特率配置是不一样的。(如果不知道啥是仲裁域和数据域的可以看下我之前的这篇文章)Autosar CAN开发03(CAN分析仪观测到的报文与DBC中的报文信号对应关系)_报文和信号的关系-CSDN博客CAN分析仪观测到的报文与DBC中的报文信号对应关系_报文和信号的关系https://blog.csdn.net/qq_41848098/article/details/125014128 我目前接触到的项目。对于CAN格式。仲裁域和数据域是500K(也见过有250K的)。对于CANFD格式,仲裁域是500K,数据域是2M(也有5M的)
波特率500K是啥意思呢?1秒除以500 000 = 2微秒,也就是说波特率500k的意思就是一个位时间是2us,波特率2M的意思就是1秒除以2000 000 = 0.5微秒,也就是说波特率2M的意思就是一个位时间是0.5us
关于波特率的配置,Vector工具链的Configurator的配置地方如下图
位时间参数
至于位时间是什么:从本质上,CAN线上传输的是电平信号,即高电平和低电平,而位时间,就是CAN通讯在传输报文过程中,一个最小单位的高电平或低电平的时间,如上面所说,如波特率是500K,那么一个位时间是2微秒。(按照我个人理解,波特率和位时间其实可以这样理解:波特率500k,即1秒/500k=2微秒,也就是说,最小2微秒可以进行一次电平变化,1秒最多可以电平变化500k次,位时间,就是一次电平变化的时间)
如上图所示,一个位可以分为四个段:分别是:同步段、传播时间段、相位缓冲段1、相位缓冲段2。另外,一个位的最小单位叫做Tq(Time Quantum),也就是一个位可分为n个Tq,比如:同步段+传播时间段+相位缓冲段1+相位缓冲段2 = 80个Tq。关于这四个段分别有什么意义,大家可以看下面的解释(下面的几个解释我是直接Copy网上的,说的非常Very good):
- 同步段(SS:Synchronization Segment):CAN网络中的所有节点,在接收一位数据时,以此段作为位起始的参考点,进行下降沿的检测,统计下降沿基于SS段的偏移,然后进行位时序的调整,使接收趋于同步(下降沿在理想情况下应出现在SS段)。需注意,进行位时序调整的条件是检测到下降沿,若无下降沿则不进行调整,因此为了避免多个相同连续位出现导致位时序得不到调整,产生不同步的情况,CAN控制器增加了填充位的概念,当出现连续5个相同位后,添加一位相反电平的填充位。SS段长度固定为1个Tq。
- 传播时间段(PTS:Propagation Time Segment):CAN总线上数据的传输会受到物理延迟,比如发送单元的发送延迟、总线上信号的传播延迟、接收单元的输入延迟等,PTS段就是用来补偿这些因素产生的时间延迟。而PTS段长度至少应为这些因素产生的时间延时的2倍,PTS段长度至少为1个Tq。
- 相位缓冲段1(PBS1:Phase Buffer Segment 1):若下降沿延后N个Tq,且延迟不大于同步跳转宽度,使得原本位时序中采样点位置提前N个Tq,则需要对PBS1段增加N个Tq数(使采样点位置延后N个Tq),吸收这段误差。PBS1段长度至少为1个Tq。
- 相位缓冲段2(PBS2:Phase Buffer Segment 2):若跳变边沿提前N个Tq, 且不大于同步跳转宽度,使得原本位时序中采样点位置延后N个Tq,则需要对上一个位时序的PBS2段减少N个Tq数(使采样点位置提前N个Tq),吸收这段误差。PBS2段长度至少为2个Tq。
- 重同步补偿宽度(SJW: reSynchronization Jump Width):SJW为PBS1增加或PBS2减少的最大Tq数。
而我们常说的采样点,就位于相位缓冲段2开始的地方。采样点,我们平时的计算方法就是:单来说就是前面3个段的和占总百分比多少,即(同步段+传播时间段+相位缓冲段1) /(同步段+传播时间段+相位缓冲段1+相位缓冲段2)。举个栗子:如果一个位是80个Tq,相位缓冲段2是20个Tq,那么Sample Point就是60/80=75%。
记得。同步段固定是1个Tq。其它3个段工程师是能根据需求修改的。比如Vector配置如下(下面图片配置的采样点为百分之80。即(1+24+39)/(1+24+39+16)=80%:
其实一开始是接触的时候,配置这几个参数总是一脸懵逼。含义我知道了,但我怎么知道这些要配置为多少啊???,后面慢慢接触才知道,首先,我们是汽车零部件供应商,因此,我们提供的部件是要跟汽车上的其它部件通讯的,每个部件的采样点必须配置保持一致才能正常通讯,因此采样点配置为多少必须由我们的客户,即车企提供。因此这些参数都是车企提供。
知道了这些。在使用CAN盒、CANoe配置工程进行通讯的时候就知道波特率要配成多少,采样点要配成多少了。有些CAN分析工具较为简单,只需配采样点波特率。有些就比较复杂,比如CANoe,配置的时候还需要配置各个段的Tq个数。
在知道上面的波特率和位时间后,我们补充一些有意思的扩展知识。
在CAN通讯正常的情况下,我们使用示波器去看收发器的Tx或者Rx引脚。我们就能观测到一帧一帧报文。如下图所示,一帧普通CAN格式的CAN报文的位长为(51-117位)。
现假设通讯波特率为500K,有8个Byte数据的普通CAN格式报文发出(即这帧报文共117位)。根据我们上面说的,500k波特率的一个位时间为2微秒,因此 117 * 2us = 234us。因此,从示波器上观测,可以看到如下图所示波形(画图画的,丑是丑了点)
前几天有个项目我之前开发的时候需求看漏了,还好问题不大不是量产,虽然没找我麻烦,但难顶。gg。但是,项目需求解读的时候,不能只一个人解读呀,这样难免会漏的,这已经是我第二波漏了,主要是有些东西我不知道这种东西存在,然后就按照惯性思维,以为所有的都是跟我以前碰到的是一样的。总之,草率了。但又学到东西,被人塞钱进口袋了。呜呜
最近弄新项目,各种Bug,时间又紧,还好有难题的时候能找大佬顶着,不然像我这种垃圾,顶不住了。
下篇文章我会写一下Busoff、收发器相关的东西。
返回目录:文章来源:https://www.toymoban.com/news/detail-689842.html
Autosar BSW 开发笔记(目录)-CSDN博客文章来源地址https://www.toymoban.com/news/detail-689842.html
到了这里,关于Autosar BSW层CAN控制器相关参数------11(物理层。位时间、Tq、采样点等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!