- 1 -
中国科技论文在线
基于 ARM 的网关设计
乔莹,郝丽娜*
作者简介:乔莹(1987年),女,硕士研究生,无线定位
(中国矿业大学信息与电气工程学院,江苏徐州 221008)
摘要:随着嵌入式技术的迅速发展,以及网络技术的日益成熟和普遍应用,具有网络连接功5
能的嵌入式系统得到广泛的应用。本文分析了 CAN总线和以太网的数据传输技术,利用已
有的高性能嵌入式 ARM9硬件开发平台,研究了 CAN总线网络与以太网互连的实现方案。
该网关方案通过分析以太网和 CAN 总线的帧格式,从而实现了以太网和 CAN 总线网络互
连,最终达到将基于 TCP/IP 协议的计算机网络设备与基于 CAN 总线协议的底层现场网络
设备连通的目标。 10
关键词:网关;以太网;CAN总线;TCP/IP协议;协议转换
中图分类号:TP393
The Design of Gateway Based on ARM
QiaoYing, HaoLina 15
(School of Information and Electrical Engineering, CUMT, Xuzhou, 221008)
Abstract: With the rapid development of embedded technology ,as well as the increasing matureness
and widespread of network technology,networked embedded system are widely dissertation
analyses the whole data communication technology between CAN bus with Ethernet and gives the
implementation plan between them by using the advanced ARM9 embedded processor with rapid 20
speed,high performance .By analyzing the two networks and implementing the interconnection
communication of computer network based TCP/IP protocol with CAN bus field control network based
CAN protocol ultimately.
Key words: Gateway;Ethernet;CAN bus;TCP/IP protocol;Protocol conversion
25
0 引言
嵌入式系统在工业自动化、国防、运输和航天等领域被广泛应用,但目前大多数嵌入式
系统还处于单独应用的阶段,以MCU为核心,与一些监测、伺服、指示设备配合实现一定
的功能。在一些工业应用中,为了实现多个 MCU 间的信息交流,利用 CAN,RS485 等总
线将MCU组网,但这种网络的有效半径比较有限,有关的通信协议也比较少,而且一般是30
孤立于 Internet 以外的。现今 Internet 己成为社会重要的基础信息设施之一,是信息流通的
重要渠道,嵌入式系统连接到 Internet上,则可以方便、低廉地将信息传送到几乎世界上的
任何一个地方,从而实现远程监控。因此,嵌入式 Internet技术就应运而生,并成为业内的
一大热点。
所谓的嵌入式系统的网络化是将以太网与现场总线两种不同的网络协议进行实时交互,35
从而弥补了现场总线受地域限制,不能充分发挥其组网功效的不足,将两者的优点结合起来,
实现从现场控制到监控、管理、决策等各层次的信息交换和集成,使得远程检测、远程控制、
远程诊断和远程维护变得非常容易。
本文的主要研究内容是利用嵌入式处理器的运算速度快,实时功能强大的特点,运用异
网协议的控制转换策略来实现 CAN[1]和以太网数据交换的功能,以意法半导体公司的ARM940
处理器作为整个系统的控制核心,分析各网络的帧结构找出特定转换的关系,将复杂的协议
- 2 -
中国科技论文在线
转换用软件实现,在较少的硬件支持下,设计出一种适应接入网络变化的多协议转换系统。
1 网关系统结构与硬件结构
网关的系统结构
以嵌入式设计思想为指导,以开放的结构为基础,以稳定可靠为目标进行系统设计。在45
硬件层上以意法半导体公司的微处理器 STR912FAW44[2]为核心,向下通过其内部集成的
CAN 控制器与 CAN 总线相连,上层通过网络芯片 STE100P 与以太网相连;在软件层,使
用意法半导体公司提供的软件库实现数据的处理。通过网络与让算机相连可方便的实现
CAN节点的控制和数据的采集。系统逻辑结构如图 1所示。
50
图 1 系统结构图
Fig. 1 The structure of the system
网关的硬件结构
网关的硬件框图如图 2所示。硬件大致可分为 CPU模块、CAN模块、JTAG模块、电
源模块、网络模块,和显示模块。 55
图 2网关的硬件框图
Fig. 2 The hardware of the gateway
60
CPU模块:选用意法半导体的 STR912FAW44微处理器。
CAN模块:CAN数据的收发器在 STR912FAW44内部已集成。在外部加一光电隔离芯
片。
JTAG模块:方便调式。使用 J-link通过 JTAG接中与芯片相接,使用 IAR FOR ARM
可方便的调式程序。 65
- 3 -
中国科技论文在线
电源模块:提供三种电源。没有标准 5V 电源时转化为 5V,然后通过 AMS117把五伏
电源转化为 和 的电源。
网络模块:网络数据收发用 STE100P与 STR912FAW44相连。
显示模块:用于显示数据信息。
2 嵌入式网关下位机的实现 70
本设计只涉及 TCP/IP协议与 CAN协议转换。系统的数据处理量相对较小。只需要进
行网络数据的收发和 CAN总线数据收发。在设计中没有移植嵌入式操作系统,而是在基于
意法半导体提供的软件库的基础上进行设计。因涉及网络数据的处理需要在设计中嵌入一套
嵌入式 TCP/IP协议栈[3]。在本设计中尝试移植了 LwIP协议栈。以 IAR Embedded Workbench
for ARM 为开发平台,通过 J-Link仿真调试程序。 75
系统的初始化
本设计的所有程序设计都是基于 ST的软件库,在系统的外设初始化时首先需写微处理
器的启动代码。在启动代码里一般包括对各 FLASH/RAM 的初始化、堆栈指针的初始化和
最后指向 C语言程序的 main()函数处。在 ST提供的例程中就有已写好了的启动代码,所以
省去用汇编语言写启动代码的工作。其启动代码的文件名为 。还有一个
的汇编文件用于产生中断时指向对应的 C语言函数。
系统的初始化包括以下几个方面:系统时钟的配置、处理器各引脚的初始化、相应中断
的开启、定时器配置、网络模块的配置和 CAN外设的初始化。系统的初始化流程如图 3所
示。
85
图 3 系统的初始化流程图
Fig. 3 The flow chart of the system initialization
- 4 -
中国科技论文在线
嵌入式 TCP/IP协议栈的移植
设计中需要把数据在以太网和 CAN总线之间转换,其中网关最为关键的部分就是网络
数据的收发。在微处理器上只能收到二进制数据,处理器需通过编程从以太网的数据帧中剥90
离出用户的数据。TCP/IP协议[4]是一套复杂的网络协议,自已实现工作量太大。现在已有很
多公司、组织已写好的嵌入式协议栈,而且有几种开源的协议栈。比如常见的嵌入式协议栈
有 BSD TCP/IP协议栈、uC/IP、LwIP、uIP等。本设计中尝试了 LwIP协议栈的移植。
Lwip的移植
(1)移植与配置 95
Lwip 嵌入式协议栈提供两种编程接口(API):低层次的原始接口(low-level "core" /
"callback" or "raw" API)和高层次的有序接口(higher-level "sequential" API)。高层次的编程接
口一般应用于有嵌入式操作系统的系统。本设计中的所有程序是基于 ST的软件库,属于没
有嵌入式操作的系统。所以将用 lwip的低层编程接口进行移植。
从 lwip的官方网站下载 lwip协议栈的源码。移植 lwip用到源文件如图 4示。 100
图 4 lwip移植时 IAR工程目录
Fig. 4 The subject directory chart of Lwip
配置好 lwip协议后,下一步通过编程把底层网络数据收发函数与 lwip协议相关连。即105
网络收发器得到数据交给 lwip 协议,lwip 协议要发送的数据能交给网络收发器。程序的编
写在 文件里。在 文件里没有给出具体的程序,但有较详细的说明。在
源程序里有几个函数需要跟据硬件平台进行修改。这些函数是 void
ethernetif_input(struct netif *netif)、err_t ethernetif_init(struct netif *netif)、void arp_timer(void )、
err_t ethernetif_output(struct netif *netif, struct pbuf *p,struct ip_addr *ipaddr)、 void 110
ethernetif_input(struct netif *netif)、err_t ethernetif_init(struct netif *netif)。
完成与硬件有关的移植后,最后依照 lwip官方提供的文档 编写主函数。在主
函数中先对 lwip进行初始化,设定网关的 IP地址。网关的 IP地址设定为 ,子
- 5 -
中国科技论文在线
网掩码为 ,默认网关为 。
随后建立 lwip 网络界面,然后启动其它应用程序。最后进入无限循环查询是否有网络115
数据达到。lwip的主程序清单如下
void LwipMain(void)
{
struct netif ethif;
struct ip_addr ipaddr,netmask,gw; 120
#ifdef DEBUG
debug();
#endif
mem_init();
memp_init(); 125
pbuf_init();
netif_init();
ip_init(); // 初始化 IP模块
tcp_init(); // 初始化 TCP模块
udp_init(); 130
IP4_ADDR(&ipaddr, 192, 168, 0, 10);// IP地址
IP4_ADDR(&netmask, 255, 255, 255, 0);// 子网掩码
IP4_ADDR(&gw, 192, 168, 0, 1); // 网关
netif_add(ðif, &ipaddr, &netmask, &gw,
NULL, ethernetif_init, ip_input);// 建立 LwIP网络界面 135
netif_set_default(ðif); // 设为默认网络界面
netif_set_up(ðif); // 启动网络界面
httpd_init(); // 初始化 HTTP模块
udpservice_init(); //初始化 UDP模块
while(1) 140
{
ethbuf_len = ENET_HandleRxPkt(ethbuf);//接收来自网络的数据包
if(ethbuf_len > 0) // 有数据包被接收?
{
ethernetif_input(ðif); // 是,将数据包交给 LwIP处理 145
}
}
}
(2)功能验证
用交叉网线把开发板和计算机相连接,并设定计算机的 IP 地为 、子网掩码150
为 。打开Windows 命令行界面输入 ping 测试目的地址是否可达。
- 6 -
中国科技论文在线
得到的结果如图 5所示。
图 5 Lwip ping后的结果
Fig. 5 The consequences of ping 155
图 6 Lwip ping后 wireshark 捕捉到的数据
Fig. 6 The captured data of wireshark
160
分析图 6中数据可以得出:开始计算机的 ARP缓存中没有 的MAC地址。
计算机通过 ARP协议在网络上发送一个 ARP请求分组。从图 6中第二行数据中可以看出,
网关收到 ARP请求分组后返回了一个 ARP响应分组。计算机收到 ARP响应分组后才开始
利用 ICMP协议开始 ping。结合图 5和图 6可以看出 lwip协议的 ICMP和 ARP协议已经实
现。 165
打开浏览器输入 尝试打开一个网页。同时打开 wireshark 捕捉网络数据。
图 7为嵌入式 webserver的主页。图 8为服务器找不到文件是打开的网页。
图 7 基于 lwip协议栈的嵌入式服务器的页面 170
Fig. 7 The page of web server based on Lwip
- 7 -
中国科技论文在线
图 8 基于 lwip的 web server找不文件时打开的网页
Fig. 8 The page of web server not finding files based on Lwip
175
通过以上测试可说明 lwip移植已成功。能够和计算机进行通信。
3 嵌入式网关的上位机软件设计
上位机的总体设计思路:计算机上的程序通过网络发送数据给网关,同时也能收到网关
发给计算机的数据。因计算机只与网关通信,通信的可靠性较高。UDP协议是一个简单的、
面向数据报的无连接的协议。UDP协议在编程上较容易实现。本设计选用 UDP协议进行计180
算机和网关之间的通信。
开发平台用 VS 2008。选用 C#[5]进行开发。C#综合了目前几乎所有高级语言的优点。
C#的设计目的是简化网络应用。使用 C#能够迅速构建基于Windows和 Internet的应用程序
和组件。
上位机软件界面设计 185
在上位机的软件中需要对网络参数(如 IP地址、UDP端口)和 CAN节点进行设置。因 IP
地址和 UDP端口等文本输入框输入的字符为十进制数据、CAN发送的数据内容和 CAN ID
为十六进制数据,而 VS 2008自带的控件 TextBox没有对输入的字符进行限制,因此需要创
建一个继承自 TextBox的控件。
在本设计中,只能输入十进制字符的文本框控件命名为 DecimalTextBox,只能输入十190
六进制字符的文本框控件命名为 HexTextBox。用 ComboBox 控件实现 CAN 参数设定中的
发送格式选择、帧类型选择、帧格式选择和 CAN通信波特率选择。用 ListView控件显示发
送的数据和接收到的数据。用MenuStrip控件提供菜单功能。用 ContextMenuStrip为 ListView
提供右键菜单功能。用 Timer控件提供计时功能。用 Label控件显示说明文字。上位机软件
界面如图 9所示。 195
上位机软件内部实现
上位机软件的关键部分为网络数据的接收和数据发送。网络数据的发送和接收需要互不
影响,因此需要在不同的线程中的实现。本设计中在主线程中进行数据的发送,在另一个线
程中在程序启动时就侦听特定 UDP端口的数据。
为便于与网关通信需要对 UDP数据的格式进行设定。上位机程序发送的 UDP数据的格200
式做如下规定如图 10所示。
- 8 -
中国科技论文在线
图 9 上位机软件界面
Fig. 9 The interface of PC software
205
图 10 UDP网络数据发送的格式
Fig. 10 The format of data when UDP network sending
规定接收的 UDP数据格式如图 11所示。 210
图 11 UDP网络数据的接收格式
Fig. 11 The format of data when UDP network receiving
215
接收的 UDP格式中各字节的编码与发送的编码一致。
当用户点击发送按钮时,通过触发 Button控件的 Click事件进行处理。
程序首先从软件的界面的控件中得到要发送的数据,把数据以图 10所示的格式按顺序
存放在一个数组中。因控件中得到的数据为字符串,ComboBox 控件中的数据通过 switch
语句实现数据的转换、TextBox类型的控件需要通过其各字符的 ASCII码转化为十进制数据220
或十六进制数据。如果所有控件的内容均已填写则调用 UDP 协议 Socket 编程接口中的
SendTo方法发送 UDP数据。通过使用 Timer控件可定时发送多次数据。数据发送后把发送
的数据列出显示在 ListView控件中。Click事件的处理函数的流程图如图 12所示。
网络数据的接收通过创建另一个线程进行。UDP监听的端口为 1986。在主窗口类的构
造函数中对网络进行初始化,然后再启动线程监听指定端口的数据。 225
因 ListView 控件在主进程中创建,在另一个进程中对它进行操作可能引发异常。如果
有两个或多个线程操作同一控件,则可能会迫使该控件进入一种不一致的状态。还可能出现
其他与线程相关的 bug,包括争用情况和死锁。确保程序以线程安全方式访问控件非常重要。
在本设计中参考MSDN上的有关范例进行处理。通过检查 ListView中的 InvokeRequired属
性实现。 230
- 9 -
中国科技论文在线
图 12 Click事件的处理函数的流程图
Fig. 12 The format of data when UDP network receiving
上位机软件功能验证 235
上位软件的网络数据收发的验证,通过Wireshark软件捕捉网络数据进行验证。如图 13
所示:CAN的发送格式设为正常送、帧类型为标准帧、帧格式为数据帧、波特率为 500kbps、
帧 ID为 7EF、数据个数为 8个字节、数据内容为 0x0123456789ABCDEF。只发送单帧数据。
单击发送按钮得到数的结果如图 13所示。用Wireshark软件捕捉到的数据如图 14所示。
- 10 -
中国科技论文在线
240
图 13 单次数据发送界面
Fig. 13 The interface of sending data singly
图 14 单次数据发送网络数据 245
Fig. 14 The data of sending singly
分析Wireshark软件捕捉到的网络数据,最后的十七个字节为用户数据。
对照 UDP 数据编码格式和 CAN 参数设置可知:单次发送数据时软件功能能够实现。
如帧 ID为 0x7EF,捕捉到的网络数据中的 UDP用户数据的第五至八位为 0x000007ef。 250
一次发送多个数据的测试。CAN 的发送格式设为正常送、帧类型为扩展帧、帧格式为
数据帧、波特率为 50kbps、帧 ID 为 1FFFFFF8、数据个数为 8 个字节、数据内容为
0x0123456789ABCDE、一次发送十帧数据、每发一帧帧 ID号增加 2、发送间隔为 100ms。
ListView 控件的背景色设为白色。单击发送按钮得到的结果如图 15 所示。用 Wireshark 软
件捕捉到的数据如图 16所示。 255
从图 15 和图 16 中可知能够一次发送多帧数据。当要发送的 CAN 数据为
0x123456789ABCDE时,不是偶数个字符时把最后一位转为 0x0E;所发得到网络数据中的
最后八位为 0x0123456789ABCD0E。CAN ID每发送一次会自动加 2。
- 11 -
中国科技论文在线
260
图 15 多次数据发送界面
Fig. 15 The interface of sending data together
图 16 多次数据发送时的网络数据 265
Fig. 16 The data of sending together
通过 ListView控件上的右键,对软件的保存功能进行测试。得到的文件如图 17所示。
270
图 17保存数据
Fig. 17 The interface of saving data
- 12 -
中国科技论文在线
从以上测试可以说明上位机软件的数据的发送部分能实现其功能。
4 网关协议转换实现
TCP/IP 协议与 CAN 协议之间的转换[6][7]是嵌入式网关的最关键部分。当上位机发送控275
制信息时,嵌入式网关通过的 RJ45接口送到 STE100P,STE100P在接收和处理完以太网数
据帧后传送给 STR912FAW44,由 lwip嵌入式协议栈对网络数据进行解析。如果是 IP数据
包且目的地址是本网关的 IP地址,则断续分析。若是 ICM包,刚调用 ICMP处理程序。若
是 TCP 数据包,则分析是否是浏览器的请求,如果是通过相应处理程序向上位机发送相应
数据。若收到是 UDP数据包,则 lwip协议解包后把用户数据交给相应程序处理。程序通过280
用户数据对 CAN外设进行初始化后向 CAN总线发送数据。当 STR912FAW44接收到 CAN
总线的数据时,通过处理打包成相应格式。通过 lwip生成网络数据,最后通过 STE100P发
给上位机。上位机软件收到数据后对数据进行处理并显示。
网关中 UDP数据的收发处理
在 lwip初始化时需对 UDP模块进行初始化。初始化时包括绑定指定 IP地址的 UDP端285
口(本设计是 2345端口),设置当 UDP数据到达时调用的处理函数。
UDP初始化程序清单如下:
void udpservice_init(void)
{
struct udp_pcb *upcb; 290
upcb = udp_new();
//绑定任意 IP地址的的 2345端口
udp_bind(upcb, IP_ADDR_ANY, 2345);
//UDP数据的处理函数为 udpservice_recv
udp_recv(upcb,udpservice_recv,NULL); 295
}
当收到指定端口的 UDP 数据时,udpservice_recv()函数对数据进行解析,解析后得到
CAN外设的初始化参数和要发送的数据。通过这些数据对 CAN外设进行设置后把数据发送
到 CAN总线上去。
在 lwip协议栈中,收到的网络数据储存在 pbuf结构体中。pbuf结构体既支持动态内存300
分配保存信息内容,也支持让信息包数据驻留在静态存储区。pbufs 可以在一个链表中链接
在一起,被称作一个 pbuf链。pbufs有三种类型:PBUF RAM PBUF ROM PBUF POOL。
一般收到的 pbufs是 PBUF POOL类型,发送出的 pbufs 是 PBUF ROM 或 BPUF RAM类型。
pbuf在 lwip协议中的定义如下:
struct pbuf { 305
struct pbuf *next;
void *payload;
u16_t tot_len;
u16_t len;
- 13 -
中国科技论文在线
u16_t flags; 310
u16_t ref;
}
pbuf 结构包括两个指针,一个标志字段(next)和一个引用计数(ref)。next 字段指向 pbuf
链中下一个 pbuf的指针。payload指针指向 pbuf中数据的开始位置。len字段包含 pbuf中数
据内容的长度。tot_len字段包含当前 pbuf的长度与在这个 pbuf链中随后的所有 pbufs的 len315
字段之和。flags 字段标识 pbuf 的类型。ref 字段包含一个引用计数。在网络数据经 lwip 协
议处理后送到 udpservic_recv()函数处理时已把以太网首部、IP首部和 UDP首部去除。即此
时得到数据为实际用户发送的数据。函数通过按编码格式进行解码。解码完成后通过 CAN
发送数据。数据发送完成后释放 pbuf。
网络数据的发送在微处理器的 CAN中断进行。当接收到 CAN 总线发送来的数据时按320
照编码格式进行编码后存入一个数组中。通过使用 lwip的 UDP发送函数 udp_send()发送数
据。发送处理函数如下:
void send_udpdata(u8_t *data,u8_t len)
{
struct ip_addr remoteipaddr; 325
struct udp_pcb *upcb_send;
struct pbuf *udp_p;
upcb_send = udp_new();
udp_p=pbuf_alloc(PBUF_TRANSPORT, 60 PBUF_RAM);//分配 60个字节
IP4_ADDR(&remoteipaddr, 192, 168, 0, 8); //设定发送的 IP地址 330
udp_connect(upcb_send, &remoteipaddr, 1986);//设定端口为 1986
udp_p->payload=data;
udp_p->len=len;
udp_p->tot_len=len;
udp_p->next=NULL; 335
udp_send(upcb_send,udp_p); //发送数据
udp_disconnect(upcb_send);
pbuf_free(udp_p); //释放 pbuf
udp_remove(upcb_send);
} 340
功能验证
因在 lwip中设定 UDP数据发送的 IP地址为 ,所以必需把计算机的 IP地址
设为 。用交叉网线连接网关和计算机。CAN 的测试工具用周立功公司的
USBCAN- 进行测试。网关向 CAN 总线发送的数据通过 USBCAN- 进行接收。与其配套
的软件为 ZLGCANTest。通过该装置可接收显示 CAN 总线上的数据,向 CAN 总线发送数345
据。
打开 ZLGCANTest软件和上位机软件。先在 ZLGCANTest中对 USBCAN- 进行设置。
- 14 -
中国科技论文在线
设置 CAN 的波特率为 500kbps,验收码和屏蔽码为默认值,滤波方式为单滤波,工作方式
为正常。在 ZLGCANTest中设置帧类型为标准帧,帧格式为数据帧,帧 ID为 0x123,数据
为 0XFEDCBA9876543210。每次发送 10帧,且让帧 ID每发送一帧递增。上位机软件的波350
特率也设为 500kbps,发送格式为正常发送,每次发送十帧,每发一帧 ID 增加一,发送间
隔为 100ms,帧类型为标准帧,帧格式为数据帧。打开 Wireshark 捕捉网络 UDP 数据。从
上位机软件中发送十帧数据,测试结果如下图 18、19、20所示。
355
图 18 ZLGCANTest软件收到数据
Fig. 18 The receiving data of ZLGCANTest
图 19上位机软件发送数据 360
Fig. 19 The sending data of PC
图 20 wireshark捕捉的 UDP数据
The capturing data of wireshark 365
分析图 19和图 18,可知上位机软件的数据能够通过网络到达微处理器,微处理器收到
数据后对数据处理后,通过 CAN外设发送用户数据。CAN节点能够正确的接收网关发送的
数据。
清空 ZLGCANTest 软件和上位机软件的显示数据。从 ZLGCANTest 软件中发送数据370
0XFEDCBA9876543210。测试结果如图 21、22、23所示。
- 15 -
中国科技论文在线
图 21 ZLGCANTest发送数据
Fig. 21 The sending data of ZLGCANTest 375
图 22上位机软件接收数据
Fig. 22 The receiving data of PC
380
图 23 wireshark捕捉的 UDP数据
The capturing data of wireshark
分析图 21至图 23可知:当有 CAN 节点向 CAN 总线发送数据时,网关收到后,能通385
过按 UDP数据编码格式向指定 IP地址()发送 UDP数据。上软机软件收到数据后
能正确显示出来。
更改 USBCAN- 和上位机软件的波特率设置为 20kbps。在上位机软件中发送格式改为
LookBack 模式,帧类型为扩展帧,帧 ID 为 0x12345678。测试网关在其它波特率和模式下
是否工作正常。 390
- 16 -
中国科技论文在线
图 24 上位机 LookBack模式数据
The data of PC in LookBack mode
395
图 25 ZLGCANTest软件接收数据
Fig. 25 The receiving data of ZLGCANTest
分析图 24至图 25可知:网关能工作在 LookBack模式,CAN外设的波特率设置正确。
通过以上测试可知嵌入式网关的下位机和上位机软件都能正常工作。 400
5 总结
论文针对以太网与 CAN 总线的互连问题进行了相关的研究。首先,在 STR912FAW44
微处理器的硬件平台上,通过使用意法半导体公司提供给用户的软件库,以 IAR Embedded
Workbench开发环境进行底层程序的开发,通过 J-Link仿真器进行程序调试。其次,通过参
考意法半导体公司提供的例程,对嵌入式 TCP/IP 协议栈 Lwip 进行了移植。实现了一个简405
单的 webserver功能。然后,以 vs 2008开发环境为平台,使作 C#编程语言,设计了一个使
用 UDP协议和网关进行数据通信的程序。最后,通过使用 lwip协议栈的 udp模块,实现了
CAN 总线与以太网之间的数据转换。
论文设计的网关,基本实现了以太网和 CAN 总线之数据通信,可针对具体的应用场合,
进一步完善程序实现对 CAN总线上的其它节点的监控。 410
[参考文献] (References)
[1] 丁恩杰,马方清.监控系统与现场总线[M].徐州:中国矿业大学出版社,2003.
[2] STMicroelectronics. UM0248. STR91xFA MAC/DMA controller (ENET) firmware library[Z],2008
[3] Stevens.范建华等译.TCP/IP详解[M],卷 1:协议.北京.机械工业出版社,2000. 415
[4] Adam and Implementaion of the LWIP TCP/IP Stack[J].Swedish Institute of Computer
Science ,2001.
[5] 刘瑞新.C#网络编程及应用[M].北京:机械工业出版社,2004.
[6] 李元熙. 基于 ARM7的 CAN总线到以太网网关研究与实现[M].南京航空航天大学,2007
[7] 李楠.CAN总线与以太网连接技术研究[M].南京航空航天大学,2007 420