CANFD与TCP/IP网关的设计与实现
2019-12-05周琦龚元明
周琦 龚元明
摘 要:目前汽车CAN总线网络负载日益增加,CAN FD总线作为新技术,在未来有可能取代CAN总线而成为新一代汽车总线网络。针对汽车总线网络和以太网互通互联的问题,在研究CAN FD协议的基础上,本文设计了以ATMEL公司的SAME54系列单片机作为主控制器的CAN FD-TCP/IP网关。该网关以ATA6561作为CAN FD收发器,KSZ8091作为以太网PHY,利用LwIP(Light weight Internet Protocol)协议栈将TCP/IP和CAN FD数据进行协议转换,实现CAN FD网络和终端互联网设备的信息交互,该网关工作正常,能够为新一代网联汽车搭载CAN FD技术提供参考。
关键词: CAN FD总线;以太网;网关;车联网
【Abstract】 At present, the load of automotive CAN bus network is increasing. As a new technology, CAN FD bus may replace CAN bus in the future and become a new generation of bus network. Aiming at the problem of interconnecting the bus network and Ethernet, based on the research of CAN FD protocol, this paper designs a CAN FD-TCP/IP gateway with ATMEL's SAME54 series MCU as the main controller. The gateway uses ATA6561 as the CAN FD transceiver, and KSZ8091 as the Ethernet PHY. The LwIP (Light Weight Internet Protocol) protocol stack is used to convert the TCP/IP and CAN FD data to realize the information exchange between the CAN FD network and the terminal Internet device. The gateway works fine and can provide reference for the new generation networked car with CAN FD technology.
【Key words】 CAN FD bus; Ethernet; gateway; vehicle networking
0 引 言
随着电子、半导体、通讯等行业的快速发展,汽车电子智能化的需求也愈加强烈,消费者希望驾驶动力性、舒适性、经济性以及娱乐性更强的汽车。汽车制造商为了提高产品竞争力,将越来越多的电子控制系统加入到汽车控制中。受限于CAN传输速率,通常汽车高速CAN系统的实际使用速率为500 kbit/s[1]。ECU的大量增加使总线负载率急剧增大以致造成网络拥堵,较高的总线负载率可能会增大报文延迟、降低系统的扩展性,尤其对于实时性要求较高的安全系统,高负载率甚至可能影响汽车行车安全[2]。CAN总线最多只能传输8字节的特点又造成多帧传输,使得通信效率低下。为此,德国博世公司对CAN总线数据链路层进行改进,启动了CAN FD开发[3]。CAN FD凭借总线带宽和有效载荷的优势,以及向下兼容CAN 总线的特点[4],在未来可能成为汽车总线架构中的应用解决方案。本文运用CAN FD技术,结合TCP/IP协议,设计网关对2种通信协议进行转换,在智能网联汽车发展的背景下,可实现汽车总线网络和互联网终端设备的信息交互。 对此拟展开研究论述如下。
1 CAN FD总线介绍
由于汽车行业电子单元逐渐增多,传统CAN总线带宽难以满足要求,改进后的CAN FD克服了CAN总线的限制,传输速率可达5 Mbit/s,并且有效載荷(数据场)可扩展至64字节。
CAN FD数据链路层如图1所示,分为仲裁场和数据场。其中,仲裁场通信速率和传统CAN一致,在数据场通信速率可达5 Mbit/s。仲裁场EDL位用来区分是CAN帧、还是CAN FD帧,BRS位区分是否转换可变速率,ESI位表示主被动错误状态。数据场采用新的4位DLC编码表示数据场长度,DLC小于8时与原CAN 总线一致,大于8时有一个非线性增长,直至扩展到64字节。CRC校验以含填充位进行计算,在第一位以及之后每4位添加一个填充位加以分割,该填充位对上一位取反,作为格式检查。由于CAN FD数据场长度有很大变化,CRC生成多项式根据DLC长度来选择,分为CRC_15、CRC_17和CRC_21[5-7]。
2 网关系统硬件设计
系统硬件主要由主控制器、CAN FD收发器、以太网收发器、RJ45网络接口、EEPROM存储模块以及电源模块组成。主控制器采用ATMEL公司的SAME54P20A芯片,该芯片是一款基于ARM Cortex-M4架构的32位处理器,运行时钟可高达120 MHz,RAM存储区达到256 KB,并带有10/100 M以太网MAC和CAN/CAN FD接口,工作电压1.71~3.6 V。所以只需外接CAN FD收发器和以太网收发器即可实现协议转换功能,网关系统结构框图如图2所示。由图2可知,对其中各组成单元的设计解析可做重点阐述如下。
2.1 CAN FD模块硬件设计
CAN FD收发器采用Microchip公司的ATA6561,该收发器符合ISO 11898-1(2015)标准,最快通信速率可达5 Mbit/s,支持低功耗唤醒功能,工作电压5 V。CAN FD和CAN物理层相似,STBY为唤醒引脚,连接到SAME54输出引脚,在CANH和CANL引脚间并联2个60 Ω终端电阻,屏蔽干扰。该模块设计电路如图3所示。
2.2 以太网模块硬件设计
以太网模块主要包括以太网PHY、变压器和RJ45端口,电路设计如图4所示。选用KSZ8091MLX作为以太网PHY,支持IEEE 802.3标准,带有MII接口,工作电压3.3 V。MII规范为端口提供16根引脚,分别为MAC层和物理层之间的发送、接收接口,MDIO和MDC分别是数据线和时钟线。KSZ8091采用25 MHz外部晶振提供时钟信号。RJ45端口选用HALO公司的HFJ11系列,内置网络变压器,简化了设计电路。
2.3 存储模块
系统中存储模块采用ATMEL公司生产的AT24MAC芯片,电路设计如图5所示。AT24MAC是一个2Kb的非易失性存储器(EEPROM),和主芯片MCU采用 I2C两线接口连接,A0、A1、A2用来选择器件地址。存储模块用于存储以太网通信的IP地址、子网掩码和网关地址等参数。
3 软件设计
基于前述网关模型,软件模块主要由3部分组成,分别为:CAN FD网络接口模块、TCP/IP网络接口模块、协议数据转换模块。开发工具为Atmel Start和Atmel Studio。Atmel Start在线生成底层驱动,Atmel Studio加载驱动后进行软件开发。研究可得各部分开发设计内容详述如下。
3.1 CAN FD网络接口模块
3.1.1 CAN FD波特率选择
CAN FD在物理层会进行硬同步和延时补偿,直接由ATA6561收发器完成。波特率设置主要是对位时间进行分配。CAN FD波特率分为仲裁场和数据场两段,仲裁场波特率和传统CAN总线波特率一致,数据场波特率可达5 Mbit/s。一般来说,数据场波特率要大于仲裁场波特率,因此需要分别配置这两段波特率。带CAN FD接口的单片机一般有2套位时间定义寄存器,可采用不同的位时间单位,位时间各段分配比例也可不同。以仲裁场波特率为500 Kbps和数据场波特率为2 Mbps为例,说明CAN FD波特率配置方法。假设CAN FD时钟fsys=12 MHz,仲裁段波特率分频器NBRP=2,相位缓冲段1的NTSEG1=8,相位缓冲段2的NTSEG2=3,同步跳转宽度NSJW=1,仲裁段波特率为:
3.1.2 CAN FD收发程序设计
CAN FD在数据链路层遵循ISO11892-2(2015),作为CAN FD帧格式时必须把EDL位和BRS位置位,相应地,初始化时可在SAME54中使能CCCR寄存器中的FDOE和BRSE位,并对相应波特率寄存器进行操作。CAN FD帧信息封装在结构体中,该结构体包含帧ID、帧类型、帧长度、帧格式以及有效载荷。在发送CAN FD帧时,首先定义好发送缓冲区长度,最大为64字节,写入有正确ID的发送邮箱。在向发送缓冲区发送一个新报文之前,需要检查缓冲区是否空闲,若空闲,则写入数据到发送缓冲区。在接收中断下,接收CAN FD帧时需要设置接收邮箱,邮箱按照ID编号优先级由大到小排列。若邮箱的接收缓冲区满,则读取并保存数据,而后再释放缓冲区。如果具有相同帧ID的新消息被接收,之前的消息会被覆盖。多个邮箱可以被串在一起形成接收缓冲数据。在接收时还可以设置接收过滤器,可选择接收特定ID的报文。CAN FD接收和发送流程如图6所示。
3.2 TCP/IP网络接口模块
SAME54P20A的MAC控制器和PHY芯片KSZ8091构成物理层和数据链路层,本设计采用基于TCP/IP的LwIP协议栈实现网络层和传输层,可在无操作系统的情况下独立运行[8]。LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用。
LwIP协议栈在TCP实现中专门使用一个数据结构来描述一个连接,把这个数据结构称为TCP控制块。TCP控制块包含了双方实现基本通信所需要的信息,如发送窗口、接收窗口、数据缓冲区等[9]。TCP协议实现的本质就是对TCP控制块中各个字段的操作。
TCP编程函数输出流程如下:tcp_write构造数据交互报文,在TCP層由报文段构造函数tcp_enqueue来完成,该函数将TCP数据和首部部分字段填入报文中,并将报文段组织在发送缓冲队列上;tcp_output函数被调用时会把控制块发送缓冲队列上依次取下报文段发送,然后调用tcp_output_segment发送报文段,该函数完成首部剩余字段中确认号、通告窗口的填写,并与IP层的ip_route交互,获得伪首部中源IP地址字段;最后,IP层的发送函数ip_output被调用,组装并发送IP数据报文。
TCP输入流程如下:TCP报文从IP层ip_input函数传递给TCP层tcp_input函数,这个函数是TCP层的总输入函数,为报文段匹配TCP控制块;tcp_process函数完成了TCP状态机的实现,如果检测到报文中有数据,则调用tcp_receive函数,完成TCP中数据接收、数据重组等工作。TCP函数调用流程如图7所示。
TCP服务器建立步骤如下:
(1)调用函数tcp_new()新建一个TCP控制块。
(2)调用函数tcp_bind()绑定本地IP地址和端口号。
(3)调用函数tcp_listen()服务器进入监听状态,等待客户端连接。
(4)调用函数tcp_accept()注册建立连接后的回调函数。
3.3 协议转换模块
CAN FD总线和以太网都遵循OSI模型,协议之间的转换实质就是2种协议的封装和解封装过程。协议转换流程如图8所示。
当CAN FD收发器ATA6561收到数据传入主控制器SAME54P20A时,取出CAN FD帧数据段内容,参考TCP/IP协议格式,将数据段封装到TCP数据包中,依次添加TCP报头、IP报头,然后把打包好的IP数据传送给以太网收发器KSZ8091,添加以太网帧头并发送至以太网。
当有数据帧从以太网端发送过来,首先经过RJ45网络接口送到以太网收发器KSZ8091,KSZ8091随后将数据帧直接传给主控制器SAME54,主控制器会对接收到的以太网数据帧解封装,去除以太网帧头、TCP报头等,得到原始数据信息,然后封装成CAN FD帧格式,经收发器ATA6561的CANH、CANL差分线发送出去。
4 系统功能测试
LwIP协议栈初始化配置时,TCP服务器端口号为6060,IP地址为192.168.0.100,网关地址为192.168.0.1,并开启监听模式。TCP客户端IP地址设置为192.168.0.149,子网掩码255.255.255.0,网关地址为192.168.0.1。网关初始化完成之后,TCP客户端发送和TCP服务器的连接请求,TCP服务器和客户端经过三次握手后建立TCP连接。
打开TCP/IP端网络调试助手,CAN FD端ZCANPRO软件,进行收发测试,如图9和图10所示。以第二条报文为例, CAN FD帧ID为0x281,报文数据为aa 01 02 03 04 05 06 07 08 09 0a 0b,帧类型为标准帧。发送该CAN FD报文后,网络调试助手接收到TCP/IP帧,第一个字节00代表标准帧,01代表扩展帧。第二至第四字节为帧ID,之后为报文数据。通过多次比对,两者收发内容一致,证明该网关能实现CAN FD和TCP/IP帧之间的协议转换,实时性好。
5 结束语
本文基于新兴CAN FD总线技术,研究了CAN FD总线相比于传统CAN总线带来的变化和优势,对CAN FD和TCP/IP协议转换网关进行了软硬件设计,通过测试验证该网关具有良好的可靠性,为整车总线网络和终端网联设备间的信息交互提供设计参考。
参考文献
[1]符晓芬. CAN总线在汽车电气控制中的应用[J]. 电子技术与软件工程, 2017(11):247.
[2]陈曦.CAN总线实时性和可靠性若干问题的研究[D]. 天津:天津大学, 2010.
[3]XIE Yong, HUANG Pengcheng, LIANG Wei, et al. Comparison between CAN and CAN FD: A quantified approach[C]// Proc. of IUCC.Guangzhou, China:IEEE, 2017:1399-1403.
[4]楊福宇. 有关CAN FD的评论[J]. 单片机与嵌入式系统应用, 2012, 12(7):34-36,40.
[5]王伟. CAN FD突破CAN总线应用局限[J]. 电子技术应用, 2015, 41(5):3,13.
[6]ZAGO G M, FREITAS E P D. A quantitative performance study on CAN and CAN FD vehicular networks[J]. IEEE Transactions on Industrial Electronics, 2018,65(5):4413-4422.
[7]CENA G, BERTOLOTTI I C, HU Tingting, et al. Improving compatibility between CAN FD and legacy CAN devices[C]// 2015 IEEE 1st International Forum on Research & Technologies for Society & Industry Leveraging A Better Tomorrow(RTSI). Turin, Italy:IEEE,2015:1-8.
[8]唐文俊, 李维波, 贺洪,等. 一种基于ARM的远程监控系统的设计与实现[J]. 船电技术, 2011, 31(11):1-5.
[9]孙乐鸣, 江来, 代鑫. 嵌入式TCP/IP协议栈LWIP的内部结构探索与研究[J]. 电子元器件应用, 2008,10(3):79-82.