前言
前面只是对BSW模块泛泛而谈,从这周开始,将会更加的详细讨论AUTOSAR分层体系架构中的BSW模块。
2. 通信
这里的通信时广义的通信,一般是CAN、LIN、FlexRay、Eth等,一般做车载软件的对CAN比较熟悉,直接按CAN代入思考即可。
图1
RTE之下,跟通信相关的BSW软件模块如上图,主要有COM、PduR、IPDU、TP、Bus接口、收发器和总线驱动,下面一一介绍各个模块的职责,后续会有达芬奇工具中实操章节,所以我们先把这些概念搞明白,工具配起来就得心应手了。
1)Com:Communication,通信层,上层SWC发下来的信号,最先经过Com层,Com重点关心数据长度,不关心是是LIN发下来,还是CAN发下来的。这里发送和接收的数据一般都是数据库定义好的,比如OEM给的arxml、dbc、xml等,所以Com提供信号接口、建立/分析PDU,以及信号级别的网关。
2)PduR:全称Protocol Data Unit Router,协议数据单元路由器,一个主要作用就是把Com发下来的PDU分发到对应的总线上,是CAN的发到CAN,是LIN的发到LIN,实现PDU级别的网关。
3)IpduM:I-PDU Multiplexer,这个模块不是必须要用到的,是可选的,一个常见的使用场景就是,当CAN ID不够用时,又不想用ISO 15765中的TP协议,用一个ID传输多帧数据,从数据字节中拿出一些字节作为协议用。
eg,我想用0x3E9这个ID来传输14个字节的版本号,可以分两帧来传,最前面的那个字节用作协议传输,1代表版本号的前7个字节,2代表版本号的后7个字节,最后接收方也按这种协议解析,就可以实现1个ID传输14字节的数据(标准CAN,1个ID只能传8字节数据)
图2
4)TP:Transport Protocol,传输协议层,假如是CAN的话,可以认为是ISO15765的实现,注意看图,这一层不一定用到,一般做UDS诊断才会用到,COM的数据也可以直接走PduR就到Bus接口层,如果做诊断需要到PduR后,经过TP层,才到Bus接口层。
5)Interface:与硬件无关的一层,总线特有的功能(与总线的发送和接收机制有关系),比如管理发送队列,FlexRay总线的组帧,基于时间触发的总线(LIN、Flexray)在这一层处理。
6)Driver:与硬件强相关的一层,主要完成芯片CAN控制器的初始化,buffer的填充以及CAN中断的实施。
7)Transceiver:收发器的驱动。
3. 发送流程
图3
从上往下看上图
1)Com层写一个信号到PDU buffer(这个是CAN总线,你可以理解PDU为一个Message,相当于是把一个CAN信号写到一个Message的buffer中)
2)这个PDU buffer会立即或者周期的传给PduR,如果是事件型的报文就会立即,如果是周期型的,周期到了再传。每个PDU都有一个ID标识符(同样的用CAN来好理解一些,每个一个CAN Message都有一个ID)
3)PduR识别是啥总线,如果是CAN总线,就关联到CAN总线接口,如果是LIN总线,就关联到LIN总线的接口
4)总线接口层识别相关的通道(比如你有多路CAN,就是有多路通道),将PDU写到相应通道的队列中。
5)最后驱动层在遵循优先级的情况下,尽可能快得把PDU发到总线上去。