LIN总线数据采取SCI格式,将TJA1021的TXD和RXD连接到MCU的UART发送和接收引脚上,便可以在UART上以软件的形式实现LIN的数据链路层。由于LIN在物理上为单线形式,发送和接收都是在LIN线上进行的,所以发送也会触发接收,这样便可以将其数据链路层的实现统一到UART的接收处理函数中来。该部分可以根据LIN帧的格式以状态机的形式实现[4]。
BCM做为车身控制系统的LIN主节点,以时间片轮转的方式调度着LIN报文的传输,当时间片到达时,BCM发送包括间隔场、同步场和PID在内的帧头[5],然后由各个节点根据该PID决定接收数据场还是发送数据场。时间片的轮转是基于调度表实现的,定义如下形式的结构体实现对调度表条目的管理。
typedef struct
{
uchar handle;
uchar pid;
uchar mode;
uchar *data;
uchar datalen;
uchar tICks;
}l_sch_table_item;
其中handle为调度表条目索引,每次时间片轮转时加一,轮转到调度表表尾时切换到调度表表头继续轮转,pid为LIN报文的Protected ID,mode表示该帧数据场是由BCM发送还是由其他节点发送,data为数据场,datalen为数据场长度,ticks定义时间片长度即该帧和下一帧的时间间隔。
LIN帧调度表为l_sch_table_item结构体数组,根据当前调度表条目的ticks决定时间片计时时间,超时发生时,切换当前时间片,同时切换调度表条目,这样便实现了LIN报文的轮转调度。
结语
本文针对某车型分析了其车身控制系统结构,从输入信号检测、输出控制和LIN通讯三个方面,描述了其车身中央控制器的设计实现,该控制器经装车试验,运行良好,功能稳定,有很高的实用价值。