奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程
www.ourstm
uIP1.0 ENC28J60 以太网例程
实验平台:奋斗版STM32开发板V2、V2.1、V3 实验内容:本例程演示了在奋斗STM32开发板上完成ARP,ICMP,TCP服务器、WEB 服务器以及UDP服务器,该实验学习了基于uIP1.0网络协议栈的程序编制。
预先需要掌握的知识
1.ENC28J60
ENC28J60是MICROCHIP公司的带SPI 接口的独立以太网控制器, 以太网控制器特性 • IEEE 802.3 兼容的以太网控制器 • 集成MAC 和10 BASE-T PHY • 接收器和冲突抑制电路 • 支持一个带自动极性检测和校正的10BASE-T 端口 • 支持全双工和半双工模式 • 可编程在发生冲突时自动重发 • 可编程填充和CRC 生成 • 可编程自动拒绝错误数据包 • 最高速度可达10 Mb/s 的SPI 接口 缓冲器 • 8 KB 发送/ 接收数据包双端口SRAM • 可配置发送/ 接收缓冲器大小 • 硬件管理的循环接收FIFO • 字节宽度的随机访问和顺序访问(地址自动递增) • 用于快速数据传送的内部DMA • 硬件支持的IP 校验和计算 介质访问控制器
(MAC)特性 • 支持单播、组播和广播数据包 • 可编程数据包过滤,并在以下事件的逻辑“与” 和“或”结果为真时唤醒主机: - 单播目标地址 - 组播地址 广播地址 - Magic Packet - 由64 位哈希表定义的组目标地址 - 多达64 字节的可编程模式匹配(偏移量可由用户定义)
淘宝店铺:ourstm.taobao
1
奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程
www.ourstm
• 环回模式 物理层(PHY)特性 • 整形输出滤波器 • 环回模式 工作特性 • 两个用来表示连接、发送、接收、冲突和全/ 半双工状态的可编程LED 输出 • 使用两个中断引脚的七个中断源 • 25 MHz 时钟 • 带可编程预分频器的时钟输出引脚 • 工作电压范围是3.14V 到3.45V • TTL 电平输入 • 温度范围:-40°C 到+85°C (工业级), 0°C 到 +70°C (商业级)(仅SSOP 封装) • 28 引脚SPDIP、SSOP、SOIC 和QFN 封装
概述
淘宝网页版
ENC28J60 是带有行业标准串行外设接口(SerialPeripheral Interface,SPI)的独立以太网控制器。 它可作为任何配备有SPI 的控制器的以太网接口。ENC28J60 符合IEEE 802.3 的全部规范,采用了一系列包过滤机制以对传入数据包进行限制。 它还提 供了一个内部DMA 模块,以实现快速数据吞吐和硬件支持的IP校验和计算。 与主控制器的通信通过两个中断引脚和SPI 实现, 数据传输速率高达10 Mb/s。两个专用的引脚用于连接LED,进行网络活动状态指示。 图1-1所示为ENC28J60的简化框图。 图1-2所示为使用该器件的典型应用电路。 要将单片机连接到速率为10 Mbps 的以太网, 只需ENC28J60、两个脉冲变压器和一些无源元件即可。
淘宝店铺:ourstm.taobao
2
奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程
www.ourstm
ENC28J60 由七个主要功能模块组成: 1. SPI 接口——充当主控制器和ENC28J60 之间通信通道。 2. 控制寄存器——用于控制和监视ENC28J60。 3. 双端口RAM缓冲器——用于接收和发送数据包。 4. 判优器——当DMA、发送和接收模块发出请求时对RAM 缓冲器的访问进行控制。 5. 总线接口——对通过
SPI 接收的数据和命令进行解析。 6. MAC (Medium Access Control)模块——实现符合IEEE 802.3 标准的MAC 逻辑。 7. PHY(物理层)模块——对双绞线上的模拟数据进行编码和译码。 该器件还包括其他支持模块,诸如振荡器、片内稳压器、电平变换器(提供可以接受5V 电压的I/O 引脚)和系统控制逻辑。 奋斗板STM32 V3和ENC28J60的连接
淘宝店铺:ourstm.taobao
3
奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程
www.ourstm
2. 轻型以太网协议栈uIP:
开源的uIP软件包为嵌入式位处理器建立TCP/IP协议堆栈提供了一种解决方法。它为互联网提供了一系列必要的协议。对 代码和数据的内存要求量十分小。uIP是亚当-邓克尔斯(Adam Dunkels)在瑞典计算机学院开发的。uIP1.0版本实现了符合 IEEE802.3的比较重要的协议, 例如ARP,ICMP,IP,TCP,UDP等,详细手册可以参考光盘资料目录下的UIP1.0源码目录下的参 考手册。 本例程是选用了uIP1.0版本作为移植版本,移植到了基于STM32F103VET6控制的ENC28J60网络模块上。 实现了以下
协议。 ARP:地址解析协议。 IP: 网际协议 ICMP: 因特网信息控制协议(包含了ping的响应) TCP: UDP: 传输控制协议(包含了TCP服务器,WEB服务器) 数据报协议(包含了UDP服务)
3. 应用实例
设计要求
本例程移植uIP-1.0协议栈,演示开发板和PC间的TCP通信。自定义了一个简单的应用层 有: (1)实现一个TCP服务器,可以通过PC机的TCP客户端控制板子上的LED (2)实现了一个简单的Web服务器。可以通过PC的浏览器控制板子上的LED (3)实现了一个UDP服务器。可以通过PC机的UDP客户端控制板子上的LED 本例程设置的缺省IP地址是 192.168.1.15,默认的TCP服务器监听端口是1200, WEB服务器监听端口80, UDP服务器监听端口 2000。 用户可以做如下测试: (1)ping 试验 (ICMP) 点击windows 开始-运行,执行cmd命令,然后在dos窗口输入 ping 192.168.1.15 应该看到如下结果: Reply from 192.168.0.15: bytes=32 time<1ms TTL=128 Reply from 192.168.0.15: bytes=32 time<1ms TTL=128 Reply from 192.168.0.15: bytes=32 time<1ms TTL=128 Reply from 192.168.0.15: bytes=32 time<1ms TTL=128 (2)PC机的TCP客户端控制开发板上的LED试验 (TCP服务器) 通信协议。本例程实现的功能
淘宝店铺:ourstm.taobao
4
奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程
www.ourstm
运行网络调试助手软件,端口选择1200,服务器IP地址选择192.168.1.15, 协议类型选择TCP客户端, 点击连接按钮,在命令输入窗口输入控制LED的命令字符串,然后点击发送,开发板上对应的LED灯会发生 变化。 命令代码如下: (末尾无0x00和回车字符) ledon 1 ledoff 1 ledon 2 ledoff 2 ledon 3 ledoff 3 ----- 点亮LED1 ----- 关闭LED1 ----- 点亮LED2 ----- 关闭LED2 ----- 点亮LED3 ----- 关闭LED3 (WEB服务器) 可以看到基于uIP的Web测试页面,在对话框输入1-3,点确定按钮,
(3)WEB网页控制开发板上的LED试验
打开IE浏览器,在地址栏输入192.168.1.15
可以控制相应的LED点亮。网页保存在httpd-fsdata.c的data_index_html数组里, 是通过amo的编程小工具集合转换的,可以 在奋斗论坛下载到。 (4)UDP服务器实验 本地UDP端口默认是2000, 远端UDP可以直接连接本地端口,并进行通信 命令代码如下: (末尾无0x00和回车字符) getname ledon 1 ledoff 1 ledon 2 ledoff 2 ledon 3 ledoff 3 ------返回板子的信息 ----- 点亮LED1 ----- 关闭LED1 ----- 点亮L
ED2 ----- 关闭LED2 ----- 点亮LED3 ----- 关闭LED3
3.2 硬件电路连接
用网络线把PC和开发板连接起来。需要注意的是,由于开发板断的网络芯片配置为10M 全双工。 由于该芯片不具有自动协 商功能,需要将PC端得网络设置为10M 全双工。 否则采用自动协商的话,会判别开发板采用的是10M 半双工, 由于开发板默 认的IP地址设置为192.168.1.15, 需要将连接的网络设备设置为192.168.1.X, 否则会引起不能正常通信。
3.3 软件程序设计
根据任务要求,主程序内容主要包括: 1. 2. 3. 4. 5. 6. 7. 8. 9. 设置系统时钟为72Mhz 中断源配置 (采用了ENC28J60的中断接收模式) 串口1初始化(用于监视网络状态) GPIO接口初始化 (配置LED控制) SPI1接口初始化 (用于END28J60的控制) 网络配置初始化 (ENC28J60的初始化设置以及uip的接口函数设置) 创建TCP服务器端口及WEB服务器端口 根据接收的UDP包进行UDP初始化设置 (绑定远端及本地的IP及端口) 网络状态监控及响应。
整个工程包含6类源文件:
淘宝店铺:ourstm.taobao
5