Issuu on Google+

Scientific Journal of Control Engineering February 2013, Volume 3 Issue 1, PP.21-26

CAN Bus Extension of the Dynamic Display Module of a Millimeter Anti-Collision Radar Liyu Tian#, Chen Zheng, Chenglin Xiu, Fangfang Fan, Jun Zhou School of Information and Electronics, Beijing Institute of Technology, Beijing 100081, China #

Email: tianliyu@bit.edu.cn

Abstract The dynamic display module, an essential part for auto anti-collision radar system, depends on the CAN bus to realize the communication with the front end of the auto anti-collision radar system as a component of the automotive electronics system. This article describes an embedded system approach based on ARM11 (with S3C6410 as the main control chip) as the core of hardware platforms, with Linux operating system as the software platform for the auto anti-collision radar dynamic display module. We expand the MCP2515 CAN bus-based architecture on the traditional SPI subsystem, and realize the data communications of auto electronic system in the embedded systems. We also present the specific hardware circuit design and implementation of our embedded system platform based on Linux. Keywords: Auto Anti-Collision Radar; Dynamic Display Module; CAN Bus; S3C6410 Embedded Platform

毫米波防撞雷达动态显示模块的 CAN 总线扩展* 田黎育,郑晨,修成林,樊芳芳,周军 北京理工大学 信息与电子学院,北京 100081 摘

要:汽车防碰撞雷达动态显示模块是汽车防碰撞雷达系统中的一个必要组成部分,其作为汽车电子系统的一部分,

与汽车防碰撞雷达前端的通信需要依靠汽车电子系统的 CAN 总线。本文介绍了一种基于 ARM11(主控芯片 S3C6410) 为核心的硬件平台、以 Linux 操作系统为软件平台的汽车防撞雷达动态显示嵌入式系统的设计。本系统平台在传统的 SPI 子系统上扩展了基于 MCP2515 的 CAN 总线硬件结构,实现了嵌入式系统在汽车电子系统内的数据通信,并阐述了基于 Linux 的嵌入式系统平台的具体硬件电路设计与实现。 关键词:汽车防碰撞雷达;动态显示模块; CAN 总线;S3C6410 嵌入式平台

引言 汽车防撞雷达主要用于车距检测,以减少交通事故。未来汽车防撞雷达会向着路车通信和车间通信 发展 [1,2] 。汽车防撞雷达的显示终端是汽车防撞雷达的重要组成部分,承担的主要任务包括:雷达原始 数据处理,目标及其相关信息显示,雷达状态控制,人机交互等 [3-5] 。针对于汽车防碰撞雷达系统的特 点,动态显示技术的要求有三:一是实时性,要求能够把信息实时传输给驾驶员,让驾驶员在最短的时 间内能够做出判断,减小交通事故的发生概率;二是人机界面要友好,能让驾驶员尽快的从动态显示的 消息中得到信息;三是作为汽车电子中的一部分,动态显示模块必须兼容汽车内部的数据传输总线。 CAN 总线控制器是控制器局域网络(Controller Area Network, CAN)的简称,是二十世纪八十年代 初德国 Bosch 公司为解决现代汽车中众多电控单元(ECU)之间的数据交换而开发的一种串行通信协议, *

本文得到编号为 2009A090100024 汽车主动防碰撞控制系统研发及产业化,以及编号为 20103A277 基于多传感器信息融合和 人工智能的汽车主动防撞技术研究的资助。 - 21 http://www.sj-ce.org


是目前汽车电子领域的标准总线。因此,汽车防撞雷达系统动态显示模块需要兼容 CAN 总线,才能较 好的达到汽车主动防碰撞雷达系统的要求。 本文主要研究汽车防碰撞雷达动态显示模块对 CAN 总线兼容的原理,并且对其工程实现过程进行了 叙述。工程实现是基于 S3C6410 的硬件平台和 Linux 软件平台,采用 S3C6410 作为硬件平台的核心主 要是考虑到其体积小、性能高、集成度高、功耗小的特点,非常适合于车载嵌入式系统的应用。由于 S3C6410 本身不支持 CAN 总线,所以通过使用 SPI 总线扩展 MCP2515 CAN 总线控制器的方法实现了 汽车防撞雷达动态显示模块与 CAN 总线兼容,方法中包括硬件部分和软件部分。该方法使汽车防撞雷 达动态显示模块有机的嵌入了汽车电子系统中,一方面可以保证汽车防撞雷达前端数据能够可靠有效的 流向动态显示模块,另一方面动态显示模块也可以获取汽车内部各种状态信息,为汽车防撞雷达动态显 示模块的功能扩展提供了基础。具有 CAN 总线通信模块的动态显示模块与 CAN 总线上其他节点通信的 系统结构如图 1 所示。

图 1 动态显示模块与 CAN 总线通信系统结构图

SPI 总线与 CAN 总线系统概述

1

1.1 SPI 总线子系统 1.1.1

SPI 总线概述

SPI 总线是串行外设接口总线,工作于主从方式,通常由一个主设备和一个或多个从设备组成,一 般需要 4 根线进行通信,但在单向传输时或者硬件复用两根数据线的情况下使用 3 根也可以。在本系统 中所使用的 2.6.38 版本 Linux 内核中已添加了对 SPI 总线的驱动支持。SPI 的驱动架构分为硬件抽象 层、平台依赖层和用户接口层 [6][7] 。根据系统平台设备模型的设计思想,设备和其对应的驱动程序分别 挂载在同一条总线上。本设计中用 s3c6410 芯片支持两个 SPI 总线控制器;每个 SPI 总线控制器支持多 个从设备,从设备之间需要用片选信号区分;每个从设备也需要设置其特定的参数,比如时钟信号和数 据传送的模式参数等。 1.1.2

Linux 系统对 SPI 子系统的支持

在 Linux 内核中,对 SPI 子系统的驱动描述包括两个部分:片内 SPI 控制器驱动和片外 SPI 设备驱动。 (1) SPI 控制器驱动 片内 SPI 控制器驱动继承了 Linux 内核的 platform 平台设备的设计思想。在 2.6.38 版本的 Linux 内 核中,已经包含了对 SPI 总线控制器的设备和驱动程序的支持,内核中提供的 SPI 总线控制设备结构体 - 22 http://www.sj-ce.org


s3c64xx_device_spi 和设备驱动结构体 s3c64xx_spi_driver,可以作为研究的实例。由于 2.6.38 版本的 Linux 内核对 SPI 控制器已经有了比较完善的支持,所以本着“效率优先”的原则,本文不再对 SPI 控 制器的驱动程序进行详细分析,而是直接在内核编译的时候将 SPI 总线控制器作为内核的模块一同编 译,编译完成的 Linux 内核便可提供对 SPI 总线控制器的支持。 (2) SPI 设备驱动 不同于 S3C6410 的片内集成的标准化设备,片外 SPI 设备千差万别,具有高度定制化的特点,所 以在 Linux 内核中一般不会直接提供设备的驱动,因此需要研究 SPI 设备的驱动结构。以下是片外 SPI 设备的定义的几个关键的结构体: spi_device,这个结构体是用于描述挂载到 SPI 总线上的片外设备的基本特性,例如挂载在哪条 SPI 总线上,片选信号、中断信号、设备工作频率等。这个结构体是由 SPI 子系统根据 spi_board_info 结构 体自动生成的,所以用户在定义自己的设备驱动的时候只需要关注 spi_board_info 这个结构体即可,以 下是 spi_board_info 的定义: struct spi_board_info { char

modalias[SPI_NAME_SIZE];

const void void

*platform_data;

*controller_data;

int

irq;

u32

max_speed_hz;

u16

bus_num;

u16

chip_select;

u8

mode;

}; spi_driver 是描述 SPI 从设备驱动程序的结构体,对于某个特定的设备,需要针对其功能特性编写 特定的设备驱动程序。结构体中的函数指针指向具体的操作函数。spi_driver 的定义如下: struct spi_driver { const struct spi_device_id *id_table; int

(*probe)(struct spi_device *spi);

int

(*remove)(struct spi_device *spi);

void

(*shutdown)(struct spi_device *spi);

int

(*suspend)(struct spi_device *spi, pm_message_t mesg);

int

(*resume)(struct spi_device *spi);

struct

device_driver driver;

};

1.2

CAN 总线子系统 如前所述,汽车防撞雷达系统动态显示模块需要兼容 CAN 总线,才能较好的满足汽车主动防碰撞

雷达的系统要求。在本设计中,CAN 总线完成动态显示模块中设备间通信的任务。但是本设计中选用 的 ARM 嵌入式芯片 S3C6410 不支持 CAN 总线,所以需要为 S3C6410 扩展 CAN 总线接口。即将一个 CAN 总线控制器芯片连接到嵌入式开发平台上。由于汽车防撞雷达动态 显示模块的使用环境空间狭 小,所以设备要满足小型化的要求。因此在制备 PCB 电路板的时候,采用连线少、布线简单的 SPI 总 线进行 CAN 总线扩展。决定使用 MCP2515 芯片作为 CAN 总线接口芯片 [8] 。 - 23 http://www.sj-ce.org


MCP2515 是 Microchip 公司的一款独立控制器局域网络(Controller Area Network, CAN)协议控制 器,支持 CAN V2.0B 技术规范,该器件由 CAN 模块、控制逻辑和寄存器及 SPI 协议模块三部分组 成。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515 自带的两个验收屏蔽寄存器和六个 验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515 与 MCU 的 连接是通过业界标准串行外设接口 SPI 来实现的。MCP2515 器件结构图如下图 2 所示:

图 2 CAN 总线协议控制器 MCP2515 的结构框图

汽车防撞雷达动态显示模块 CAN 总线扩展的工程实现

2

2.1 CAN 总线控制器在嵌入式平台上的上的扩展 MCP2515 作为一款独立的 CAN 总线控制器,即其设计可与许多单片机的串行外设接口(SPI)直接 相连,支持配置和正常两种运行模式。工作时,器件首先进入配置模式,经正确 配置后进入正常运行 模式。外部数据和命令在 SCK 时钟信号的上升沿通过 SI 引脚传送到 MCP2515 中,MCP2515 的数据 在 SCK 的下降沿通过 SO 引脚传送出去。在进行任何操作时,CS 引脚都必须保持为低电平。CS 引脚 被设置为低电平后,MCP2515 希望收到的第一个字节是指令/命令字节。这意味着 CS 引脚必须先拉升 为高电平然后再降为低电平以调用另外一个命令。 将 MCP2515 通过 SPI 总线连接到 S3C6410 上的操作分为以下两个层面: (1)硬件上,考虑 MCP2515 与 S3C6410 的硬件连接,MCP2515 与 CAN 总线的连接,以及 MCP2515 的外围电路设计; (2)驱动层面,考虑将 MCP2515 作为设备添加到 Linux 设备驱动系统中。 2.1.1

CAN 总线控制器的电路设计

将 CAN 总线控制器 MCP2515 连接到嵌入式平台主芯片 S3C6410 的电路如下图 3 所示。电路图中 RXCAN 和 TXCAN 是与 CAN 总线通信的接口;SPIMOSI、SPIMISO、SPICLK、SPICS、INIT 是与 S3C6410 通信的 SPI 总线接口。 可见 MCP2515 的外围电路较简单,有两点需要在设计的时候关注:一是需要加入一个晶体振荡器作为 时钟信号;二是:CAN 总线控制器:MCP2515 与 CAN 总线通信的接口 TxCAN 和 RxCAN 因电气标准不同 - 24 http://www.sj-ce.org


不能直接连接到 CAN 总线上。因此,需要通过一个 MCP2551 芯片进行电平转换再连接到 CAN 总线系统上 [10]

,具体电路图如下图 4 所示。

图 3 CAN 总线控制器 MCP2515 与嵌入式系统主控

图 4 MCP2551 外围电路

芯片连接的外围电路

CAN 总线控制器驱动程序编写

2.1.2

正如在 1.1 节所叙述的,MCP2515 作为 SPI 总线子系统下挂载的一个从设备,在软件层面上需要完成的 任务包括两个部分:设备的描述和设备驱动描述,对应的结构体为 spi_device 和 spi_driver。 根据 Linux 对 SPI 总线子系统的描述,为了构建 MCP2515 的 spi_device,需要编写 MCP2515 的 spi_board_info,这些代码需要添加在 S3C6410 嵌入式平台在移植 linux 系统的平台支持文件里[11]。以下是一 个描述 MCP2515 的 spi_device 结构体样例: static struct spi_board_info spi_board_info[] = { { .modalias = "mcp2515", .platform_data = &mcp251x_info, .irq = IRQ_EINT13, .max_speed_hz = 2*1000*1000, .chip_select = 0, } 在上述结构体中,从设备的名字定为 MCP2515;从设备挂载的总线编号为 0,也就是第一条 SPI 总 线;chip_select 设为 0,因为只在 SPI 总线上挂载了一个设备;max_speed_hz 为从设备运行的最大速率;irq 指明设备使用的中断信号线。 MCP2515 设备驱动结构体继承了 spi_driver 结构体。以下是 MCP2515 的驱动程序结构体的具体定义: static struct spi_driver MCP2515_driver = { .probe = MCP2515_probe, .remove = MCP2515_probe, .driver = { .name = "MCP2515", - 25 http://www.sj-ce.org


.owner = THIS_MODULE, }, }; 以上结构体的核心函数有 MCP2515_probe(),用于将 MCP2515 初始化,MCP2515_remove()用于停用 MCP2515 设备,这两个函数的函数指针包含在 spi_driver 结构体中,MCP2515 的 spi_driver 结构体中还定义 了该驱动对应的 SPI 从设备。CAN 总线控制器 MCP2515 设备驱动结构体中具体的函数定义完成后,还要实 现驱动的注册和注销。驱动的注册和注销使用 spi_driver_register()和 spi_driver_unregister 实现,这两个函数 已经包含在 spi 子系统中,不需用户自己定义。

3

总结 本文对汽车防碰撞雷达动态显示模块在汽车电子系统中的通信问题进行研究和分析,尤其是针对动态

显示模块对 CAN 总线的支持进行了研究。针对基于 S3C6410 和 Linux 的嵌入式系统进行了 CAN 总线扩展 分析,并且给出了实现方法。 对于该平台的 CAN 总线扩展主要分为硬件和软件两个层面,硬件上着重于通过 S3C6410 的 SPI 总线连 接 CAN 总线控制器 MCP2515,MCP2515 与 CAN 总线的连接,以及 MCP2515 的外围电路设计;软件层面 上的工作相对比较复杂,主要包括在 Linux 系统下对 SPI 子系统的驱动程序结构解析及基于 SPI 子系统对 MCP2515 的设备和设备驱动编写两大部分。

REFERENCES [1] 朱珂. 汽车防撞系统与毫米波雷达[J]. 轻型汽车技术, 第四次江苏科技论坛——汽车制造分论坛, 2003(10)总 170 [2] 毫米波雷达变身通信终端前途未卜, 应用之路尚待大规模实证验证[J]. 中国科技信息, 2006(9) [3] 齐越. 基于计算机的雷达显示系统设计[D]. 2008, 大连海事大学: 大连 [4] 李兆龙. 毫米波汽车防碰撞雷达[D]. 硕士论文, 东南大学, 2002 [5] 黄文奎. 毫米波汽车防碰撞雷达的设计与实现[D]. 博士论文, 中国科学院上海微系统与信息技术研究所, 2006 [6] 程昌南. ARM Linux 入门与实践[M]. 北京: 北京航空航天大学出版社, 2008. 210-301 [7] 石秀民, 魏洪兴. 嵌入式系统原理与应用——基于 XScale 与 Linux[M]. 北京: 北京航空航天大学出版, 2007: 77-89 [8] MCP2515.pdf-Stand-Alone CAN Controller With SPI Interface, MCP2515 中文数据手册, http://www.alldatasheet.cn/down/ microchip/34.html [9] 陈雄威. 基于 CAN 控制器 MCP2515-I/SO 的模拟 SPI 串口通信的应用[J]. 电脑知识与技术, 2009 年 26 期 [10] 翟淳. 基于 MCP2515 的 SPI 接口 CAN 总线控制器的软件设计[J]. 中国科技博览, 2010 年 15 期 [11] 李貌, 秦霆镐, 闫世晓. MCP2515 在 CAN 总线系统智能节点的应用[J]. 微计算机信息, PKU, 2005 年 7 期

【作者简介】 1

田黎育(1978-),男,汉族,博士,

2

郑晨(1988-),男,汉族,研究生,研

2003 年 3 月毕业于北京理工大学电子工

究方向为低成本民用雷达系统、高性能

程系信号与信息处理专业,研究方向为

并行运算在通信系统中的应用和军用通

嵌入式系统和 DSP 软件开发,FPGA 和

信系统设计,2011 年毕业于北京理工大

ASIC 设计。

学电子工程系,2011 年与北京理工大学

Email: tianliyu@bit.edu.cn

通信技术研究所攻读硕士学位。 Email: mz3721@126.com

- 26 http://www.sj-ce.org


CAN Bus Extension of the Dynamic Display Module of a Millimeter Anti-Collision Radar