移植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 基本被我用光了,下一步是最大限度裁减它,并做个 嵌入式网页服务器 出来!
期待!!
风城少主 做的不错,我没有试过仿真。 mark mark 裤子伺候! 呵呵,期待裤子吧! 自己顶一下 呵呵,没有自己的心的体会,纯粹只是别人成功案例的show,估计裤子是没得穿了,楼主继续努力啊。 我用proteus7.2sp6打开说版本不对啊? TO: 【7楼】 kanprin 萧威
教训得是
不过不知你能不能做出来,并且把它开放出来.我搜了你发的一些贴子,你的技术并不是我想像中那么高
uip的移植上网一搜就有了,这东西难的不在移植,我前后花一天就完成了,
难点在于网络芯片驱动的编写,这东西有心得可言吗?不过是看datasheet和C的功夫.况且我的重点在应用.
至于别人成功案例,别人成功了,你就能成功吗?看下【8楼】就知道了;
写那么多,可能已经得罪你了,你的积分是我的十倍,你应该是我的前辈,我才读大三,希望大人不记小人过 支持楼主楼主发帖很辛苦的。
至少让我知道什么是UIP 别的不重要,重要的是自己理解了,应用了就好! 9楼朋友,你说的很对,我的技术确实很烂,所以对论坛的索取一直都是大于贡献的。
技术论坛的交流,没什么好得罪不得罪的,我也不会跟论坛中的争论较劲。
论坛在我看来,只是一个技术交流,学习的平台而已。
我没有对你的努力表示否定,只是说还有些需要提高的地方而已。
我也只是说说出事实罢了,呵呵,你也别在意。
顺便说一下,你这个工程,执行make clean后再执行make会出错,
因为clean的时候把obj目录下面的子目录删除了,
而重新编译的时候没有对相应目录进行生成。
我用的是(winavr20090313),解决办法在shell中添加生成相应目录
再有,符合大家使用习惯(ADSL用户),何不把测试的IP改为192.168.1.80,
反而要把电脑IP改为192.168.0.90 ?在uip_cfg.h中可改默认配置,当然也可以通过接口设置。
这样玩起来不是更方便些 ?
至于我说的心得,每个人学新东西的时候都会有心得体会,你说没有,那我也不会跟你争论,呵呵。
至于你说的,8楼的问题,
高版本画的图在低版本打不开那是很正常的事情。
错误提示好好看懂就行了。
总体来说,在学校能静下心来去学习这些东西,我是很欣赏你的,也很看好你。 TO:【12楼】 kanprin 萧威
最近感情问题,所以心情不太好,在此,为我在8楼的发言向你说声对不起
你说到makeclean的问题,是由于我写makefile时的疏忽,因为我不怎么用这个命令,
一般我都是直接makeall的,这个工程用了一天,时间有点紧,所以来不及改正它
我一直都用校园网,IP都自动分配的,至于ADSL的IP的分配问题,我是实在不知道,
为了节省RAM,和一般都不改变IP,所以IP与MAC都只能在uip_cfg.h中配置,当然也可以改uipopt.h文件的配置实现动态配置 cool 以前我电脑上都可以跑PROTEUS仿真网络芯片,最近不知道怎么回事
仿真不了,看来得重装下系统了 楼主真是强啊!小弟正想学习这个,弄了半天,还是一头雾水,能不能请楼主抽时间把你的学习和移植的过程稍微写一下,小弟不胜感激!
邮箱:dreammengmianren@163.com 顶一下 【16楼】 ymofashi
UIP的结构不太好,学习起来是比较难摸到作者的门路的,不过移植就很简单,重点是在网络驱动的编写上
最近考试很多,学习和移植的过程考完试再写吧 至于网页服务器为何迟迟未出来,是因为我想加入一个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 mark mark mark 【18楼】 wyoujtg
谢谢,你的帖子对我的启发很大! 好!给楼主打打气 刚才有同学试了 发现了编译的问题 我试了下 确实!
上面已经给出解决办法但有些同学看不懂
于是我把要添加的内容贴出来:
在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)
这样来清理啦...要是用了就要创建好... 改成 $(REMOVEDIR) $(OBJ)
也行 其实我也喜欢整个目录清理掉....不留下任何东西.... 哈哈,今天搬到了实验室,环境不错,经过一天的努力终于把 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,不要被图迷惑了 试试RT-Thread + LwIP吧,在lpc2106上应该可以运行得非常好,如果能够支持SD卡的话可以把RT-Thread支持的那个web server也给加进来,这个web server是很强劲的! 刚刚搞定了lwip,性能好了一点,
但程序的规模较大,我已经有点难以控制了,这些东西就是这个样子,不同的东西组合在一起,真是剪不断理还乱
SD卡的仿真对我来说并不是难事,但可能还要写个上位机软件来为SD卡镜象文件添加文件,要做的事还是很多的
考完试了,搬到实验室,专注了不少,东西出来也就快,
至于rt-thread+lwip,如果要支持web server是不是只能在GCC下编译?如果用MDK,那我就可以试试了
风城少主 移植Lwip-1.3.0到LPC2106+ENC28J60及其Proteus仿真
发布于:
http://sites.google.com/site/jiaojinxing/lwip-1-3-0yi-zhi-daolpc2106-enc28j60ji-qiproteus-fang-zhen Web Server用mdk也可以编译,和编译器没什么关系
而且lpc2106最好用我优化过的lwip,否则内存占用比较大。 移植Lwip-1.3.0到LPC2106+ENC28J60及其Proteus仿真
发布于:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3349143&bbs_id=1032
想学Lwip的同志们顶起 很好! ffxz能不能传些资料给小弟,在你网站上下载的pdf有些打不开了,还有rt-thread v0.3.0支持Web Server 和 ftpd这是我最想见到的,为何在发布的stm32版没它们的源码?
争取今把ucos换成rt-thread v0.3.0 我们QQ谈吧 楼主解释的很详细,辛苦了 wyoujtg你好,我和一个朋友用IAR实现了在M64上的移植,外扩RAM,硬件也已经搞定了,如果感兴趣,我们可以一起研究,再完善一下UIP,而且现在有更新版本UIP,支持JAVA script.因为上面还缺医个协议,就是SNMP协议。我现在想在FPGA上实现做高速的处理,我的邮件 新的UIP很强悍,比LWIP更强,我和我的朋友已经开始研究新的UIP了,希望一起研究,减少时间。我的邮件:chinafpga@yahoo.com,期待你的回复。 楼主:你好 我现在想做一个以太网转RS232和485 不只用你的方案是否可行另外你讲的conf.h 文件在哪个目录下我在UIP 下找不到 请你帮忙一下谢了! 代码可以直接编译吗?我试了不行,错误一大把 mark 标记一下! 支持楼主,感谢楼主分享经验!
我正考虑是不是做这个实验,但心里没底。
看到楼主成功,我也可以开始动手了! 试下看看。 mark 回复【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页面的哦/... mark mark 试一试发现怎么不行呀 mark 好东西..mark; mark 楼主强悍!
【40楼】 weeren 倘余清,居然有新的UIP,我得去找找。 收藏了。 感谢楼主分享呵呵 mark COOL! mark 最近正在搞这个,做个记号先 下载了在机器上运行,怎么ping不通,需要什么特殊设置吗? MARK mark 这个鸟人连图也不放上来。不知真还是假的。 还到处乱贴 mark mark MARK mark mark mark 引用图片【楼主位】wyoujtg
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_435700.jpg
(原文件名:未命名1.jpg) 引用图片【楼主位】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) gei hou mark mark 黑不好意思的说:
没PING通,非常希望高人指点一下,安装了WINPCAP和PROTEUS 7.4SP3,设置本机IP和mask(网关不设?)。
运行PROTEUS,终端窗口中显示了HALLO world!
在开始-》运行 输入 ping -t 192.168.0.80
就是楼主的hex和dsn。不知道哪里没注意到。没PING通。
是不是WINPCAP安装不成功? mark mark 不错..谢谢分享! MARK MARK LZ发的两个例子,仿真都不成功,看看人家老外发的例子,说能仿真就一定能仿真,哪像中国人这么糊弄和大意 不错,好好支持一下,我也要好好学习一下! 多谢楼主的分享 使用proteus仿真需要注意几个问题:
1:电脑的网卡需要禁用IPV4 checksum属性
2:如果你的电脑本身有两种网卡(有线和无线),那么ENC28J60的属性内需要设置网卡编号为2以上,因为前面的编号0和1已经被实际的网卡占用了。
我仿真的环境是proteus7.5和win7 x64 记号,准备移值 mark {:smile:} 大哥探讨一下你这个 移植uip-1.0到Atmega32+ENC28J60及其proteus仿真有没有实现udp功能,还是只是简单的ping通。 留意一个MARK mark{:smile:}{:smile:} 谢谢分享 看看。。。mark! 各位辛苦了{:smile:} 学习 这两天在学习uip,网上零碎的博文,看得我晕头转向的 mark一下,下次要用 wyoujtg 发表于 2009-5-16 21:34
哈哈,今天搬到了实验室,环境不错,经过一天的努力终于把 uip-1.0 移植到 LPC2106 + ENC28J60 ,
其实目标 ...
我运行下!!! proteus !! ping 可能 192.168.0.80 通!! 但是 打开webserver! 就网页无法打开!! 为什么啦? 程序 都是下你的 复件 Proreus里面的uCOS-II! 我webserver 提示 uip log message :tcp:bad checksum是个是为什么啦?
页:
[1]
2