汽车CAN总线信号快速跨网络转发算法的研究
2021-07-05牛昱栋刘永春高发廷
牛昱栋,刘永春,高发廷
(中国重型汽车集团汽车研究总院,山东 济南 250002)
1 引言
从车辆发明至今,汽车已经从纯粹的机械结构发展到拥有数个甚至数十个控制单元,随着车辆安全、舒适需求的增加,控制单元的数量越来越多,对网络的负担也越来越大。车辆根据不同的功能域进行了划分,每个域拥有一个独立的CAN总线网络,但是由于车辆是一个完整的整体,每个域之间存在着一定数据的流通,信号稳定实时转发,才能保证车辆整体功能的稳定可靠。
本文通过对CAN报文属性的研究、操作系统的运行模式与信号网络转发的需求分析,设计一套适用于大部分情况的快速稳定的跨网络转发策略,并且具有相当的灵活性。
2 信号在设计架构上的数据流向
车辆上存在多个总线网络间信号交互的时候,我们将转发前即存在该信号的总线网络称为该信号的源网络,将该信号转发到总线网络称为该信号的目标网络。在CAN总线网络之间的数据流即为从源网络转发到目标网络,转发逻辑的实现我们称之为网关功能区,图1给出了总线数据从源网络转发到目标网络上的具体流向,此过程主要由网关功能区,判断该信号是否需要转发并将其转发到特别目标网络,无关信号不会被转发。
图1 总线数据数据流向
3 网关功能区对信号的处理
网关功能区是CAN总线网络信号转发功能的实现区域,负责从源网络接收数据,判断数据是否需要转发到目标网络,若需要转发,则将该数据发送至目标网络。
网关功能区细分为4个子功能模块,分别为CAN信号接收子模块、CAN信号转发需求判断子模块、CAN信号发送子模块和CAN信号发送成功确认子模块,图2为各个子功能模块间的数据流向。
图2 网关功能区内数据流向
1)CAN信号接收子模块负责信号的初步接收,并将信号中需要的信息保存至相应CAN网络的接收buffer中,等待CAN信号转发需求判断子模块对数据进行具体判断处理。
2)CAN信号转发需求判断子模块将接收buffer中的信号与提前准备好的转发配置表对比,判断该信号是否需要转发,若需要转发,则将该信号存放在对应通道的发送buffer中,等待CAN信号发送子模块判断信号合适进行发送。
3)CAN信号发送子模块,判断各个CAN通道的发送buffer的状态与当前CAN网络状态,当buffer状态不为空且CAN网络状态为空闲时,按先进先出依次发送CAN信号到相应的网络上。
4)CAN信号发送成功确认子模块,当需要转发的CAN信号发送成功后,此模块会被回调,判断发送buffer中还存在CAN信号未发送则跳转到CAN信号发送子模块,若发送buffer为空则退出,等待新CAN信号的到来。
4 CAN信号接收子模块对信号的处理
CAN信号接收子模块位于中断当中,主要任务是将CAN网络接收到的数据从寄存器搬移到特定的RAM区域,并触发CAN信号转发需求判断子模块的事件。为了达到稳定安全的目的,在中断中的工作尽量做得少,图3为CAN信号接收子模块的数据流向。
图3 CAN信号接收子模块数据流向
5 CAN信号转发需求判断子模块对信号的处理
CAN信号转发需求判断子模块被触发之后,读取RAM中存放的具体的数据并与转发配置表中的信息对比,确认是否需要转发,若需要转发,则根据配置表中的信息,将需要转发的数据存放至对应通道的发送buffer中。考虑到操作系统之间通过事件切换任务需要时间,在成功接收到信号后直接在同一个任务中调用CAN信号发送子模块。图4为CAN信号转发需求判断子模块的数据流向。
图4 CAN信号转发需求判断子模块数据流向
6 CAN信号发送子模块对信号的处理
CAN信号发送子模块即将具体的数据从发送buffer中取出,通过寄存器操控硬件将数据发送到目标网络上,图5为CAN信号发送子模块的数据流向。
图5 CAN信号发送子模块的数据流向
7 CAN信号发送成功确认子模块的处理
CAN信号发送成功确认子模块负责管理一条报文发送后,确认发送成功并判断是否继续向目标网络发送CAN信号。图6为CAN信号发送成功确认子模块的操作流程。
图6 CAN信号发送成功确认子模块的操作流程
8 结语
本文阐述了一种CAN总线信号快速跨网络转发算法,该算法实现了CAN总线信号快速跨网络转发,并且在快速的基础上兼顾了稳定,考虑了不同逻辑的相互分离与所应处于数据流的位置,形成闭环,不会造成数据冲突,逻辑实现复杂性小,可适用于任何跨网络的ECU,转发速度快,保证了数据的实时有效,可以为CAN信号转发、处理提供重要的参考。