嵌入式以太网社区

?找回密码
?立即注册
搜索
365bet官网足球官方开户网利用Python来控制STM32365bet官网足球官方开户网365bet官网足球官方开户网
STM32高速USB数据传输方案,支持多系统!STM32全速USB数据传输方案,支持多系统!Flash高速烧写方案STM32 HID IAP/Bootloader升级方案
查看: 8944|bet365体-在线体育投注_365体育投注地址_365体育投注登录: 43
打印 上一主题 下一主题

MCU51单片机uIP协议栈+ENC28J60网卡 移植、应用

[复制链接]

1110

帖子

173

主题

14万

金币

超级版主

Rank: 8Rank: 8

积分
149607
QQ
跳转到指定楼层
楼主
发表于 2014-10-19 11:40:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 飞鸿踏雪 于 2014-10-19 11:43 编辑

移植好的源码下载:http://download.csdn.net/detail/lxj_com2006/3746433
Keil3 C51 8.18注册版下载:http://download.csdn.net/detail/lxj_com2006/3746501
网络抓包工具下载:http://download.csdn.net/detail/lxj_com2006/3746594

1? ?? ?概述:网络上关于uIP协议栈的文章不少,大多是讲解自带的http服务器为例子,没有过多的说明作为CS客户端在实际中的应用。
本文主要讲述ENC28J60和uIP协议栈作为CS模式在客户端的应用,即采用主动连接与服务器进行用户数据交互,保持长连接,支持自动重连。
编译器:Keil3 C51 8.18
uIP版本:0.9
ENC28J60:ENC28J60-I/SO??28-Lead SOIC
单片机:SST89E516RD(1K RAM,64K program ROM 支持在线仿真,兼容51单片机)
? ?? ?? ?? ?? ?? ? STC89C58RD+ (512 RAM??32K program ROM)烧录测试

特点:查询方式收包,定时更新ARP缓存表,协议栈、收、发共用缓存(内存开销少)
事件回调函数uip_appcall()
支持ICMP/TCP/UDP,端口监听,主/被动连接
2? ?? ?代码文件结构图:2.1? ? 文件列表:

2.2? ? 代码流程图:

3? ?? ?系统开销:
对于一个完成的TCP /IP协议栈来说,uIP算占用资源比较少的,根据实际应用,本例将去除了demo程序中自带的http服务器,fs部分,将连接数、监听端口表、ARP缓存表大小都设置为1,关掉日志,统计信息,重组包,把系统开销降到更低。

下表描述uIP系统主要开销情况(估算):
RAM(内存空间):334字节左右

其它全局变量60(左右)
连接状态 28*1,ARP缓存表11*1,
协议栈收,发共用缓存233+2(可设置,由单片机内存而定

对应代码位置:

注:实际用户数据空间需要减去40(等其它扩展)字节的TCP/IP头,剩下安全字节179左右,而TCP包用户数据可以达到1460字节,uIP设置了分割包大小为安全字节(见iris抓包),服务端(如:windows)会自动将大包拆分成小包发送<=179每包,所以服务端发送大于179字节的用户数据时,客户端需要重新组包。

uIP用户数据单包大小:

IRIS抓包(设置用户数据分割片大小):





SP(栈空间):40字节左右(最大时)

uIP充分考虑到节约内存,大部分接口函数用宏实现,即加大程序的存储空间换取更小的栈空间,协议栈核心函数基本由uip_process()一个函数完成,几乎只有几个局部变量,函数调用参数也很少,除uip_appcall外(由用户决定),其它几个子函数无嵌套调用。


ROM(程序空间):12K左右

uIP自带http演示程序编译后bin文件大小在20K左右,本例去掉了http部分,已经压缩到12K左右,所以选型单片机时ROM至少在16K以上

网卡IO脚:最少占用才4个,最多7个(包括RST)


如果自己新建工程使用本例代码,请将工程属性“Target->Memocy Mode”设置成:Large: variables in XDATA,即使用最大外部内存,否则将产生编译错误,提示内存不足,因为uIP的RAM开销超过了单片机内部内存128字节(超出mov寻址范围),所以需要movx来完成更多内存访问,有些单片机都内置了外存,打开此选项,Keil C51??C编译器会自动完成外部内存访问。



4? ?? ?网卡硬件原理图:下图为ENC28J60网卡的参考设计图,SCK,CS,SO,SI直接PIN TO PIN接到单片机(SI和SO不需要反接,不同于串口的是SPI的SO,SI都是相对于slave而言的),有些单片自带SPI接口,例如本例中使用的SST89E516RD,但我们程序中仍然采用IO口模拟SPI方式,通用性更好。


5? ?? ?SPI接口驱动:本例SPI接口采用单片机IO口模拟,只需根据实际的硬件电路设计(IO口需要上/下拉电阻),在spi.h文件中修改IO脚定义即可,需要注意的是ENC28J60采用SPI0模式,即时钟信号上升沿接收数据,下降沿发送数据,本例中SPI通讯时序已经调通,可以直接使用,至少要接SCK,CS,SI,SO即可,INT没有使用,可以不接,如果接上,ENC28J60驱动代码已经开启了接收中断,程序中可以接收到,但在使用中断模式时,请考虑收,发包的同步情况,比如:网卡支持全双工模式,正在发送包时,又收到一个包产生中断,而uIP协议栈是共用缓存的(为节约内存),如果再次去调用协议栈,会将协议栈缓存出错。
spi.h


SPI相关讯息请参考其它资料,本例略。

6? ?? ?ENC28J60驱动:ENC28J60除初始化enc28j60_init()外,还需要提供两个主要原生数据收发接口函数给uIP协议栈:enc28j60PacketReceive()网卡收数据,enc28j60PacketSend()网卡发数据。

本例中ENC28J60驱动已经调试成功,可以直接使用,在此只做简单说明,更详细请参考相关手册。



注:ENC28J60初始化会等待网卡应答,错误无法进入系统。
7? ?? ?uIP协议栈TCP应用demo:7.1? ? uIP代码结构:

7.2? ? main.c代码说明:



8? ?? ?应用程序接口uip_appcall():对于处理应用数据的用户,对uIP整个流程做一个了解即可,uIP将处理后的结果全部都回调到uip_appcall()函数统一处理,所以重点需要完成的工作全部在uip_appcall()函数中,以下介绍一个demo代码:

已开启主动连接功能uip.h 行300??#define UIP_ACTIVE_OPEN 1



8.1? ? uip_send 使用举例:uip_send(uip_appdata,sprintf((char*)uip_appdata,"%s","Hello,Iconnected to you! thanks"));

uip_send("idle",4);

注:uip_send并没有真正将数据发送到物理网卡,也不保证数据正确到达,仅将数据存储到uIP协议栈中,由uIP来决定发送到物理网卡(空闲时),结果将产生回调,根据事件代码进行相应处理,如:收到ACK,可继续下一包,超时重连,重发等。
9? ?? ?配置参数:实际应用中MAC地址,IP地址,网关地址,服务器地址,端口号,应该是可以动态设置的,而MAC,IP地址(除VLAN外)在同一网络中必须是唯一的,否则导致网络不可用。

MAC地址可以在烧录程序时让烧录程序(或烧录器)自动加一,写到ROM固定位置,出厂时就设定好,但是MAC地址是有标准的,去IEEE申请还没有这个必要,可以借用其它厂家的,或是用01:02:34:56:78:90:AB这样累加的地址,但MAC地址冲突或不可用这种情况是会有的,比如有些交换机是会拒接一些MAC地址的,还有就是与部分网卡MAC冲突等。

本机IP,服务器IP,网关,端口号这些地址必须是可供用户修改的,出厂时无法确定用户的网络环境,需要提供UI供用户修改并保存到E2PROM或其它Flash中。

以下为各自参数配置代码位置:
9.1? ? 用户设定:初始化时将从E2PROM或flash中读取的设置参数替换以下处即可:

9.2? ? 固定(仅供测试):以下是固定地址,由编译时决定,出厂后无法修改,不建议使用:


10? ?? ?? ?? ?uIP协议栈事件列表:见uip.h 行:493-600,大部分事件已在demo代码中描述。
uipotp.h uIP协议栈的配置参数
11? ?? ?? ?? ?常见问题:测试中发现windows操作系统,会出现TCP checksum错误,导致丢包现象,是由于网卡硬件校验原因:

解决办法:
网卡配置->高级->Rx Checksum Offload/Tx Checksum Offload,很可能你的这两处设置是Enable,将之调整成Disable即可,代价是网络性能降低。

一般由操作系统的TCP/IP协议栈完成TCP/UDP/IP校验和的计算工作,这两处设置成Enable之后,协议栈不再进行校验和的计算,而是由网卡自己完成。如果在前述位置没有发现Rx Checksum Offload/Tx Checksum Offload项,有两种可能,一种是网卡本身不支持这种功能,另一种是网卡驱动未提供配置项,后一种情形居多。


人生到处知何似,应似飞鸿踏雪泥。

1

帖子

0

主题

11

金币

新手上路

Rank: 1

积分
12
推荐
发表于 2014-10-26 21:06:51 | 只看该作者
楼主讲的不错

11

帖子

0

主题

88

金币

注册会员

Rank: 2

积分
99
板凳
发表于 2015-1-12 23:29:28 | 只看该作者
Very good data, nice job !!!!

6

帖子

0

主题

11

金币

新手上路

Rank: 1

积分
25
地板
发表于 2015-3-6 15:55:56 | 只看该作者
很好,就是现在有些网络都不支持10M的

15

帖子

0

主题

15

金币

新手上路

Rank: 1

积分
34
5#
发表于 2015-7-14 22:33:28 | 只看该作者
好人好帖!

1

帖子

0

主题

8

金币

新手上路

Rank: 1

积分
9
6#
发表于 2015-8-11 11:04:40 | 只看该作者
讲得很好

29

帖子

1

主题

21

金币

注册会员

Rank: 2

积分
50
7#
发表于 2015-8-20 09:29:19 | 只看该作者
强大帖....

19

帖子

0

主题

6

金币

新手上路

Rank: 1

积分
29
8#
发表于 2015-8-20 18:06:00 | 只看该作者
很强大很好~~~~~~~~~~~~~~~~~

19

帖子

0

主题

20

金币

注册会员

Rank: 2

积分
71
9#
发表于 2015-9-3 00:28:52 | 只看该作者
可以看看啊,

11

帖子

0

主题

48

金币

注册会员

Rank: 2

积分
77
10#
发表于 2015-10-13 10:05:10 | 只看该作者
haogaoshen

3

帖子

0

主题

2

金币

新手上路

Rank: 1

积分
11
11#
发表于 2015-10-27 19:52:53 | 只看该作者
很好很强大,楼主值得大家学习!

27

帖子

0

主题

26

金币

注册会员

Rank: 2

积分
89
12#
发表于 2015-11-3 11:02:44 | 只看该作者
好东西啊!? ?好东西,收藏

16

帖子

0

主题

20

金币

注册会员

Rank: 2

积分
62
13#
发表于 2015-12-2 07:54:51 | 只看该作者
赚取金币,下载文件

36

帖子

0

主题

7

金币

注册会员

Rank: 2

积分
79
14#
发表于 2015-12-2 17:43:53 | 只看该作者
很好很强大,值得收藏

3

帖子

0

主题

0

金币

新手上路

Rank: 1

积分
9
15#
发表于 2015-12-3 13:49:19 | 只看该作者
马上会用到,先收藏下来

59

帖子

15

主题

91

金币

中级会员

Rank: 3Rank: 3

积分
406
16#
发表于 2015-12-8 08:45:11 | 只看该作者
:):)

3

帖子

0

主题

6

金币

新手上路

Rank: 1

积分
15
17#
发表于 2015-12-28 12:28:49 | 只看该作者
求分享,好东西呀,求分享

68

帖子

0

主题

56

金币

新手上路

Rank: 1

积分
250
18#
发表于 2015-12-31 15:38:28 | 只看该作者
很好的资料,楼主厉害

16

帖子

1

主题

6

金币

新手上路

Rank: 1

积分
40
19#
发表于 2016-1-26 21:10:32 | 只看该作者
非常好的资料啊

27

帖子

0

主题

8

金币

注册会员

Rank: 2

积分
65
20#
发表于 2016-2-5 09:58:23 | 只看该作者
很好,就是现在有些网络都不支持10M的

11

帖子

0

主题

2

金币

新手上路

Rank: 1

积分
25
21#
发表于 2016-2-24 16:41:16 | 只看该作者
MCU51单片机uIP协议栈

18

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
36
22#
发表于 2016-3-28 11:18:10 | 只看该作者
谢谢楼主的分享

6

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
22
23#
发表于 2016-3-29 13:30:01 | 只看该作者
最近协议栈的使用遇到一些问题,到这边来取经啦~

11

帖子

3

主题

40

金币

注册会员

Rank: 2

积分
121
QQ
24#
发表于 2016-4-7 16:12:38 | 只看该作者
现在都是100M,大家可以试下DM9051NP,SPI接口,支持10/100M。
Davicom芯片技术支持??深圳侨峰科技QQ:1372281542 免费的技术支持,专家解答排除故障

36

帖子

0

主题

27

金币

注册会员

Rank: 2

积分
119
25#
发表于 2016-8-6 10:55:36 | 只看该作者

很强大很好~~~~~~~~~~~~~~~~~

17

帖子

0

主题

0

金币

新手上路

Rank: 1

积分
47
26#
发表于 2016-9-10 10:27:51 | 只看该作者
谢谢。好资料。

14

帖子

0

主题

10

金币

新手上路

Rank: 1

积分
44
27#
发表于 2016-10-12 10:49:42 | 只看该作者
谢谢楼主分享,学习了

196

帖子

1

主题

1961

金币

金牌会员

Rank: 6Rank: 6

积分
2508
28#
发表于 2016-10-28 11:58:07 | 只看该作者
mark 一下,有时间研究。先赚金币

3

帖子

0

主题

7

金币

新手上路

Rank: 1

积分
16
29#
发表于 2016-11-7 10:50:47 | 只看该作者
学习了,先收下

6

帖子

0

主题

8

金币

新手上路

Rank: 1

积分
26
30#
发表于 2016-11-15 10:38:36 | 只看该作者
这个比较详细? ? 不错

1

帖子

0

主题

20

金币

新手上路

Rank: 1

积分
23
31#
发表于 2016-11-22 20:30:41 | 只看该作者
非常不错哥我爱你

196

帖子

1

主题

1961

金币

金牌会员

Rank: 6Rank: 6

积分
2508
32#
发表于 2016-11-23 09:09:36 | 只看该作者
先收藏再说。有时间在看看

13

帖子

0

主题

91

金币

注册会员

Rank: 2

积分
118
33#
发表于 2017-1-10 15:24:00 | 只看该作者
谢谢分享,备用。

4

帖子

0

主题

5

金币

新手上路

Rank: 1

积分
17
34#
发表于 2017-2-7 13:58:04 | 只看该作者
先收藏再说。有时间在看看

8

帖子

0

主题

35

金币

注册会员

Rank: 2

积分
59
35#
发表于 2017-2-22 09:45:20 | 只看该作者
谢谢版主分享的各种资料!!

12

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
46
36#
发表于 2017-2-25 19:00:18 | 只看该作者
学习中。。。。。。。。。。

25

帖子

3

主题

107

金币

注册会员

Rank: 2

积分
196
37#
发表于 2017-3-9 16:38:39 | 只看该作者
必须支持? ?? ?? ?? ?? ?? ?? ???

87

帖子

16

主题

184

金币

中级会员

Rank: 3Rank: 3

积分
492
38#
发表于 2017-3-20 17:19:20 | 只看该作者
这个资料非常不错

87

帖子

16

主题

184

金币

中级会员

Rank: 3Rank: 3

积分
492
39#
发表于 2017-3-27 16:46:33 | 只看该作者
资料不错哦。。。谢谢

196

帖子

1

主题

1961

金币

金牌会员

Rank: 6Rank: 6

积分
2508
40#
发表于 2017-5-2 08:56:30 | 只看该作者
非常详细,非常适合

33

帖子

0

主题

21

金币

注册会员

Rank: 2

积分
102
41#
发表于 2017-6-18 23:11:15 | 只看该作者
料非常不错

75

帖子

0

主题

156

金币

中级会员

Rank: 3Rank: 3

积分
355
42#
发表于 2017-7-12 09:19:00 | 只看该作者
很好,就是现在有些网络都不支持10M的

32

帖子

8

主题

431

金币

管理员

Rank: 9Rank: 9Rank: 9

积分
527
QQ
43#
发表于 2018-1-31 16:25:32 | 只看该作者
? ?? ?? ?? ?? ?? ?? ?

33

帖子

0

主题

4

金币

注册会员

Rank: 2

积分
87
44#
发表于 2019-5-4 23:01:00 | 只看该作者
楼主分析得很详细
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|嵌入式以太网社区 ( 渝ICP备14007427号 )?

GMT+8, 2019-11-6 12:34 , Processed in 0.098845 second(s), 30 queries .

Powered by Discuz! X3.2

? 2001-2013 Comsenz Inc.

快速bet365体-在线体育投注_365体育投注地址_365体育投注登录 返回顶部 返回列表