以接收 CAN 报文帧为例说明一下GZ32 CAN/LIN 网关工作流程:
DDRC_DDRC1=0; //CAN RX 使能
DDRC_DDRC0=1; //CAN TX 使能
re_id0=REC_IDR0;
re_id1=REC_IDR1; //读ID 标识符寄存器
temp0=REC_DSR0;
temp1=REC_DSR1;
temp2=REC_DSR2; //读数据段寄存器
… …
re_dlr=REC_DLR; //读数据长度寄存器
当 GZ32 CAN/LIN网关接收到CAN报文帧后,根据所接收到的标识符及数据段寄存器,就可以对左前组合灯以及后组合灯模块进行正确控制。同时,网关还可以将各灯的状态等信息发送给CAN 总线。
3.3 LIN 报文的接收和发送
当 GZ32 CAN/LIN 网关接收到CAN 报文并对其进行正确解析后,将通过增强型串行通信ESCI 模块向LIN 总线发送LIN 报文帧,本设计使用TJA1020 LIN 收发器加以实现。这样LIN 总线上的各从机模块,如车门模块(包括门锁电机、雨刮电机、后视镜等)、后组合灯模块,通过ID 识别可以正确的接收LIN 报文并加以控制。同理,各模块亦可将各自的状态等信息反馈给LIN 总线,并通过TJA1020 反馈给CAN/LIN 网关,如图3 所示。
以发送LIN 报文帧为例说明一下GZ32 CAN/LIN 网关工作流程:
DDRE_DDRE0=1; //TXD 使能
DDRE_DDRE1=0; //RXD 使能
SCBR=0xC0; //LINT 和LINR 使能
SCPSC=0xB0; //设置波特率为9.6K
SCC1=0x40; //ESCI 使能
SCC2=0x0C; //TE 和RE 使能
SCC3=0x00;
transmit_data[0]=0x55;
transmit_data[1]=ID;
transmit_data[2]=REC_DSR0;
transmit_data[3]=REC_DSR1;
… … //发送LIN 数据场及校验和场
4 调试过程及结论
本文针对 MC68HC908GZ32 微控制器在汽车CAN/LIN 网关中的应用,给出了具体的硬件设计方案及控制软件,并最终加以了调试。在调试过程中遇到一些问题,并最终得到解决。比较典型的问题及解决方法如下:
(1)网关无法正确接收CAN 报文:网关若想正确收发CAN 报文,波特率配置与高低速CAN 网关之差一定要在CAN 协议允许的范围之内。同理,网关发送LIN 报文的波特率与LIN 从节点的波特率也要符合LIN 协议规定,否则容易产生无法接收报文或接收到错误报文的现象。
(2)网关能发送LIN 报文但总线上无信号:LIN 收发器TJA1020 的NSLP 引脚为高电平时,方可启动发送器,因此须将PTE2 引脚置为输出脚,且端口置为隐性状态。本文作者创新点:以Freescale公司8位微处理器MC68HC908GZ32为主芯片,对其在汽车CAN/LIN网络中的应用加以了设计。给出了车身网络结构图、CAN/LIN网关电路设计图、报文收发流程以及调试过程中对所遇到的问题的解决方法等。经调试结果表明该GZ32 CAN/LIN网关具有结构简单、性能稳定、实用性强等特点。