wyoujtg 发表于 2009-4-12 17:49:41

移植uip-1.0到Atmega32+ENC28J60及其proteus仿真

近期学习TCP/IP,觉得TCP/IP 很难,难的不光是它有一套很深奥的理论,而且还有很多细节。
所以光从书本上学习 TCP/IP 理论是绝对不行的,必须动手实验;实验也是个问题,你得有两台电脑亚!

不过,另一台电脑可以通过仿真来实现;仿真软件有很多不同类型,这里指的是电路仿真软件;
常用的电路仿真软件有 Proteus,我们可以用它来仿真单片机及其外围电路的运行。
新版的 Proteus (如7.2版) 就带有 enc28j60 这个网络芯片;我们可以通过 AVR 单片机来控制这个芯片,
单片机是什么?就是一台小电脑嘛!

当然,上面讲的是硬件的实现,软件呢?总不可能在 AVR 上运行一个 XP 吧!

好了,到这里我们讲解软件的实现:
这里的软件指的是 TCP/IP 协议栈,常见的 TCP/IP 协议栈有 Lwip、uip、uC/IP、uC/TCPIP,
这里就用 uip 吧!

先来简单介绍一下 uip:
uip 是一个针对8位和16位单片机的 TCP/IP 协议栈,它使用了 BSD 授权,商业也可以免费使用。
它具有速度快、占用 ROM 及 RAM 空间少的特点,一般只占用 8K 的 ROM 和 1K 的 RAM ,够小了吧!
它是 Lwip (另一轻量级 TCP/IP 协议栈)的作者写的,实力非凡,所以它的质量还是可以放心的;
同时它还具有丰富的说明文档和例子,更易于学习和使用。

要使用它就必须移植,下面是我的移植过程:

工程用 Winavr2006 建立:
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg)

1)把 uip-1.0 的所有文件加入到工程,包括 uip 目录的文件(除uip-split.c)、unix 目录的文件、lib 目录的文件;
2)修改 uip/uip-neighbor.c 文件的
void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
函数,一般注释掉 printf 语句即可,或者改为你自己的串口格式化打印实现。
3)uip 目录里的源文件除 uipopt.h 外一般都无需修改;uipopt.h 包含了 uip-conf.h ,所以大部分修改可以在
uip-conf.h 里进行。
uip-conf.h 里加入如下定义,可以减少编译的警告:
#define notdef       0
#define UIP_CONF_IPV6   0
#define UIP_ARCH_ADD32   0
#define UIP_ARCH_CHKSUM   0
#define UIP_NEIGHBOR_CONF_ADDRTYPE0
4)移植工作主要是 定时器中断程序 与 网络驱动 的编写;网络驱动是另一个开源项目—— AVRNET 中的,所以我就直接偷来用了。这里不详细讲解,请参看我的代码。
点击此处下载(含仿真) ourdev_435704.rar(文件大小:411K) (原文件名:uip_avr.rar)

新版的 Proteus (如7.2版) 带有 enc28j60 这个网络芯片;
但为了使用它,你还需要安装一个叫 WinPCap 的软件
点击此处下载 ourdev_435705.zip(文件大小:521K) (原文件名:WinPcap_4_0_2.zip)

以下这个仿真电路其实是另一个开源项目—— AVRNET 中的。
点击此处打开 ourdev_435701.jpg(文件大小:637K,只有400K以内的图片才能直接显示) (原文件名:未命名2.jpg)

修改你的电脑的IP地址为192.168.0.90,子网掩码为255.255.255.0 ;
为了测试 AVR 是否与主机连通及 UIP 是否在AVR上运行正常,首先来个 ping 测试:
1)全速运行仿真
2)在运行输入 ping -t 192.168.0.80
看到如下的话,就代表 AVR 与主机连通了 并且 UIP 在AVR上运行正常!
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435702.jpg
(原文件名:未命名4.jpg)

有了上面的“强心针”,我有理由做一个更复杂的测试!
1)把apps\telnetd目录里的文件加入到工程;
2)在uip-conf.h文件加入
   #define TELNETD_CONF_NUMLINES 1
   #define TELNETD_CONF_LINELEN 40
3)在 main 函数里加入远程登录服务器telnetd的初始化 telnetd_init();
4)全速运行仿真
5)在运行输入 telnet 192.168.0.80
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435703.jpg
(原文件名:未命名3.jpg)


来到这里,Atmega32的 RAM 基本被我用光了,下一步是最大限度裁减它,并做个 嵌入式网页服务器 出来!

期待!!
                              风城少主

asktutu 发表于 2009-4-12 17:56:23

做的不错,我没有试过仿真。

yin66 发表于 2009-4-12 18:43:40

mark

xiaozhiyong 发表于 2009-4-12 18:50:06

mark

holycat 发表于 2009-4-12 19:00:02

裤子伺候!

superyongzhe 发表于 2009-4-13 09:28:50

呵呵,期待裤子吧!

wyoujtg 发表于 2009-4-13 21:09:10

自己顶一下

kanprin 发表于 2009-4-13 22:40:50

呵呵,没有自己的心的体会,纯粹只是别人成功案例的show,估计裤子是没得穿了,楼主继续努力啊。

osky 发表于 2009-4-13 22:58:52

我用proteus7.2sp6打开说版本不对啊?

wyoujtg 发表于 2009-4-14 00:18:09

TO: 【7楼】 kanprin 萧威
教训得是
不过不知你能不能做出来,并且把它开放出来.我搜了你发的一些贴子,你的技术并不是我想像中那么高
uip的移植上网一搜就有了,这东西难的不在移植,我前后花一天就完成了,
难点在于网络芯片驱动的编写,这东西有心得可言吗?不过是看datasheet和C的功夫.况且我的重点在应用.
至于别人成功案例,别人成功了,你就能成功吗?看下【8楼】就知道了;
写那么多,可能已经得罪你了,你的积分是我的十倍,你应该是我的前辈,我才读大三,希望大人不记小人过

ilan2003 发表于 2009-4-14 08:38:40

支持楼主楼主发帖很辛苦的。
至少让我知道什么是UIP

likedev 发表于 2009-4-14 08:46:39

别的不重要,重要的是自己理解了,应用了就好!

kanprin 发表于 2009-4-14 19:01:05

9楼朋友,你说的很对,我的技术确实很烂,所以对论坛的索取一直都是大于贡献的。
技术论坛的交流,没什么好得罪不得罪的,我也不会跟论坛中的争论较劲。
论坛在我看来,只是一个技术交流,学习的平台而已。
我没有对你的努力表示否定,只是说还有些需要提高的地方而已。
我也只是说说出事实罢了,呵呵,你也别在意。

顺便说一下,你这个工程,执行make clean后再执行make会出错,
因为clean的时候把obj目录下面的子目录删除了,
而重新编译的时候没有对相应目录进行生成。
我用的是(winavr20090313),解决办法在shell中添加生成相应目录

再有,符合大家使用习惯(ADSL用户),何不把测试的IP改为192.168.1.80,
反而要把电脑IP改为192.168.0.90 ?在uip_cfg.h中可改默认配置,当然也可以通过接口设置。
这样玩起来不是更方便些 ?

至于我说的心得,每个人学新东西的时候都会有心得体会,你说没有,那我也不会跟你争论,呵呵。

至于你说的,8楼的问题,
高版本画的图在低版本打不开那是很正常的事情。
错误提示好好看懂就行了。

总体来说,在学校能静下心来去学习这些东西,我是很欣赏你的,也很看好你。

wyoujtg 发表于 2009-4-14 22:27:12

TO:【12楼】 kanprin 萧威
最近感情问题,所以心情不太好,在此,为我在8楼的发言向你说声对不起

你说到makeclean的问题,是由于我写makefile时的疏忽,因为我不怎么用这个命令,
一般我都是直接makeall的,这个工程用了一天,时间有点紧,所以来不及改正它

我一直都用校园网,IP都自动分配的,至于ADSL的IP的分配问题,我是实在不知道,

为了节省RAM,和一般都不改变IP,所以IP与MAC都只能在uip_cfg.h中配置,当然也可以改uipopt.h文件的配置实现动态配置

buffalo 发表于 2009-4-15 07:52:05

cool

l456789 发表于 2009-4-15 10:53:45

以前我电脑上都可以跑PROTEUS仿真网络芯片,最近不知道怎么回事
仿真不了,看来得重装下系统了

ymofashi 发表于 2009-4-22 14:12:21

楼主真是强啊!小弟正想学习这个,弄了半天,还是一头雾水,能不能请楼主抽时间把你的学习和移植的过程稍微写一下,小弟不胜感激!
邮箱:dreammengmianren@163.com

cuikai12345 发表于 2009-4-22 14:43:33

顶一下

wyoujtg 发表于 2009-4-27 22:46:36

【16楼】 ymofashi
UIP的结构不太好,学习起来是比较难摸到作者的门路的,不过移植就很简单,重点是在网络驱动的编写上

最近考试很多,学习和移植的过程考完试再写吧

wyoujtg 发表于 2009-4-27 22:49:51

至于网页服务器为何迟迟未出来,是因为我想加入一个MMC卡来存储网页,有关文件系统可以参看我的另一贴子

我写的FAT16文件系统和在Proteus下MMC卡仿真 【恢复】
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1975579&bbs_page_no=1&search_mode=1&search_text=文件系统&bbs_id=1000

logics 发表于 2009-4-27 23:06:16

mark

pinocchio 发表于 2009-4-27 23:21:18

mark

525133174 发表于 2009-4-27 23:54:57

mark

ymofashi 发表于 2009-4-28 12:42:39

【18楼】 wyoujtg
谢谢,你的帖子对我的启发很大!

xad74 发表于 2009-5-5 20:12:27

好!给楼主打打气

aozima 发表于 2009-5-7 20:47:30

刚才有同学试了 发现了编译的问题 我试了下 确实!
上面已经给出解决办法但有些同学看不懂
于是我把要添加的内容贴出来:
在Makefile第620行后(-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*))添加以下内容 用来创建目录

-include $(shell mkdir -p obj/apps/telnetd)
-include $(shell mkdir -p obj/lib)
-include $(shell mkdir -p obj/RS232)
-include $(shell mkdir -p obj/uip)
-include $(shell mkdir -p obj/unix)

楼主下次可记住最好不要用
        $(REMOVEDIR) $(OBJDIR)
这样来清理啦...要是用了就要创建好...

void_c 发表于 2009-5-7 20:52:01

改成      $(REMOVEDIR) $(OBJ)
也行

aozima 发表于 2009-5-7 21:00:45

其实我也喜欢整个目录清理掉....不留下任何东西....

wyoujtg 发表于 2009-5-16 21:34:39

哈哈,今天搬到了实验室,环境不错,经过一天的努力终于把 uip-1.0 移植到 LPC2106 + ENC28J60 ,
其实目标是移植 Lwip1.3.0(目前已在 44b0 上移植成功),看下面的uCOS-II就是为移植lwip准备的了
不过uip移植比较简单,所以用它来小试牛刀,Lwip的移植应该可以很快出来了

同样是使用proteus仿真

ADS1.2建的工程:
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445367.jpg
ADS1.2建的工程 (原文件名:未命名3.jpg)

仿真电路图:
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445368.jpg
仿真电路图 (原文件名:未命名4.jpg)

Ping:
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445372.jpg
(原文件名:未命名.jpg)

远程登录服务器:
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445369.jpg
telnetd (原文件名:未命名2.jpg)

代码:
点击此处下载 ourdev_445373.rar(文件大小:1.42M) (原文件名:lpc2106_uip.rar)


网页服务器(性能不太好)
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445370.jpg
httpd (原文件名:未命名1.jpg)

代码:
点击此处下载 ourdev_445374.rar(文件大小:1.47M) (原文件名:lpc2106_uip.rar)

网络芯片驱动用查询模式,因未调通中断模式,性能不太好,甚至有点不如 AVR,也不知道是不是proteus仿真lpc21xx这类arm芯片时性能不太好的原因

仿真时同样使用之前的IP: 192.168.0.80,不要被图迷惑了

ffxz 发表于 2009-5-17 07:58:47

试试RT-Thread + LwIP吧,在lpc2106上应该可以运行得非常好,如果能够支持SD卡的话可以把RT-Thread支持的那个web server也给加进来,这个web server是很强劲的!

wyoujtg 发表于 2009-5-17 09:20:52

刚刚搞定了lwip,性能好了一点,
但程序的规模较大,我已经有点难以控制了,这些东西就是这个样子,不同的东西组合在一起,真是剪不断理还乱
SD卡的仿真对我来说并不是难事,但可能还要写个上位机软件来为SD卡镜象文件添加文件,要做的事还是很多的
考完试了,搬到实验室,专注了不少,东西出来也就快,
至于rt-thread+lwip,如果要支持web server是不是只能在GCC下编译?如果用MDK,那我就可以试试了

风城少主

wyoujtg 发表于 2009-5-17 15:40:00

移植Lwip-1.3.0到LPC2106+ENC28J60及其Proteus仿真
发布于:

http://sites.google.com/site/jiaojinxing/lwip-1-3-0yi-zhi-daolpc2106-enc28j60ji-qiproteus-fang-zhen

ffxz 发表于 2009-5-17 17:03:45

Web Server用mdk也可以编译,和编译器没什么关系

而且lpc2106最好用我优化过的lwip,否则内存占用比较大。

wyoujtg 发表于 2009-5-17 21:48:08

移植Lwip-1.3.0到LPC2106+ENC28J60及其Proteus仿真

发布于:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3349143&bbs_id=1032

想学Lwip的同志们顶起

xiaowei0588 发表于 2009-5-18 08:23:03

很好!

wyoujtg 发表于 2009-5-18 12:47:11

ffxz能不能传些资料给小弟,在你网站上下载的pdf有些打不开了,还有rt-thread v0.3.0支持Web Server 和 ftpd这是我最想见到的,为何在发布的stm32版没它们的源码?

争取今把ucos换成rt-thread v0.3.0

ffxz 发表于 2009-5-18 13:17:36

我们QQ谈吧

taiwentaotwt 发表于 2009-6-19 21:31:23

楼主解释的很详细,辛苦了

weeren 发表于 2009-6-29 13:39:17

wyoujtg你好,我和一个朋友用IAR实现了在M64上的移植,外扩RAM,硬件也已经搞定了,如果感兴趣,我们可以一起研究,再完善一下UIP,而且现在有更新版本UIP,支持JAVA script.因为上面还缺医个协议,就是SNMP协议。我现在想在FPGA上实现做高速的处理,我的邮件

weeren 发表于 2009-6-29 13:42:00

新的UIP很强悍,比LWIP更强,我和我的朋友已经开始研究新的UIP了,希望一起研究,减少时间。我的邮件:chinafpga@yahoo.com,期待你的回复。

ZJC750917 发表于 2009-10-12 08:13:42

楼主:你好 我现在想做一个以太网转RS232和485 不只用你的方案是否可行另外你讲的conf.h 文件在哪个目录下我在UIP 下找不到 请你帮忙一下谢了!

wyl_e 发表于 2009-11-16 14:34:14

代码可以直接编译吗?我试了不行,错误一大把

EngKing 发表于 2009-11-27 15:45:35

mark

sunmeng29 发表于 2010-1-9 13:49:05

标记一下!

yqhpaladin123 发表于 2010-1-10 12:46:47

支持楼主,感谢楼主分享经验!
我正考虑是不是做这个实验,但心里没底。
看到楼主成功,我也可以开始动手了!

bitant 发表于 2010-1-10 13:53:36

试下看看。

lizhoubob 发表于 2010-1-10 13:57:47

mark

belial 发表于 2010-1-15 15:46:03

回复【29楼】wyoujtg
哈哈,今天搬到了实验室,环境不错,经过一天的努力终于把 uip-1.0 移植到 LPC2106 + ENC28J60 ,
其实目标是移植 Lwip1.3.0(目前已在 44b0 上移植成功),看下面的uCOS-II就是为移植lwip准备的了
不过uip移植比较简单,所以用它来小试牛刀,Lwip的移植应该可以很快出来了
同样是使用proteus仿真
ADS1.2建的工程:

<CENTER>http://cache.ourdev.cn/bbs_upload800938/files_15/ourdev_445367.jpg
ADS1.2建的工程 <FO......
-----------------------------------------------------------------------

试了试带webserver功能的那个仿真,好像只能ping通,不能打开web页面的哦/...

ldqmoon 发表于 2010-3-19 10:19:07

mark

ep1c3 发表于 2010-4-11 12:29:45

mark

wswh2o 发表于 2010-4-19 22:41:33

试一试发现怎么不行呀

zengyi703 发表于 2010-4-21 11:23:25

mark

wchp314 发表于 2010-4-21 21:47:32

好东西..mark;

alasika 发表于 2010-4-22 23:51:55

mark

zhxlx 发表于 2010-4-23 08:26:09

楼主强悍!
【40楼】 weeren 倘余清,居然有新的UIP,我得去找找。

wenwu 发表于 2010-4-23 08:44:21

收藏了。

dreamworld 发表于 2010-4-28 20:45:38

感谢楼主分享呵呵

elsonx 发表于 2010-4-28 21:48:36

mark

kingsabbit 发表于 2010-4-28 23:49:35

COOL!

orange2348 发表于 2010-4-29 08:55:26

mark

lbheibai 发表于 2010-6-30 21:56:48

最近正在搞这个,做个记号先

pinocchio 发表于 2010-7-7 17:14:46

下载了在机器上运行,怎么ping不通,需要什么特殊设置吗?

dreamfy236 发表于 2010-7-25 12:10:44

MARK

dingfeng020 发表于 2010-8-7 12:34:34

mark

chenjm 发表于 2010-8-13 16:49:42

这个鸟人连图也不放上来。不知真还是假的。

chenjm 发表于 2010-8-13 16:51:11

还到处乱贴

jielove2003 发表于 2010-9-27 10:06:03

mark

anning 发表于 2010-9-27 12:08:55

mark

idle 发表于 2010-9-27 13:16:52

MARK

jielove2003 发表于 2010-11-1 17:00:23

mark

cuikai12345 发表于 2010-11-1 20:21:41

mark

sun8406 发表于 2010-11-9 12:23:40

mark

linhonghong88 发表于 2010-11-28 15:01:59

引用图片【楼主位】wyoujtg
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg)

linhonghong88 发表于 2010-11-28 15:05:25

引用图片【楼主位】wyoujtg
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435702.jpg
(原文件名:未命名4.jpg)
引用图片【75楼】linhonghong88
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg)
引用图片【75楼】linhonghong88
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg)
引用图片【75楼】linhonghong88
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg)
引用图片【75楼】linhonghong88
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg)

peavey 发表于 2011-1-9 11:42:09

gei hou

luck851 发表于 2011-1-9 17:21:47

mark

luck851 发表于 2011-1-9 17:23:55

mark

qsbbsq 发表于 2011-1-9 19:06:00

黑不好意思的说:
    没PING通,非常希望高人指点一下,安装了WINPCAP和PROTEUS 7.4SP3,设置本机IP和mask(网关不设?)。
运行PROTEUS,终端窗口中显示了HALLO world!
    在开始-》运行 输入 ping -t 192.168.0.80
    就是楼主的hex和dsn。不知道哪里没注意到。没PING通。
是不是WINPCAP安装不成功?

zeta1989 发表于 2011-1-27 18:56:08

mark

chinaye1 发表于 2011-1-28 10:42:56

mark

xk100 发表于 2011-2-18 16:12:54

不错..谢谢分享!

avrwoo 发表于 2011-3-16 08:31:48

MARK

akmp 发表于 2011-5-5 17:37:24

MARK

zhuyt06 发表于 2011-10-13 13:49:53

LZ发的两个例子,仿真都不成功,看看人家老外发的例子,说能仿真就一定能仿真,哪像中国人这么糊弄和大意

alan_yzh 发表于 2011-12-3 23:26:09

不错,好好支持一下,我也要好好学习一下!

honey655729 发表于 2011-12-25 23:31:32

多谢楼主的分享

honey655729 发表于 2011-12-26 15:41:32

使用proteus仿真需要注意几个问题:
1:电脑的网卡需要禁用IPV4 checksum属性
2:如果你的电脑本身有两种网卡(有线和无线),那么ENC28J60的属性内需要设置网卡编号为2以上,因为前面的编号0和1已经被实际的网卡占用了。
我仿真的环境是proteus7.5和win7 x64

amazing030 发表于 2012-2-11 17:50:35

记号,准备移值

asdxb147258 发表于 2012-2-13 15:09:52

mark

dongfanghuazi 发表于 2012-4-12 10:15:55

{:smile:} 大哥探讨一下你这个 移植uip-1.0到Atmega32+ENC28J60及其proteus仿真有没有实现udp功能,还是只是简单的ping通。

linhui2012 发表于 2012-11-2 21:31:23

留意一个MARK

司马朝阳007 发表于 2012-11-3 10:43:04

mark{:smile:}{:smile:}

choovin 发表于 2012-12-16 20:04:24

谢谢分享

QQ471479588 发表于 2013-4-19 19:26:29

看看。。。mark!   

tywood 发表于 2013-6-3 15:56:03

各位辛苦了{:smile:}

zhzj2007 发表于 2013-10-18 09:39:59

学习                        

fangying712 发表于 2013-11-2 21:05:03

这两天在学习uip,网上零碎的博文,看得我晕头转向的

xingh8009 发表于 2013-11-4 07:56:36

mark一下,下次要用

bigwudan 发表于 2013-12-29 23:30:05

wyoujtg 发表于 2009-5-16 21:34
哈哈,今天搬到了实验室,环境不错,经过一天的努力终于把 uip-1.0 移植到 LPC2106 + ENC28J60 ,
其实目标 ...

我运行下!!! proteus !! ping 可能 192.168.0.80 通!! 但是 打开webserver! 就网页无法打开!! 为什么啦? 程序 都是下你的 复件 Proreus里面的uCOS-II!

bigwudan 发表于 2013-12-31 00:11:39

我webserver 提示 uip log message :tcp:bad checksum是个是为什么啦?
页: [1] 2
查看完整版本: 移植uip-1.0到Atmega32+ENC28J60及其proteus仿真