【CAN通讯系列1】需求解析(下)

续:【CAN通讯系列1】需求解析(上)

3.4 CAN1需要CAN报文协议进行开发

对于这条需求,涉及的变更在控制器软件,包括CAN驱动的配置,CAN报文的收发,CAN报文信号的提取和转换等。

这里解释下CAN报文协议,通常也叫CAN matrix,通常是Excel形式或DBC文件形式,主机厂一般都会提供。

首先,CAN报文协议规定了发送方是谁,接收方是谁,使用哪路CAN?使用哪个ID?报文名是什么?数据有多长?有哪些信号?通信周期是多少?

比如:VCU发送通过CAN1报文给MCU,该报文命名为VCU1,选择ID为247,长度为8,以10ms的频率发送四个信号(目标电机扭矩,目标电机扭矩标志位,目标电机转速和目标电机转速标志位),如下所示:

图片

通过上表也不难发现另一条报文MCU1: MCU通过CAN1发送报文给VCU,该报文命名为MCU1,选择ID为249,长度为8,以10ms的频率发送四个信号(实际电机扭矩,实际电机扭矩标志位,实际电机转速和实际电机转速标志位)。

然后,上表两条报文的数据长度均为8字节,各自均有四个信号,那么如何将这些信号排入到数据段?即信号占用多少位?从哪一位到哪一位是目标电机扭矩信号?二进制数值如何对应到物理值?CAN报文协议中需要定义,如下所示:

图片

假设目标电机扭矩为0X500,那么根据上表的转换关系,目标电机扭矩的物理值为320Nm。其转换过程为:先0X500转换成十进制为1280,再1280*0.25则为320,默认单位为Nm。

以此类推,不难转换其他几个信号。

对于CAN报文协议,除了上述Excel形式,还有DBC形式,如下所示。在DBC编辑界面的左侧,分别有网络节点,报文和信号,在对应做相应的添加即可,当添加好了之后,将信号与报文,报文与节点链接起来,然后在报文的布局中对所含的信号进行排列:

图片

这里信号的定义界面如下所示,不难发现定义项的信息与上述的excel表格定义项一样,当然它们内容肯定一样,只是形式不一样而已,通常,DBC文件会被用来软件开发的调试或测量。

图片

最后,对于CAN报文协议中的信号,除了控制器之间需要信息交互的信号,可能还包含保护或校验信息,比如校验和(Checksum)和滚动计数器(RollingCounter)。

图片

1)Checksum。它是用来判断CAN报文传输过程是否会出现错误,报文的发送方采用特定的Checksum校验算法计算一条报文的CRC校验码,再将该校验码放到该报文数据中,与报文中的其他信号一起发送到CAN总线。然后报文的接收方会读取到该校验码,同时采用相同的Checksum校验算法计算出CRC校验码,再对比这两个校验码,如果一致,则说明报文传输过程没有出现错误,否则认为报文传输过程有误,这条报文有问题。
2)Rolling counter。它是用来判断报文传输过程是否出现丢帧,报文的发送方发送一条报文就计数器加1,从0累加到15,然后不断循环。如果出现计数器不连续或首尾值不对,报文的接收方会认为丢帧。

3.5 CAN1需要配置1个终端电阻

针对这条需求,主要是从硬件设计考虑,在CAN1总线配置一个120Ω的终端电阻。由于高速CAN总线必需要有两个120Ω的终端电阻,主机厂作为高速CAN总线的设计方,所以他们需要确定好在总线的哪个节点(哪个控制器)去添加这样的终端电阻,因此主机厂会给相应的控制器提出这样的需求。

图片

source:Getting Started with the MCAN (CAN FD) Module,TI

为什么高速CAN总线需要这样的终端电阻,其作用主要有3点:

  • 提高抗干扰能力,让高频低能量的信号迅速走掉

  • 确保总线快速进入隐性状态,让寄生电容的能量更快走掉

  • 提高信号质量,放置在总线的两端,让反射能量降低

3.6 CAN1需要支持报文唤醒功能

对于这条需求,需要明确支持哪种方式的唤醒功能?是本地唤醒还是远程唤醒?不同方式的唤醒功能对控制器硬件设计会有很多的影响,比如CAN收发器芯片的选用和唤醒的硬件电路设计。

这里唤醒功能的概念稍作解释,如下图所示:上排ECU常接K15电,下排ECU常接K30电,这时要如何去唤醒这些ECU呢?

图片

source:Folie 1 (ieee.org)

对于上排ECU,只支持本地唤醒,即只有接通K15电才能唤醒,而下排ECU是可以被远程唤醒的。因为下排ECU下电之后,被没有真正的物理断电,其处于低功耗的休眠模式。如果下排ECU支持CAN报文唤醒,当CAN总线出现报文,那么下排ECU接收到报文,就可能被唤醒(取决于是任意报文唤醒还是指定ID的报文唤醒),通过CAN收发器去触发电源管理芯片给微控制器供电,从而使得ECU退出休眠而进入工作模式。

3.7 CAN1需要支持传输速率可标定

对于这条需求,需要明确标定为哪几个传输速率,即需要可标定为250Kbps或500Kbps或1Mbps吗?

为了更好地理解可标定的传输速率,比如250Kbps代表什么?250Kbps表示1秒钟可以传输250,000bit的数据。当标定不同的传输速率时,是如何实现的?重点放在不同传输速率的实现,比如250Kbps和500Kbps的实现有什么不同?

从CAN的传输速率设置来理解:首先,CAN报文上的1bit数据(tBit)其实可以用若干个CAN位时间(Tp)表示,即tBit=Tq* NBT(8≤NBT≤25);然后,1个CAN位时间(Tp)其实就是一个周期CAN时钟,而一个周期CAN时钟需要若干个晶振时钟周期,CAN时钟周期与晶振时钟周期的具体关系为:CAN时钟周期=2*晶振时钟周期*BRP。

图片

那么如何确定两个若干值呢?即图上的NBT和BPR。

假设晶振时钟周期为200MHz,传输速率为500Kbps,那么有:

  • 晶振时钟周期:T=(1s / 200MHz )* 2= 10ns

  • 位时间:tBit = 1 / 500Kbps = 2000ns

  • 2000 = Tq* NBT, Tq = 10 * BPR,这时要使得8≤NBT≤25,那么BPR至少为8,对应NBT为25。

假设晶振时钟周期为200MHz,传输速率为250Kbps,那么有:

  • 晶振时钟周期:T=(1s / 200MHz )* 2= 10ns

  • 位时间:tBit = 1 / 500Kbps = 1000ns

  • 1000 = Tq* NBT, Tq = 10 * BPR,这时要使得8≤NBT≤25,那么BPR至少为4,对应NBT为25。

通过这两个例子,不难发现传输速率的不同,必然会引起一些参数设置不同,比如BPR。注意CAN通讯参数设置在软件初始化时,因此也就是意味着可标定的传输速率若通过标定改变,并不会立即生效,而是需要再次软件初始化后才生效。

4 CAN通讯需求总结

上文介绍完了CAN通讯在系统层面的基本需求,最后再从利益相关者视角来回顾一下,如果你是客户,你会提哪些需求?

图片

首先,基于车载网络架构可知有几路CAN,与我的控制器产生信息交互的又有几路CAN,诊断和标定是否需要单独的1路CAN,这时我就可以确定该向供应商提需要几路CAN,是否需要配置终端电阻。

然后,对于每路CAN的功能或性能要求是什么?需要支持哪些CAN类型,哪些CAN帧类型,哪些CAN帧格式,每条CAN的传输速率是多少,是否需要具备CAN唤醒功能,如果需要对唤醒方式是否有要求。

最后,针对CAN报文内容,需要发送哪些信号?接收哪些信号?报文使用哪个ID? 多长?多快的频率通讯?每个信号的定义是怎样的?如何合理布置到数据段?其转换关系是怎样的?是否需要添加校验信息?

以上就是从客户视角如何提出一些典型的CAN通讯需求的思考过程。

当然针对软件层面,其实还有很多需求,比如:

  • CAN报文在底层软件和应用层软件的边界,它们之间接口的定义;

  • CAN busoff的处理机制;

  • CAN网络管理,需要定义具体的状态机;

  • CAN报文的故障诊断措施,包括不限于ID检测,超时检测,Checkrum校验和故障后处理措施等;

  • 与功能安全相关的CAN信号,需要采取E2E保护措施;

  • 基于CAN总线进行故障诊断通讯,需要定义CAN传输层的相关参数。


想了解更多CAN通讯的理论知识和软件实践知识,请关注后续文章。

-------------------------------------------------------------------------------------------------------------------------

创作不易,欢迎点赞收藏关注。

汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车行业从业人员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值