EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
引言4 r8 ?; |# E7 k4 ~0 ^
. ^9 t" @" d( x+ U0 n
当前,嵌入式设计人员在为远程控制或监控设备提供以太网接入时,使用的以太网控制器都是专为个人计算机系统设计的,如RTL8019,DM9008,CS8900A 等。这些器件不仅接口电路复杂、体积较大,而且比较昂贵。CP2200 是Silabs于近期推出的一款独立以太网控制器,它符合IEEE 802.3协议,支持10M以太网接入,而且仅需要很少的外部电路连线就可满足绝大多数嵌入式以太网接口的设计要求,使得潜入式以太网接口的设计大大简化,占板空间大大减小,系统开发成本大大降低。
: k, A1 F; `; m2 v4 P/ y% ]另外,该以太网控制器具有8位并行主机接口,可以为绝大多数微控制器或主处理器提供以太网通信功能。8位并行总线接口支持Intel和Motorola总线方式,可以使用复用或非复用方式寻址。这些功能加上相关处理器的TCP/IP协议栈,使得嵌入式应用系统的以太网接口实现变得极其简易。 硬件电路设计
1 E2 K2 r& J4 f# r6 x* i; y$ `
+ Q0 q# H" }5 X 系统的硬件电路示于图1。CP2200的外围电路比较简单。 ![]()
图1 硬件电路
5 V+ E7 G+ ]1 u% @6 d9 k( l8 v' h& }" Y8 P
I/O并行接口
% f$ Z$ o( k7 I+ c! }* |) O. G+ g" B5 E
' J1 i) X* J; c2 ~6 C! m- X CP2200的并行主机接口,支持Motorola 和 Intel两种总线方式,且支持地址数据复用和非复用方式。可以通过将MUXEN和MOTEN引脚接地或拉高电平来实现对主机接口总线方式的配置。5 ~5 p. P1 z1 b4 R
: a8 z. s4 _" C" s' g& m3 v+ X以太网变压器
! Y. x5 X5 Y' x# L
* [5 {' k: X% V 要实现以太网接口,以太网变压器是不可缺少的。在差分接收引脚(RX+/RX-)上,需要一个专用于10BASE-T 操作的1:1 脉冲变压器。 在差分发送引脚(TX+/TX-)上,需要外接一个带有中心抽头的1:2.5 脉冲变压器。变压器应具有2kV 以上的电压隔离性能,以防止静电干扰。发送端需要两个8W(精度为1%)的电阻和一个560pF 的电容与特定端相连,接收端需要一个100W电阻与特定端相连。: S5 Y1 P' p) ?: x. L
& N" i, G h" l" f$ o
按照CP2200的要求,笔者采用的是PRJ系列的PRJ-010型变压器。该变压器集成了RJ-45接头,在省去了不少连线的同时也提高了高频信号传输的可靠性。
+ E- V, F3 H5 o5 G5 m6 j7 D+ Y+ `
( g$ M$ _9 e, [$ h& I2 `其他电路, F% X" x( M# x% q- [- [
1 V% M- e7 V$ V' P: f6 ?: I# F) } LINK和ACT引脚输出电平来驱动LED,用来指示网络的连接和活动状态。7 b3 S3 ?8 W6 {4 p" @7 L
# ]1 k0 `/ R; W) D2 K2 s6 p3 g 所有电源引脚都必须与同一个外部3.3V 电源相连。类似的,所有参考地都应在外部连接到相同的接地点。每个VDD 和VSS 引脚都应连接一个0.1mF 的陶瓷旁路电容,该电容尽可能靠近引脚。8 W2 h/ s% }, Y$ [ b
1 h! H. k1 L9 R' F/ d
需要特别说明的是,驱动双绞线接口需要相对高的电流,因此以太网的收发数据线应尽可能短,并且线径适当加大以减少电阻损耗(为了保证数据的可靠传输,笔者的PCB电路板选择了20mil的线径)。 软件设计
; S, |5 X c) K4 _; ~* S" t8 O: C# R
TCP/IP 协议种类繁多,相互之间交互作用复杂,在单片机上不可能实现所有协议,所以必须对协议栈进行剪裁。结合系统的具体通信要求,笔者的系统最后只保留了TCP、UDP、IP、ICMP、ARP协议模块。在协议栈程序的整体设计上,考虑到单片机的单任务执行方式很难发挥TCP/IP协议的特点,我们采用了基于事件驱动机制的TCP/IP协议栈的实现方法。该机制的引入,使得系统在保证具有高效的汇编语言代码效率的同时,实时响应性也得到了大幅提高。下面将具体阐述事件驱动机制的特点和基于该机制的TCP/IP协议栈的实现。
, m$ v! Y6 }: M: H: }/ ]4 B- P
- @9 H5 x, P1 t/ F r0 Z事件驱动机制/ E8 M1 i/ i( B- C/ J. n2 |6 p
d/ N; }' a. H% | 系统初始化完成后, 进入事件循环体,不断查询C8051F040的事件队列是否有事件。一旦事件队列非空,则读取事件标志字,判断事件类型,而后调用对应事件处理子程序。处理子程序执行完毕后,仍然返回到事件循环体中。事件标志字由中断直接或者间接驱动,当某个事件发生后,只需在中断服务程序中将状态字的对应位置位。中断不断向事件队列中添加事件,C8051F040处理程序则不停地从事件队列中读取事件标志字,处理事件。1 s" k/ M# G, p% K0 g1 b1 E+ m, }
: ]) Q% h7 |" N7 s& ?/ x7 }
事件驱动机制的特点为:5 M9 n7 |" q; q1 ?
0 B5 z; z+ b: h" J
*由于在中断处理程序中,仅仅执行了改变事件标志字这样的简单程序语句,把事件添加到C8051F040的事件队列中后就立即返回。所以系统关闭中断的时间很短。增强了系统对中断处理的实时性。
! i/ O3 h) c1 m- A# {% V* Z* g- v% b
% S4 u3 z9 {( D- i" E, B' m0 K *C8051F040根据当前读取的事件,进行相应事件处理或者向事件队列中添加进一步处理所需的事件。这实际上是把任务都进行了分步处理,在执行一步这一任务的同时,也可以执行一步其他任务。这样.在不影响主程序流程的情况下,又提高了系统的实时性。
; a& {3 s3 D& `+ Z9 \ y3 N7 j2 O
: e) o2 F; F1 T事件循环的简要流程 ![]()
图注:1=EVENT_ETH_ARRIVED;2=EVENT_TCP_RETRAN;3=EVENT_TCP_INACTIVITY;4=EVENT_ARP_RETRAN;5=EVENT_AGE_ARP_CACHE;6=EVENT_COME_NEWDATA;, r/ @8 T; W/ q% |2 Q
图2 事件循环流程
A- M4 t( }; M6 s- U. d$ H
7 ]. o. n0 ~ p1 G" j7 N7 y 事件循环体的简要流程如图2所示,其中各事件的含义分别为:9 j/ `. \$ z7 U* y* ` c
% V& T" w3 g. U6 p' N, ~! T9 t EVENT_ETH_ARRIVED: 有待处理的以太网帧事件。检测到此事件,C8051F040会调用读CP2200接受缓冲区程序,然后对帧进行解包处理;
! Z2 T4 Z' Q% P: n8 n$ D
# }- x; s# m( m4 E8 }- ~5 t EVENT_TCP_RETRAN: TCP重传事件。当TCP定时器超时,触发该事件;1 x/ R2 ^1 d; f8 {1 t
% G2 D& Y7 s; Y5 k/ ~" x: g5 n" d
EVENT_TCP_INACTIVITY:关断不活动连接事件。当某连接超过0.5秒没有收发数据,则触发此事件;
6 g, y1 l9 h; x2 G# E [. t2 u4 dEVENT_ARP_RETRAN:ARP请求数据包重传事件。当某一ARP请求在发出0.5秒后没有相应,则触发该事件。经两次重发都没回应,则将以该IP为目的地址的数据包丢弃;+ r1 Q6 q) U( |) G
" ] [ {! B( V9 t0 T ^4 ?7 G# k EVENT_AGE_ARP_CACHE:更新ARP缓存事件。每60秒触发该事件一次;' ?8 u9 q" H! k* z2 ]) Y
# n7 [2 k l% T% R# s6 g' m
EVENT_COME_NEWDATA: 有新数据事件。当有新数据待发送时,触发该事件; 结语. |4 x( D# E3 L% u/ j* t3 E' h
% {" B7 N1 Y3 O+ r; ~& k! I
CP2200的多种集成功能如CRC校验,数据滤波等有效地减轻了单片机的载荷,它内部的收发接口单元操作起来灵活方便,为以太网数据包提供了有效的缓冲。芯片具有稳定的工作性能和抗干扰抗震性能,笔者利用CP2200, C8051F040单片机和TCP/IP协议栈开发出了用于铁路机车的以太网通讯接口板卡。此板卡已在测试机车上运行,工作性能良好,能够进行稳定的数据传递。 9 s8 Y) k) W9 q9 |) A
3 K8 a* \1 e3 U) V8 I
|