1.dbc属性与信号流
1.1 dbc属性决定报文类型
不同的dbc属性决定不同功能的报文, 一般实际项目中涉及的报文为4类:应用报文,诊断报文,网络管理报文,xcp报文。不同作用的报文其在协议栈中的信号流路径是不同的。
参考vector给出的《technicalreference_dbcrules_vector》文档,在dbc文件中对关键属性attributes的规定如下。
应用报文:genmsgilsupport:yes
网络管理报文yes
xcp报文:
根据《technicalreference_dbcrules_vector》规定只要message中含有大写xcp字样,即可在导入dbc后被vector的工具自动识别为xcp报文。其他属性同“应用报文:genmsgilsupport:yes”
如果不用1的方式,也可以在canif模块里手动设置其上层模块upper layer(pduusertxconfirmationul)为xcp模块。其他属性同“应用报文:genmsgilsupport:yes”
诊断报文:
功能寻址yes
物理寻址请求yes
物理寻址响应yes(物理寻址和功能寻址的区别请自行摆渡)
1.2 报文类型决定信号流路径
以tx报文为例:
普通报文路径:can->canif->pdur->com
诊断报文路径:can->canif->cantp->pdur->dcm
xcp报文路径:can->canif->xcp
网络管理报文路径:can->canif->cannm
之所以把pdur标红,是因为在下面的配置中方便我们识别pdur的相关模块,这个要在pdurbswmodules配置项中选择的!从这里也可以直接确定,pdur的pdurbswmodules上下文最多只有canif,com,cantp,dcm。
2. 配置实践
dbc如下:
我习惯将dbc中所有报文简单罗列到一个表中,按报文功能进行分类。这样结合上面我们的总结,就对于每个报文的路径有一个全局的了解。如果项目比较大,报文较多的情况,建议将普通报文之外的报文(nm报文,xcp报文,诊断报文)列出来,因为他们特殊啊!
通过观察dbc属性,制作报文分类表格:
好,接下来进入我们的实战环节。
导入dbc,update工程, 现在看工具自动配置中遇到的错误还是比较多的, 所以我们接下来的任务就是将这些模块的错误全部fixed掉!
2.1 搞定信号路径
2.1.1 ecuc模块
ecucpducollection这个container的作用.数据在can通信协议栈各层间都是以pdu形式传输的,为了将各层pdu关联起来,则需要定义全局 pdu(global pdu)。由于全局pdu不属于任何一个标准bsw模块,所 以autosar提出了一个ecuc模块来收集一些配置信息。在ecuc模块中定义全局pdu时不需要关心其数据类型,只需要定义pdu长度即可。
所以我们先对照dbc对照检查以下,ecuc/ecucpducollection对各个pdu(pdu是啥?你可以简单理解成一个pdu就对应总线上的一个message再附上一个地址信息的这么一个玩意--虽然这种说法不准确,但是它能有助于你去理解)的长度定义是否正确,至于长度之外的错误,先忽略之,后面其他模块配好之后,ecuc中相关错误一般就自动消失了.
2.1.2 can模块
can模块是直接面向硬件的, 所以can模块主要的配置分2部分:
对can控制器的配置,包括,参考时钟, 波特率,采样点,帧类型,处理方式polling/interrupt;
和canif的联系,即对hoh和mailbox和filter的配置)
can控制器的配置
本阶段我们只关注can控制器的配置! (在后面的步骤中再重点配置hoh和mailbox和filte,所以本阶段这三方面的错误先忽略!)
can控制器的配置还是比较容易的,如果有什么错误一般根据工具里面给出的提示即可轻易解决。这里科普2个基本知识点, 也是can模块一个稍微难懂的概念 - can的时钟, can的重同步和采样点.
can时钟
can/canconfigset/cancontrollers/clock frequecy这个值是从芯片的时钟树分频而来, 在mcal的mcu模块中指定.
/can/cangeneral/clock divider是对上面can/canconfigset/cancontrollers/clock frequecy的分频, 他们相除的结果在cancontrollerbaudrateconfig/canbaudrateclock中, 比如
clock frequecy = 40m, clock divider = 1, 则canbaudrateclock= 40m = 40000khz.
重同步和采样点
参考文献《can总线学习笔记(5)- can通信的位定时与同步》这篇博文有非常详尽的介绍( 如果是tir1,一般oem会给出具体的采样点参数值, autosar工具也会给出参考值)我在这就蜻蜓点水说以下计算原则。
sync seg(同步段):长度固定为1tq, 所以配置工具中没有它的配置.
在vector的配置工具中, 定义prop+seg1 = tseg1, seg2 = tseg2,一开始感觉后别扭,后来发现这样也好,计算采样点位置更加方便了,比如采样点为80%:
(同步段(1) + tseg1)/(同步段+tseg1+tseg2) = 80%,
如果一个bittime中tq总和固定了,比如为16个tq,
同步段(1) + tseg1 + tseg2 = 16
根据这个二元一次方程组则很容易算出各段的值.
sync seg固定为1, tseg1 = 11, seg2 = 4.
syncjumpwidth:它的值是用于调整相位缓冲段1和相位缓冲段2的值, 用于can的同步,比如相位缓冲段1向前增长了3个,则相位缓冲段2向后减少3个tq.---也就是一次同步中相位缓冲段改变的长度.所以sync jump width的设置有2个原则:
sync jump width <= 3,
sync jump width canif->cantp->pdur->dcm)
nm报文:canif之上是cannm,(can->canif->cannm)
xcp报文:canif之上是xcp,(can->canif->xcp)
普通报文:canif之上是pdur, (can->canif->pdur->com)
如果出现如下错误:
如果不需要confirmation功能,则可以将confirmation ul配置项中设为none -- 只要到对应模块中检查该pdu确实存在。比如:普通应用报文pdua,它的上层应该是pdur, 我们去pdur中检查,如果它确实被映射到pdur中了, 则可以在canif中将它的confirmation ul设为none.
该容器(/canif/canifinitcfg/canifrxpducfgs和/canif/canifinitcfg/caniftxpducfgs)下其他的一些小错误根据工具提示修改即可.
剩下的错误在后面的操作中解决。
2.1.4 xcp模块
主要是配置xcp中用于接收和发送的pdu,如果xcppdus这一块有错误,则检查你在dbc中和canif中指定的xcp收发报文是否已经在xcp中mapping上了,其他小错误根据提示修改即可。
2.1.5 pdur模块
pdur主要有2个作用:对信号的路由,对不同总线信号的网关。
pdurbswmodules指定pdur的上下文模块
根据我们上面的描述,pdur向下向上的模块分别是:
普通报文: canif->pudr->com
诊断报文:cantp->pdur>dcm
xcp报文和nm报文绕过pdur。
所以如果你的网咯中没有诊断报文,则pdurbswmodules中,pdur的上下层是canif和com
如果有诊断报文,则pdurbswmodules中,pdur的上下层是canif,com,dcm,cantp.
pdurroutingtables
一般工具自动生成的配置,出现错误就在这三个地方。
pdur transmission confirmation这个错误主要是由于pdur的上下层confirmation没有一致,比如一个tx信号,canif中将confirmation ul指定为pdur,而在pdur中将transmission confirmation设为false,则自然会报错;又或者在canif中将confirmation ul设为none, 而在pdur中将transmission confirmation设为true,则自然会报错。
其他小错误根据提示修改即可。
2.1.6 com模块
com模块非常简单,其作用就是将总线上的msg进行卸货或者装车,装车:将信号组装到msg里面;卸货:将msg拆分成一个个的信号,给应用层或者cdd使用.
2.1.7 cantp模块
因为诊断协议中有多帧连续帧的概念,有些报文一帧是发不完的, 所以cantp模块的主要作用是对can i-pdu进行分段和重新组装,使得i-pdu的长度不大于8个字节,对can fd而言,can i-pdu不大于64个字节。
这里面的难点应该就是一些时间参数的设定, 这个要结合uds的14229/15765/11898和主机厂释放的网络规范进行设定.
2.2 搞定hoh和mailbox
(有朋友反应这一块有很多错误,好吧,我们先讲这一块)
can模块下面的canhardwareobjects其实就是mailbox,是硬件上的存在。canif下面的hoh包含hrh(接收)和hth(发送)是报文收发的句柄,是一个软件概念。
结合我们上面的工作, 我接下来主要是对
can部分mailbox和filter的配置
canif部分hoh的配置
2.2.1 can模块中mailbox配置
canhardwareobjects
先检查canhardwareobjects这个容器下面, 检查hardwareobject的数量.注意此时hardwareobject还没有和canif中的pdu建立任何关系!--这模块的hardwareobject我习惯叫它mailbox!
根据dbc中message个数, 设置can模块下面每个canhardwareobjects(就是mailbox)的canhandletype,设为full can还是basic can.
full can和basic can
先说结论:
full can一个hoh对应一个mailbox而basic can一个mailbox可以处理多个pdu.
full can是硬件滤波而basic can软件滤波,因此配成basic的要设置滤波.
full can一个buffer对应一个id报文,无缓存功能而basic can以fifo的方式接受特定的多个报文,有缓存功能.
因此:
对于诊断报文和nm报文的接收报文必须配置成basic can,
其他报文最好配成高效的full can.
关于full can和basic can, 这篇文章讲的很详细《【autosar-can】can的 “basiccan架构” 和 “fullcan架构”》, 这里我说一下我的理解, 不一定很准确,但有助于理解.
如果你在canhardwareobjects这个容器下面配置的basiccan个数>1(tx mailbox>1个或者rx的mailbox>1个)这个时候你应该会遇到一个报错:
这是翻译成人话就是你没有使能multi basiccan或者你么有更高级的授权, 而这个时候你进入cangeneral这个容器下面却发现不允许使能multi basiccan!!
是不是很崩溃?---没关系, 按下面这样做:
将所有tx的basiccan删除到只剩一个, rx的basiccan删除只剩一个,然后命名(随个人喜好)txbasiccanmailboxcommon和rxbasiccanmailboxcommon.然后设置其size大小为之前所有basiccan的mailbox总和!
最后别忘了给接收的basiccan设置滤波,并绑定:
在canfiltermasks下面设置滤波, 在basiccan的mailbox下面设置映射:
再科普以下滤波的设置:
滤波参数
白名单模式计算原则是: received id & mask == code & mask.
有一个简便的方法就是,code value里面填写id大的那个id值, mask value里面填写id小的那个id值两个数按位与后的值.
例如:我只想接受0x7df和0x7d4这两个报文,将其他报文过滤掉. 根据计算公式,对于0x7df报文,
0x7df & 0x7d4 == 0x7df & 0x7d4
对于0x7d4报文, 0x7d4 & 0x7d4 == 0x7df & 0x7d4
好了,纵然现在千般错, 先放过.去canif模块!
2.2.2 canif模块中的pdu(rx和tx pdu)
进入/canif/canifinitcfg/canifinithohcfgs/canifinithohcfg/canifhrhcfgs这个下面,
将诊断rx pdu和网络管理的rx pdu(他们是basic can)都映射到can模块下面的rxbasiccanmailboxcommon上!并勾选canifhrhsoftwarefilter.
将xcp报文和普通应用报文与can模块下面的mailbox进行一对一映射!--因为他们是full can!
并取消canifhrhsoftwarefilter.
进入/canif/canifinitcfg/canifinithohcfgs/canifinithohcfg/canifhthcfgs这个下面,安装上面的步骤操作即可!
接下来为tx的pdu配置buffer即可!
其他一些错误根据工具提示修复即可.这一块相互绑定关系我做个图谱:
截止目前can和canif的错误就全部消除了
来源:坐看云起会有时
多方面齐全超声波清洗机—单槽超声波清洗机的功效
苹果宣布无限期关闭加州所有门店
小米6蓄势待发,价格屠夫重新回归!米粉来充值信仰了!
调幅噪声
多通路光纤滑环的内部结构是怎样的
AUTOSAR实战教程-通信协议栈介绍
凯盛科技8.5代TFT-LCD玻璃基板产线即将投产
车载网关产品介绍及使用案例
自动驾驶公司Momenta完成新一轮融资,估值创纪录
率先适配苹果MagSafe充电提示!倍思极简Mini磁吸无线充电器来了
高空测报灯的用途说明,它的功能特点是什么
中国联通eSIM独立号码全国商用,支持华为三星手表
新闻 | 虹科与瑞士SWitrace正式建立合作伙伴关系
VR版游戏无人深空为何引起如此追捧
医疗机构的下一个红利出口在哪里?
GTE-XM折弯机激光保护装置的工作原理
东芝主体将变更为不涉及业务的小型控股公司
PLC编程语言有哪些特点和形式
口香糖手电筒diy制作图解
边缘计算的"军备竞赛"阶段 网宿科技当如何异军突起?