当前工业控制系统中流行的控制方式:底层设备采用 RS232 总线结构,而上层的管理层一般采用以太网结构。该控制方式使信号可以在企业的 Intranet 上及时发布和共享,还可以在 Internet/Intranet 的任何位置对现场智能设备进行在线控制、功能组态以及远程诊断等,实现了控制网络真正意义上的开放性和互操作性。而 RS485 总线是一种基于平衡发送和差分接收的串行总线,具有很强的抗共模干扰能力,在适当的波特率下传输距离很远。同时由于其硬件设计简单、控制方便、易于进行网络扩展,被广泛的应用在很多工业现场。

  

本文所研究的嵌入式以太网适配器,就是要解决嵌入式设备网络通信的问题,方便嵌入式系统与计算机网络的通信,实现远程监控、访问及数据的传输。


一、主要芯片选择及简介

1、单片机 AT89S52

本设计中 AT89S52 作为核心处理器。AT89S52 是 Atmel 公司生产的低功耗、高性能 CMOS8 位单片机,片内含有 8k 字节的 EPROM 和 256 字节的 RAM。具有 ISP(在系统编程)功能。它具有灵活性高、使用方便、价格低廉等优点。因此,该芯片在嵌入式控制系统中得到了广泛应用。单片机 AT89S52 经过以太网传到 PC 机实现远程控制。利用 AT89S52 的 ISP(在系统编程)功能,很方便地把编好的程序写到单片机中,并且调试、修改和升级很容易。由于 AT89S52 单片机本身提供了一组全双工串行传输口,由 TXD 引脚来传送串行数据,而由 RXD 引脚来接收数据,可是其工作逻辑电平皆为 TTL 电平(0V,5V)。AT89S52 最小系统如图 1 所示。

 

图 1 AT89S52 最小系统

  

2、网络控制芯片 ENC624J600

ENC624J600 网络控制器是一款带有行业标准串行接口和并行接口的,专为嵌入式应用系统设计的独立以太网控制芯片。ENC624J600 通过 SPI 或并行接口与单片机通信,数据传输速率为 14Mbit/s(对于 SPI)至 160Mbit/s(对于 16 位的并行接口),ENC624J600 主要功能特性有,自适应的选择传输速率,支持 10Mbit/s 或 100Mbit/s;充分支持半双工或全双工交换式以太网;可编程填充和 CRC 生成;提供 24KBA 片内 RAM 缓冲区,用于执行发送和接手操作,主单片机还可以用它来进行常规的存储操作;支持总线 8 位或 16 位 CPU 访问,可编程自动拒绝错误数据包;可编程为发生冲突时自动重发。

  

ENC624J600 器件符合 IEEE 802.3 中适用于 10 Base-T 和 100 Base-TX 以太网的全部规范,包括许多可选条款,例如自动协商。ENC624J600 器件采用了一系列数据包过滤机制以对传入数据包进行限制。它还提供了一个 16 位宽的内部 DMA 以实现快速数据吞吐和硬件 IP 校验和计算支持。对于需要 SSL、TLS 以及其他与加密相关的协议的安全和身份验证功能的应用,提供了一个安全引擎模块。 该引擎可执行 RSA、Diffie- Hellman、AES、MD5 和 SHA-1 算法计算,以缩短代码大小、加快连接的建立和吞吐,并减少固件开发的工作量。通过 SPI 或并行接口与单片机通信,数据传输速率为 14 Mbit/s(对于 SPI)至 160 Mbit/s (对于 16 位解复用并行接口)。提供了专用于 LED 连接、活动指示以及发送 / 接收 /DMA 中断的引脚。提供了一个通用 24 KB 片内 RAM 缓冲区,用于执行发送和接收操作。主单片机还可以用它来进行常规存储操作。通信协议(例如 TCP)可使用此存储器保存可能需要重新发送的数据。在最终产品易于生产性方面,ENC624J600 系列的每个器件都预编程了唯一的非易失性 MAC 地址。在大多数情况下,这使最终器件省去了串行编程步骤,图 2 给出了器件的一般框图。

 

图 2 ENC624J600 的框图

  

3、外部数据存储器 FM1808

FM1808 是基于铁电存储器原理制造的并行接口 256Kbit 铁电存储器,FM1808 的主要特性如下:采用先进的铁电技术制造;存储容量为 256Kbit;读写寿命为 100 亿次;掉电数据可保存 10 年;写数据无延时;存取时间为 70ns;低功耗,工作电流为 25mA,待机电流仅为 20uA;采用单 5V 工作电压;工作温度范围为 -40℃~+85℃;具有特别优良的防潮湿、防电击及抗震性能;与 SRAM 或并行 EEPROM 管脚兼容。

  

二、硬件电路设计

1、AT89S52 与以太网控制器连接电路的设计

本系统里,P0 口被作为低 8 位地址 / 数据复用,当作数据线使用时用来连接 NC624J600 的 8 位数据接口。当作为地址线使用时,为了给 ENC624J600 提供 15 位地址的低 8 位,要采用复用技术,对地址和数据进行分离。因此 P0 口连接到 74ls373 的 D0~D7,把低 8 位地址暂存,随后有地址锁存器的 O0~O7 给 ENC624J600 提供 15 位地址的低 8 位,而高 7 位由 P2 口通过 74ls245 提供,如图 3 所示。

  

要使与单片机的接口具有高度的灵活性,ENC624J600 器件提供了两种选择:基于串行外设接口(SPI)标准的串行接口和灵活的 8/16 位并行从端口接口。在任何给定时间只能使用一个接口。本课题中,AT89S52 单片机和 ENC624J600 的连接选择 PSP 接口,如图 3 所示。要选择 PSP 接口,则在上电时通过 INT/ SPISEL 引脚上的 SPISEL 功能由硬件选择 I/O 接口。要完成此操作,需在向器件供电且器件退出上电复位状态后将施加到该引脚的电平约锁存 1 至 10μs。如果 SPISEL 被锁存在逻辑高电平状态,将使能串行接口。如果 SPISEL 被锁存在逻辑低电平状态,则使能 PSP 接口。

 

图 3 AT89S52 与以太网控制器连接电路的设计

  

2、AT89S52 和与外部扩展存储器 FM1808 的电路设计

AT89S52 与 FM1808 的连接与 AT89S52 与 NC624J600 的连接类似,P0 口被作为低 8 位地址 / 数据复用,当作数据线使用时用来连接 FM1808 的 8 位数据。当作为地址线使用时,采用复用技术,对地址和数据进行分离,给 FM1808 提供 15 位地址的低 8 位,而高 7 位由 P2 口通过 74ls245 提供,如图 4 所示。

 

图 4 AT89S52 和与外部扩展存储器 FM1808 的电路设计

  

3、电源电路设计

电源模块是一块电路板最为基本的组成部分,只有稳定可靠的电源为板上芯片供电才能够保证各功能模块的正常工作,因此在电源模块的设计时首先应该初步计算电路板所有元件的功耗,然后在保证功耗的前提下选择相应的芯片进行直流电源模块设计,尽量做到体积小,重量轻;性价比合理;能长期稳定、可靠地工作。

  

本适配器所需要的电源有 3.3V。系统需要 3.3V 电源供电的芯片以太网控制器等。考虑到系统可能工作于高速通信模式,消耗电流会非常大,所以选用 1 片 UC385 芯片,每片 UC385 输出电流可达 800mA,可以完全满足系统的需求。具体电路如图 5 所示 。

 

图 5 电源模块设计

 

三、软件部分设计

1、主函数

上电先查询 ARP,若未获取 MAC,则发送 ARP 请求。若有新的数据,若 TCP 应答没有完成,则应答 TCP,完成 TCP 三次握手。然后根据请求类型响应 HTTP。

  

2、TCP 应答部分

1) 三次握手阶段

  

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。

 

图 6 三次握手(Three-way Handshake)

  

第一次握手:客户端发送一个 TCP 的 SYN 标志位置 1 的包指明客户打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。

 

图 7 第一次握手

  

第二次握手:服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为 1 同时,将确认序号(Acknowledgement Number)设置为客户的 ISN 加 1 以。即 X+1。

 

  

第三次握手,客户端再次发送确认包(ACK) SYN 标志位为 0,ACK 标志位为 1. 并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方。并且在数据段放写 ISN 的+1

 

图 9 第三次握手

  

其实在握手和结束时确认号应该是对方序列号加 1,传输数据时则是对方序列号加上对方携带应用层数据的长度。

  

在传输 TCP 分包的过程中也是需要发送一分包,确认一分包的,而 TCP 确认包只有 54 字节,就是只有头部信息。因此在传输 TCP 分包序列号一直不变,确认号按发送数据的长度递增即可。

  

3、 HTTP

1)请求

  

连接成功建立后,开始向 web 服务器发送请求,这个请求一般是 GET 或 POST 命令(POST 用于 FORM 参数的传递)。GET 命令的格式为:GET 路径 / 文件名 HTTP/1.0 文件名指出所访问的文件,HTTP/1.0 指出 Web 浏览器使用的 HTTP 版本。现在可以发送 GET 命令:GET /mytest/index.html HTTP/1.0,

  

2)应答

  

web 服务器收到这个请求,进行处理。从它的文档空间中搜索子目录 mytest 的文件 index.html。如果找到该文件,Web 服务器把该文件内容传送给相应的 Web 浏览器。为了告知浏览器,Web 服务器首先传送一些 HTTP 头信息,然后传送具体内容(即 HTTP 体信息),HTTP 头信息和 HTTP 体信息之间用一个空行分开。常用的 HTTP 头信息有:

  

① HTTP 1.0 200 OK  这是 Web 服务器应答的第一行,列出服务器正在运行的 HTTP 版本号和应答代码。代码“200 OK”表示请求完成。

  

② MIME_Version:1.0 它指示 MIME 类型的版本。

  

③ content_type:类型 这个头信息非常重要,它指示 HTTP 体信息的 MIME 类型。如:content_type:text/html 指示传送的数据是 HTML 文档。

  

④ content_length:长度值 它指示 HTTP 体信息的长度(字节)。

  

3)关闭连接

  

当应答结束后,Web 浏览器与 Web 服务器必须断开,以保证其它 Web 浏览器能够与 Web 服务器建立连接。

  

4、提交表单 GET/POST

GET 请求的数据会附在 URL 之后(就是把数据放置在 HTTP 协议头中),以?分割 URL 和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母 / 数字,原样发送,如果是空格,转换为+,如果是中文 / 其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX 中的 XX 为该符号以 16 进制表示的 ASCII。

  

POST 把提交的数据则放置在是 HTTP 包的包体中。在 FORM(表单)中,Method 默认为“GET”。

  

本文中登录时提交表单数据采用的是 POST 方式,而提交控制信息表单时用的是 GET。以下是用抓包的方式明显看出他们的不同之处。

 

图 10 POST 方式

 

图 11 GET 方式

 

图 12 GET 方式是提交的数据直接放在 URL 中了

  

5、总体软件设计

AT89S52 单片机首先对 ENC624J600 进行初始化,首先应查询 ESTAT 寄存器的 CLKRDY 位,确保在配置 MAC 和 PHY 寄存器前有足够的延时;PHY 寄存器用来设置通信模式;编程 ERXST 和 ERXND 指针对接收缓冲器进行初始化,当编程 ERXST 指针时,相同的值会自动更新 ERXWRPT 寄存器,接收硬件将从 ERXWRPT 中的地址开始写入已收到的数据,为跟踪接收的数据,ERXRDPT 寄存器也需要用相同的值编程;为了能最大限度地降低主控制器的处理工作量,ENC624J600 配备了不同的过滤器,可自动拒绝不需要的数据包,所有的过滤器都由 ERXFCON 寄存器进行配置,可以使用 ANDOR 位对几个过滤器的测试结果作逻辑 / 与 0 或逻辑 / 或 0 运算;由于未被用作接收缓冲器的存储空间都作为发送缓冲器,所以不需要对发送缓冲器进行特定的初始化,通常将存储空间分配为大的接收缓冲器空间和较小的接收存储空间。

  

在初始化完成后,即进入主循环程序,单片机将反复检测 ENC624J600 是否接收到以太网帧(或者数据缓冲区 B 中有数据需要发送),当有数据接收(或者发送)时则根据标志位进行相应的子函数处理,将数据存入数据缓冲区(或者发送至以太网上)。主程序流程如图 13 所示。