基于ENC28J60的嵌入式以太网/CAN网关设计
扫描二维码
随时随地手机看文章
摘 要:提出一种基于ARM7芯片LPC2294微处理器和以太网控制器ENC28J60的以太网/CAN网关设计方案,阐述以太网/CAN协议转换的硬件设计,以及相关接口通信软件设计。通过该网关可以实现CAN总线与基于IP/TCP协议的以太网之间的双向通信。
关键词:嵌入式网关;不起CAN总线;以太网;ARM
0 引 言
随着Internet的普及,实现智能家居远程控制不再是人们的梦想,其完全成为可能,然而实现这个梦想需要花费高额代价,智能家居迄今仍不能普及,因此设计一款性价比好的家庭控制器很有必要。CAN总线采用非破坏仲裁技术,短帧结构和数据出错率极低,可以满足控制系统安全性、可靠性、快捷性的要求。目前以太网以成本低,通信速度快,兼容性和互操作性好,资源共享能力强等特点已成为目前最流行的因特网接入方案之一,因此采用CAN总线组建家庭内部网络,再通过网关与外部以太网相连实现对家居电器设备的远程控制,实现CAN网络与以太网的结合,已成为家居发展的趋势。CAN与以太网采用的网络协议,要确保两种网络之间高效无缝地连接网关是问题的关键。在此设计一种基于ENC28J60的高性能嵌入式以太网/CAN网关。
1 网关的硬件设计
1.1 系统硬件结构
该系统的硬件部分主要由ARM、以太网接口、CAN接口、高速存储器、JTAG口、复位电路和电源等组成,其系统硬件结构如图1所示。ARM负责对以太网接口芯片和CAN接口芯片进行控制。ARM移植TCP/IP通信协议和CAN协议,可完成以太网协议和CAN总线协议转换,实现以太网接口和CAN接口通信数据的透明传输。JTAG口主要用来下载程序,进行系统仿真调试。键盘、LCD显示用来实现人机交换。
1.2 主控制器的选择
微处理器选用PhiIips公司ARM7TDMI内核的32位微控制器LPC2294,与一般单片机相比,LPC2294可嵌入操作系统。LPC2294内嵌256 KB的高速FLASH存储器和16 KB的静态RAM,多个外部中断和串行口,LPC2294内部还集成了CAN控制器,只要加上CAN总线收发器就可以构成CAN节点,从而大大简化了硬件电路。同时,由于LPC2294具有多路CAN,因此还可以把系统设计成冗余结构,以提高系统的可靠性。LPC2294还支持JTAG实时仿真和跟踪,并具有128位宽度的存储器接口和独特的加速结构,它能够使32位代码在高达60 MHz的操作频率下运行。
1.3 系统电源电路和复位电路
在该设计中,需要使用5 V,3.3 V和1.8 V的直流稳压电源。其中,5 V电源由LM317L三端可调稳压器产生;3.3 V和l_8 V电源由可调节输出电压的SPXlll7产生。系统复位电路的可靠性对整个系统的稳定起着非常重要的作用。在复位电路中采用了电压监控芯片TPS383K33,它是10 ms或200。ms可选的上电复位发生器,具有防按键抖动的手动复位输入功能,允许组成多个Ic的菊花链电压监控等。复位电路如图2所示。图2中,nRST连接到LPC2294的复位脚RESET;nTRST接以太网控制器ENC28J60的复位引脚。当复位开关SW按下时,TPS383K33输出复位信号,引脚REST输出低电平,导致两路74HCl25(三态门负逻辑控制)导通,信号nRST和nTRST输出低电平使系统复位。在系统正常运行情况下,TPS383K33的引脚REST输出高电平,两路74HCl25截止,上拉电阻R1,R2将信号nRST和nTRST上拉为高电平。
[!--empirenews.page--]
1.4 CAN总线接口
CAN总线接口由LPC2294和CAN总线收发器等构成。这里采用带隔离的高速cAN收发器CTMl050T,其主要功能是将CAN控制器的逻辑电平转换为CAN总线的差分电平,并且具有(DC2500V)隔离功能、ESD保护功能及TVS管防总线过压功能,其内带隔离器,可减少外部相关电路的设计。CAN总线接口电路如图3所示。CTMl050T的接收引脚RXD、发送引脚TXD串接390 Ω的电阻分别与LPC2294对应的CAN收发引脚RDl,TDl引脚相连。CTMl050T的CANH和CANL引脚之间应串联120 Ω的电阻,以消除电路中信号的反射等干扰。CANH和CANL与地之间还应并联2个30 pF的小电容,这样即可消除总线上的高频干扰和电磁辐射。
1.5 以太网接口
在系统设计中,采用ENC28J60作为网络接口芯片。ENC28J60是美国微芯科技公司推出的28引脚独立以太网控制器,内置以太网物理层器件(PHY)及介质访问控制器(MAC),可按以太网协议可靠地收发信息包数据。另外,它还具有可编程8 KB双端口SRAM缓冲器,数据传输速率高达10 Mb/s。ENC28J60具有多种集成功能,如CRC校验、可编程过滤、可自动评价、接收或拒收多种信息包、数据滤波等功能,能高效率地进行信息包的存储、检索和修改,可减轻主控微处理器的内存负荷。ENC28J60采用标准的SPI串行接口,只需4条连线即可实现与微处理器相连,而且它只有28个引脚,可以大大简化相关设计,减小空间。网络插座采用RJ45插座HR911102A,其内置网络变压器、状态显示灯和电阻网络,具有信号耦合电气隔离、阻抗匹配、抑制干扰等特点,可提高系统抗干扰能力和收发的稳定性。以太网接口电路如图4所示。图4中ENC28J60的2个中断引脚INT和WOL分别接LPC2294的EINTl,EINT2;ENC28J60的SPI脚SO,SI,SCK,CS分别接LPC2294的脚MISO1,MISll,SCKl,CSl,2个专用的引脚(LEDA,LEDB)用于连接HR911102A的LEDG,LEDY,进行网络活动状态指示。
1.6 外扩存储器接口
由于LPC2294内部只有16 KB的RAM,不能满足以太网数据存储的空间要求,该设计扩展了256 KB的外部存储器,选用RAMTRON公司的存储器芯片FM25256。FM25256是采用先进的铁电技术制造的非易失性存储器,具有比其他非易失性存储器高得多的读写操作次数,可以承受超过一万亿次的读写操作。FM25256使用串行SPI接口及其传输规约进行双向传输,它最大可达15 MHz的操作速度,能以高速的总线速度进行写操作,无需延时。存储器接口电路如图5所示。
图5中FM25256的SPI脚SO,SI,SCK,CS分别与LPC2294的MISOO,MISl0,SCK0,CS2脚相连。写保护引脚WP与LPC2294的P2.21相连。FM25256主要用来存储以太网数据。
2 网关软件设计
网关的软件设计采用嵌入式操作系统μC/OS-Ⅱ,它具有较小的内核结构,开发成本小,执行效率高,移植也容易。初始化文件通过JTAG下载到网关并保存在FLASH中。
2.1 CAN通信软件设计
该设计的关键是编写CAN驱动程序,主程序通过调用CAN驱动程序实现接口数据的收发,驱动程序包括CAN控制器的初始化、接收数据、发送数据和总线异常处理。
2.1.1 CAN控制器的初始化
初始化操作包括硬件使能CAN、软件复位、设备报警界限、设置总线波特率、设置中断工作方式、设置CAN验收过滤器工作方式、设置控制器的工作模式和启动CAN等。LPC2294片内外设与引脚的连接由引脚连接模块控制。CAN控制器的硬件使能就是通过软件设备GPIO寄存器来控制多路开关,将特定的引脚与CAN控制器连接起来。在设备各CAN寄存器初始化之前必须进行软件复位,这是因为CAN的某些寄存器必须在软复位状态下读写。[!--empirenews.page--]
2.1.2 数据的接收与发送
LPC2294的每个CAN控制器中有3个发送缓冲区,发送数据时先查询CANSR寄存器是否空闲,若空闲才能写入数据,然后判断报文的类型,根据报文类型调用相应的发送函数,即对数据进行封装并写入发送缓冲区,最后调用发送命令。为了提高效率,接收数据采用中断方式,首先在CANopen的初始化程序中要使能接收中断,当有中断发生,读取CANICR寄存器,判断接收中断标志是否置位,如果有则判断报文的类型,根据报文类型调用相应的接收函数,处理接收缓冲区的数据。
2.1.3 异常处理
在总线发生严重故障的情况下,CAN节点脱离总线,此时下述寄存器位被置位为CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CAN-MOD的RM位。RM将许多CAN控制器功能复位和禁止。软件下一步必须置零RM位。发送错误计数器将递减计数总线释放条件(11个连续的隐性位)的第128个错误。软件通过读取Tx错误计数器对计数器递减计数的情况进行监测。
2.2 以太网通信软件设计
2.2.1 ENC28J60的初始化
LPC2294。对ENC28J60的各种操作均通过SPI接口进行,包括寄存器的设置、数据的发送和接收。LPC2294的SPI工作在主动方式,即ENC28J60的SPI时钟信号由LPC2294提供。ENC28J60初始化内容主要有定义ENC28J60发送缓冲区的大小,设置MAC地址与IP地址、子网掩码、初始化LEDA、LEDB显示状态,设置ENC28J60工作模式。
2.2.2 TCP/IP协议
该设计采用嵌入式系统中广泛应用的LwIP协议栈。LwIP TCP/IP实现的特点是在保持协议主要功能的基础上减少对RAM的占用,这使协议栈LwIP适合在低端嵌入式系统中使用。LwIP协议栈应用到的协议有ARP,IP,IcMP,TCP,UDP,其具有滑动窗口、拥塞控制和接收分片的分组功能。在LwIP中可以有多个网络接口,每个网络接口都对应一个strut netif()。netif包含了相应网络接口的属性、收发函数。采取调用netif的方法netif→inpln()及netif→output()进行以太网packet的收、发等操作。在驱动中主要进行的就是实现网络口的收、发、初始化以及中断处理。LwIP协议中没有提供HTTP协议,所以需要用原始API函数编写HTTP应用程序。
2.3 以太网/CAN双向协议转换
整个设计中最为关键的就是CAN协议与TCP/IP协议的相互转换。协议转换流程图如图6所示。
其具体过程如下:当网关接收到数据,首先判断数据类型,如果是从CAN接口接收CAN协议报文,便分离出数据部分,再将报文数据部分按系统规定的应用层格式进行封装,然后将应用层数据存入以太网接口发送缓冲区,由该接口在数据前面依次添加TCP或UDP头、IP头、以太帧头,最后封装成以太帧后,通过以太网接口发往以太网。若接收到的以太网数据,数据转换过程相反,依次去掉IP头、TCP或UDP头和应用层头,再将应用层数据按CAN报文格式封装好后存入CAN接口发送缓冲区,由CAN接口发往CAN网络中相应设备。若应用层数据长度大于8 B,则还需将数据以8 B为一组进行拆分。
3 结 语
符合IEEE802.3协议的ENC28J60不仅能提供以太网通信的相应功能,而且体积小,能够简化设计,可以设计出较小的嵌入式网关。用上述方法构建的通信网关可实现以太网与CAN总线之间的协议转换,为以太网与CAN总线网络的互联提供了一种传输速度快,成本低,稳定性和安全性高的解决方案。