CANGPRS无线车载网关的设计与实现

CANGPRS无线车载网关的设计与实现,第1张

1 引言
随着汽车电子技术的不断发展,车上的电子装置越来越多,并与传感器和执行器一起共同组成了许多复杂的电子控制系统。结果连接这些电子装置的电子线路迅速膨胀,布线变得越来越困难,导致了车身重量明显增加,车辆运行的可靠性降低。传统点对点的连接方式已经无法满足现代汽车电子技术发展的要求,多路传输的车载网络技术成为解决这些问题的必然选择。德国BOSCH 公司[1]推出的控制局域网CAN(Controller Area Network)依靠其稳定的性能、低廉的价格和很高的可靠性和实时性,现在已经被广泛地应用于汽车内部网络。CAN总线的采用使汽车内部的信息数据共享成为现实。然而,现在信息数据的共享不仅仅局限于汽车内部,许多数据信息需要与外界进行交换。这些信息主要用于汽车导航、汽车GPS 定位、汽车防盗、汽车远程监控、汽车远程调度和收费等方面。由于汽车可移动性的特点,很多与外界交互的信息需要通过无线传输,所以我们选择具有覆盖面广、接入速度快、按流量计费等优点的通用分组无线业务GPRS(General Packet Radio Service)来承载无线数据通信GPRS 是在GSM 基础上发展起来的一种无线分组交换技术[2],被称为2.5G,最高带宽可达171.2Kb/s,可较好的满足无线通信的要求。
2 总体网络拓扑
总体网络拓扑如图 1 所示,汽车内部的电子控制单元都挂接到CAN 网上,汽车的内部数据信息通过CAN 总线进行传递,而需要与外界交互的数据则通过CAN/GPRS 无线车载网关进行收发。
CANGPRS无线车载网关的设计与实现,第2张500)this.style.width=500;" border=0>

数据经过基站收发信机 BTS(Base Transceiver StaTIon)、基站控制器BSC(Base StaTIon Controller)和GPRS 服务支持节点SGSN(Serving GPRS Support Node)进入GPRS 骨干网;然后再通过GPRS 网关支持节点GGSN(Gateway GPRS Support Node),进入Internet 互联网;并可以通过TCP 或UDP 协议把数据传送到Internet 远程服务器。
3 CAN/GPRS 无线车载网关硬件实现

CAN 控制器选择Microchip 的MCP2510,CAN 收发器选择Philips 的TJA1050 以组成网关的CAN 通信模块。MCP2510 支持CAN 总线V2.0A 和V2.0B 技术规范,通信数率可达1Mb/s,拥有3 个发送缓冲器、2 个接收缓冲器,高速SPI 接口支持0,0 和1,1SPI 模式。TJA1050具有对总线差分信号的收发功能和抗汽车环境下的瞬间干扰等能力。网关的GPRS 接口采用SIMCOM 公司的SIM300 GSM/GPRS 模块,该模块可为GSM 语音、短消息和GPRS 上网等业务提供无线接口。采用6 脚SIM 卡座来连接SIM 卡。网关的硬件结构如图2 所示。

CANGPRS无线车载网关的设计与实现,第3张500)this.style.width=500;" border=0>

在实际硬件连接时,S3C2410 的SPI 接口与MCP2510 的SPI 接口直接相连。MCP2510的TXCAN、RXCAN 引脚分别与TJA1050 的TXD、RXD 引脚相连,而TJA1050 的CANH和CANL 引脚分别接到CAN 总线的CANH 线和CANL 线上。因为S3C2410 的UART 口并没有引出DCD、 DTR、DSR 和RI 信号引脚,要通过SIM300 无线联网,最好使用全部的信号引脚,所以我们使用PHILIPS 的SC16C550 从S3C2410 上扩展出标准的UART 接口与
SIM300 的UART 接口进行连接。CAN/GPRS 网关主要通信模块的硬件电路原理图如图3 所示。
CANGPRS无线车载网关的设计与实现,第4张500)this.style.width=500;" border=0>

4 CAN/GPRS 无线车载网关软件实现
4.1 ARM-Linux *** 作系统移植.使用韩国 MIZI 公司开发的VIVI 作为bootloader、选择2.6 内核的ARM-Linux 作为嵌入式 *** 作系统,并用busybox 制作Linux 的根文件系统。在K9F1208 NAND Flash 芯片上存储区域的划分如表1 所示。


CANGPRS无线车载网关的设计与实现,第5张500)this.style.width=500;" border=0>

4.2 ARM-Linux 下SPI 驱动程序编写
使用 S3C2410 自带的SPI 通道0 与MCP2510 进行通信,其SPI 驱动程序流程[3]如下:
(1)写SPPRE0 寄存器,设置波特率。
(2)写SPCON0 寄存器,设置数据传输为0,0SPI 模式。
(3)向SPIDAT0 寄存器写10 次0xFF,以初始化MCP2510。
(4)设置GPIO 引脚,用来充当片选,设定低电平以激活MCP2510。
(5)检查SPSTA0 寄存器的发送状态位REDY 是否为1,若是,则可以向SPTDAT0 寄存器写数据并发送出去。
(6)SPCON0 寄存器的TAGD 不使能,向SPTDAT0 寄存器写入0xFF,在确认REDY 有效后,可从SPRDAT0 寄存器中读数据;TAGD 使能,确认REDY 后,也可从SPRDAT0 寄存器中读数据。
(7)设置GPIO 引脚,信号设为高电平,片选不使能。
4.3 ARM-Linux 下CAN 驱动程序编写
因为 CAN 应用层协议是基于CAN2.0B 技术规范设计的,所以通信报文采用CAN2.0B扩展帧格式。
初始化:(1)发送0xc0 复位指令,MCP2510 复位;(2)进入配置模式,设置CAN 总线波特率,关中断;(3) 设置屏蔽寄存器RXM(0、1)SID(L/H)、RXM(0、1)EID(8/0)和滤波寄存器RXF(0~5)SID(L/H)、RXF(0、1)EID(8/0)并启动;(4)设置CAN 设备为普通模式并切换到正常模式;(5)清空接收和发送缓冲区。(6)开启接收或发送缓冲区,开启中断。发送报文:(1)写标识符寄存器TXB(0~2)SID(L/H)、TXB(0~2)EID(8/0);(2)向发送缓冲器数据长度寄存器TXB(0~2)DLC 写入要发送的报文长度;(3) 写数据时,需依次向MCP2510 发送0x02 写指令、发送缓冲器数据寄存器TXB(0~2)DM 的8 位地址码和需要发送的报文数据;(4)必须进行发送有效性检测,即:检测发送缓冲器控制寄存器TXB(0~2)CTRL 的TXREQ 位。为1 时,说明正在发送报文,须等待;当此报文发送完毕后,该位将被自动清零,这时才可写入下一个将要发送的报文数据。接收报文:(1) 向MCP2510 发送0xA0 状态读指令,并不断检测中断标志寄存器CANINTF,当发现RX(0、1)IF 位为1,说明接收缓冲器已收到报文;(2)这时可从接收缓冲器标识符寄存器中读出帧的ID,从接收缓冲器数据长度寄存器RX(0、1)BDLC 读出收到的报文长度;(3)读数据时,需依次向MCP2510 发送0x03 读指令、接收缓冲器数据寄存器RXB(0、1)DM 的8 位地址码后MCP2510 才会将数据通过SO 引脚发送出来。读完数据,RX(0、1)IF 位需清零。
4.4 ARM-Linux 下串口驱动程序修改及加载
因为我们使用的是与 16c550 寄存器兼容的UART 控制器芯片SC16C550,所以需要加载其在Linux 下的驱动程序serial_8250.c。但SC16C550 芯片是通过外部总线和S3C2410 微处理器连接的,所以在驱动程序的serial8250_isa_init_ports 函数中需加入对SC16C550 芯片所在Bank 空间的初始化,包括设置读/写时序、速度和总线宽度等信息[4]。
4.5 ARM-Linux 下GPRS 联网
GPRS 通过PPP(Point-to-Point Protocol,点对点协议)来完成联网。PPP 是在直接连接的串行链路上创建和运行IP 网际协议或其他网络协议的一个方案。在ARM-Linux 下对PPP的支持需要内核和应用程序配合管理。对于Linux2.6 内核,在配置内核时需要选择对PPP的支持,如:在Network device support 菜单下,选择支持PPP 协议、PPP 异步/同步串口通信和PPP 压缩。此外,还需要移植Linux 下PPP 的应用程序工具包,即把交叉编译后得到的pppd、chat 程序加入根文件系统。在根文件系统的/etc/ppp 目录下,还需编写3 个脚本文件:opTIons(pppd 配置脚本)、gprs-connect(pppd 连接脚本)、gprs-disconnect(pppd 断开脚本)。在opTIons 脚本中需指定串口控制台设备/dev/ttse/0、连接波特率115200、连接和断开脚本的存放路径; 在gprs-connect 脚本中运行chat 程序, 并指定APN 接入点, 如:'AT+CGDCONT=1,"IP","CMNET","",0,0'和ISP 呼叫号码:'ATD*99***1#'等。这样系统启动
后,直接使用pppd &命令即可实现GPRS 无线接入互联网。
4.6 CAN 应用层协议与UDP 或TCP 协议转换
因为 GPRS 网络是建立在TCP/IP 协议基础上的,所以通过GPRS 网络与Internet 远程服务器通信可以使用UDP 或TCP 协议。由于S3C2410 上不仅移植了Arm-Linux *** 作系统,其本身已支持TCP/IP 协议,而且我们也把CAN 的应用层协议加载了上去。所以在网关上无线发送数据时,只需将汽车CAN 网上的CAN 数据包数据域中的数据加上UDP 或TCP包头即可发送出去;当在网关上无线接收数据时,只需去掉UDP 或TCP 数据包的包头,得
到的数据可以遵照CAN 应用层协议的报文格式向CAN 网上发送。协议转换如图4 所示。

CANGPRS无线车载网关的设计与实现,第6张500)this.style.width=500;" border=0>

4.7 心跳程序的实现
因为 CAN/GPRS 无线网关与Internet 远程服务器通信时,可能会出现连接的异常情况,所以需要使用心跳程序来检测异常情况的发生,并通过心跳程序重新拨号来保证无线通信链路的正常连接[5]。我们可以定时Ping 远程服务器,若能Ping 通,则表示无线通信链路工作正常;若多次无法Ping 通,则必须断开连接,重新拨号。
5 结论
本文详细介绍了 CAN/GPRS 无线车载网关的实现,所实现的网关在实验通信网络中能较好地完成汽车内部CAN 网数据信息与外界的交互任务,并能长时间稳定运行,基本上达到了工作要求。
本文作者创新点:在CAN/GPRS 无线车载网关上能成功地运行ARM-Linux 嵌入式 *** 作系统、心跳程序和底层硬件驱动程序,完成了CAN 应用层协议与TCP 或UDP 协议的转换,使得汽车内部CAN 网能与外界进行无线数据通信。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2429032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-02
下一篇 2022-08-02

发表评论

登录后才能评论

评论列表(0条)

保存