搜索
bottom↓
回复: 112

移植Microchip的TCPIP协议栈到STM32

  [复制链接]

出0入0汤圆

发表于 2013-4-11 21:52:00 | 显示全部楼层 |阅读模式
本帖最后由 qllaoda1 于 2013-4-12 09:00 编辑

最近移植了一套Microchip的协议栈到STM32+ENC28J60的系统上。
Microchip为自己的PIC系列单片机和ENC28J60等几款以太网芯片做了一个协议栈。这个协议栈跟uip,lwip之类的协议栈比起来,有几个优势:
1,特别省内存。协议栈充分利用了Microchip以太网芯片片内的RAM来存储各类数据,所以对CPU RAM消耗极小。ENC28J60可以提供4K RAM,而ENC624J600可以提供16K RAM。一套带Web server和两三个 Socket的程序,协议栈消耗的CPU RAM不到500字节,而且并不是以减小MSS为代价,也不像uip那样没有socket缓冲。
2,应用层协议丰富。HTTP,FTP,TFTP,TELNET,SNMP,DDNS,SNTP,SMTP等各类应用层协议都直接在协议栈内支持。其中HTTP还可支持SSL,SNMP可以支持V3,这在裸奔的系统里几乎是没有别的协议栈可以支持的。
3,配置灵活,可以根据需要灵活配置所需功能,简单修改一个config文件即可,而且提供图形化配置工具
4,协议栈不使用动态内存分配,不用担心内存碎片问题。
5,HTTP Server支持类似ASP的方式处理网页中的动态变量,也提供类似CGI的方式。完全支持GET.POST等各种文件操作,支持文件上传,支持web认证,支持SSL。而且支持多种文件方式提供网页文件,可以保存在CPU 代码空间,可以外挂在SPI Flash/EEPROM,也可以使用SD,U盘之类的通用文件系统。使用CPU 代码空间或EEPROM的时候,厂家提供了工具转换网页为C语言代码或EEPROM的镜像文件。工具支持网页源代码压缩,html文件的压缩率可以达到60-70%,可大大节省空间。转换的同时会自动将网页里的动态变量转换成函数框架,用户只需要在这些函数框架内添加处理代码即可。


当然,这个协议栈也有缺点,就是性能较差。这和第一个优点有关:因为很多变量都存在以太网芯片RAM里,而以太网芯片与CPU的接口是SPI,这就大大降低了性能。实测STM32F103+ENC28J60的TCP传输速度,大约每秒100K字节/秒左右,只有lwip的1/3左右,不过这个速度对于大部分网络应用来说基本还是足够了。

部分应用层协议尚未完全移植完成,但是所需的文件都已经在工程里,有兴趣的可以自己尝试。

附上几张网页效果图














本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入90汤圆

发表于 2013-4-11 22:34:23 | 显示全部楼层
最近几天天天都有TCPIP的应用源码啊,这个少见,支持下楼主,收了

出0入0汤圆

 楼主| 发表于 2013-4-11 22:45:05 | 显示全部楼层
用lwip和uip的人太多,我就玩这个没什么人用的,感觉还不错。

出0入0汤圆

发表于 2013-4-11 22:47:36 | 显示全部楼层
向楼主学习!

出0入0汤圆

发表于 2013-4-11 23:16:02 | 显示全部楼层
这个协议栈我以前就称到LM3S上了,协议支持我觉得是开源协议栈里功能最丰富的,
但有一个致命的缺陷是未做OS支持,只适于跑祼机

出0入0汤圆

 楼主| 发表于 2013-4-11 23:20:22 | 显示全部楼层
SNOOKER 发表于 2013-4-11 23:16
这个协议栈我以前就称到LM3S上了,协议支持我觉得是开源协议栈里功能最丰富的,
但有一个致命的缺陷是未做O ...

不支持OS也不算致命缺陷吧,STM32是非得跑OS,而且这个其实是可以支持OS的,厂家使用说明上也提到了如何移植到OS上。
厂家正在做的6.0版协议栈跟OS的衔接更紧密。

我以前也移植到LM3S上过,好像就是在这个论坛上发布的,不过旧的账号丢了,找不到那篇文章了。

出0入0汤圆

发表于 2013-4-11 23:34:00 | 显示全部楼层
tcp支持自动重传不?n久前看过,记得有个啥缺点

出0入0汤圆

 楼主| 发表于 2013-4-11 23:42:05 | 显示全部楼层
wswh2o 发表于 2013-4-11 23:34
tcp支持自动重传不?n久前看过,记得有个啥缺点

这个是协议栈的基本功能吧。
microchip有发送缓冲区,所以不需要应用层去处理重传,不像uip。

出0入0汤圆

发表于 2013-4-11 23:43:46 来自手机 | 显示全部楼层
我看过以前一个类似的

出0入0汤圆

 楼主| 发表于 2013-4-11 23:49:23 | 显示全部楼层
找到我以前发过的那个了,不过以前那个账号的密码搞丢了,只好重新注册了个,现在移植的这个版本比以前的那个要高一些
http://www.amobbs.com/forum.php? ... highlight=microchip

出0入0汤圆

发表于 2013-4-13 18:34:15 | 显示全部楼层
楼主高手。

出0入0汤圆

发表于 2013-4-13 23:26:46 来自手机 | 显示全部楼层
高手,

出0入0汤圆

发表于 2013-4-16 05:53:50 | 显示全部楼层
话说现在需要250片ENC28J60 /SS,全淘宝无货。。。

顺便问下,可以把你说的那个官方提供的转换工具给个链接吗?谢谢!~

出0入0汤圆

发表于 2013-4-16 07:22:31 来自手机 | 显示全部楼层
学习了,留着备用

出0入0汤圆

发表于 2013-4-16 09:13:27 | 显示全部楼层
Mark,有时间也移一移看!

出0入0汤圆

 楼主| 发表于 2013-4-16 09:20:36 | 显示全部楼层
http://www.microchip.com/stellen ... p;dDocName=en547784
补充个官方库的下载链接。现在虽然是跑在STM32上的,但大部分使用流程和官方库还是一样的,包括那个网页转换工具。

出0入0汤圆

发表于 2013-4-16 09:37:02 | 显示全部楼层
局域网的话什么协议栈都无所谓,要是广域网估计只有lwip才能保证性能。

出0入0汤圆

 楼主| 发表于 2013-4-16 09:43:07 | 显示全部楼层
ljt80158015 发表于 2013-4-16 09:37
局域网的话什么协议栈都无所谓,要是广域网估计只有lwip才能保证性能。

这个说法也太绝对了吧,局域网和广域网并没有本质的区别,无非就是广域网里丢包的概率要大一些,延迟会大一些,这些都可以用TCP协议解决。实际上lwip移植到STM32上,网上开源的代码里几乎都有各种各样的问题,别的不说,光是动态内存分配,对于单片机来说就是个隐患。

出0入0汤圆

发表于 2013-4-16 09:45:25 | 显示全部楼层
qllaoda1 发表于 2013-4-16 09:43
这个说法也太绝对了吧,局域网和广域网并没有本质的区别,无非就是广域网里丢包的概率要大一些,延迟会大 ...

lwip的动内存是lwip自己用链表做的,和用什么cpu没有什么关系啊

出0入0汤圆

发表于 2013-4-16 09:46:05 | 显示全部楼层
附上几张网页效果图

打包的里面没有这个网页呢

出0入0汤圆

发表于 2013-4-16 09:55:37 | 显示全部楼层
LWIP据说隐患很多,并且太占内存了。

出110入0汤圆

发表于 2013-4-16 10:10:30 | 显示全部楼层
做一回Mark党……

出0入0汤圆

发表于 2013-4-16 22:45:43 | 显示全部楼层
这里非常不错

出0入0汤圆

发表于 2013-4-17 00:18:56 | 显示全部楼层
收藏下~~~~

出0入0汤圆

发表于 2013-4-17 23:00:09 | 显示全部楼层
这个协议栈和uip比较,哪个好一点?

出0入0汤圆

 楼主| 发表于 2013-4-17 23:36:33 | 显示全部楼层
dayaue 发表于 2013-4-17 23:00
这个协议栈和uip比较,哪个好一点?

性能比uip好,功能比uip多,如果使用ENC28J60,消耗的RAM比uip少,其它的网卡,则消耗的RAM比uip多,代码空间比uip大。到底哪个好,需要根据具体应用环境取舍了。

出0入0汤圆

发表于 2013-4-17 23:39:38 | 显示全部楼层
qllaoda1 发表于 2013-4-16 09:43
这个说法也太绝对了吧,局域网和广域网并没有本质的区别,无非就是广域网里丢包的概率要大一些,延迟会大 ...

这个协议栈好像用轮询的方式去接收数据而不是使用中断,实时性没有达到最好。

另外6。0的栈,好像也改成动态分配内存的方式了,按你的说法是后退了

出0入0汤圆

 楼主| 发表于 2013-4-17 23:49:39 | 显示全部楼层
SNOOKER 发表于 2013-4-17 23:39
这个协议栈好像用轮询的方式去接收数据而不是使用中断,实时性没有达到最好。

另外6。0的栈,好像也改成 ...

lwip虽然是中断方式接收,但接收后也只是放在队列里,处理还是轮询方式,所以中断方式并不是造成性能差异的主要原因,其实网卡本身也有不小的接收缓冲区,完全可以保持在网卡里,要的时候再去读, lwip这种做法有点浪费CPU RAM。造成这个协议栈性能较低的主要原因在前面已经讲了,是因为要节约CPU RAM的消耗,把很多数据直接存在以太网卡芯片里了。其实低只是相对的,能到达的带宽其实已经完全可以满足绝大多数网络应用的需要了。
至于动态内存分配,有利有弊,看场合吧。

出0入0汤圆

发表于 2013-4-18 08:57:49 | 显示全部楼层
学习了,前段也用了ENC28J60,移植的是uip,做了个简单的数据转换模块,只是感觉ENC28J60的补丁太多,得对着勘误手册一条条看,这个芯片感觉用着不是很顺

出0入0汤圆

发表于 2013-4-18 08:59:53 | 显示全部楼层
  支持下,谢谢分享!

出0入0汤圆

发表于 2013-4-18 10:51:03 | 显示全部楼层
MAKR,以后留着再用!

出0入0汤圆

发表于 2013-4-27 17:30:56 | 显示全部楼层
MARK!!谢了!!

出0入0汤圆

发表于 2013-4-27 17:38:51 | 显示全部楼层
mark!

出0入0汤圆

发表于 2013-4-27 18:58:57 | 显示全部楼层
正在学习tcp, mark

出0入0汤圆

发表于 2013-4-28 09:26:17 | 显示全部楼层
qllaoda1 发表于 2013-4-17 23:36
性能比uip好,功能比uip多,如果使用ENC28J60,消耗的RAM比uip少,其它的网卡,则消耗的RAM比uip多,代码 ...

省内存?附件中的程序,编译后有12KRAM用量,不小了。

出0入0汤圆

 楼主| 发表于 2013-4-28 09:45:06 | 显示全部楼层
本帖最后由 qllaoda1 于 2013-4-28 09:46 编辑
aworker 发表于 2013-4-28 09:26
省内存?附件中的程序,编译后有12KRAM用量,不小了。


例程开放了太多的功能,而且为了提高性能,没有使用以太网芯片内的RAM,用了CPU RAM做TCP缓冲区.TCP 性能测试里,为了提高性能,也准备了很大的收发数组,所以才会用到12K RAM。
在典型的应用模式下,使用以太网芯片内RAM做数据缓冲,2-3个socket左右的连接,协议栈本身消耗的CPU RAM在500字节左右而已,也没有使用动态分配的内存,而且TX/RX MSS是1460,没有缩短到536

出70入0汤圆

发表于 2013-4-28 11:00:43 | 显示全部楼层
MARK!以后试试!

出0入0汤圆

发表于 2013-4-28 12:42:55 | 显示全部楼层
好像很强大,前来收藏备用

出0入0汤圆

发表于 2013-4-30 08:48:09 | 显示全部楼层
有没有移植到过51芯片上过?

出0入0汤圆

发表于 2013-4-30 08:52:36 | 显示全部楼层
牛呀,收下了。

出0入0汤圆

发表于 2013-4-30 09:34:07 | 显示全部楼层
非常好  谢谢楼主

出0入0汤圆

发表于 2013-4-30 22:52:29 | 显示全部楼层

出0入0汤圆

发表于 2013-4-30 23:01:44 | 显示全部楼层
恩,这个确实是个不错的建议!

出0入0汤圆

发表于 2013-4-30 23:26:56 | 显示全部楼层
mark 很好很强大

出0入0汤圆

发表于 2013-5-7 17:10:16 | 显示全部楼层
自己写堆栈协议太麻烦了,库里的程序看不懂

出0入0汤圆

发表于 2013-5-8 11:18:41 | 显示全部楼层
稍稍改了下,在stm32f103rc上成功运行,lz神人啊

出0入0汤圆

发表于 2013-5-9 00:01:51 | 显示全部楼层
非常好,顶一下

出0入0汤圆

发表于 2013-5-14 10:19:52 | 显示全部楼层
mark 下。 以前参加过mircochip的一期培训,对这个协议栈还是很感兴趣的

出0入0汤圆

发表于 2013-5-17 21:36:00 | 显示全部楼层
好东西,谢谢楼主分享。

出0入0汤圆

发表于 2013-5-17 22:18:43 | 显示全部楼层
备用,收藏

出0入0汤圆

发表于 2013-5-17 22:29:36 | 显示全部楼层
mark,

出0入0汤圆

发表于 2013-5-30 14:57:43 | 显示全部楼层
这个有人移植到51上没?
51+ENC28J60的,我看网上大多都是uip的

出0入0汤圆

发表于 2013-5-30 15:07:24 | 显示全部楼层
这个web页面不错,参考参考

出0入0汤圆

 楼主| 发表于 2013-5-30 15:28:45 | 显示全部楼层
newywx 发表于 2013-5-30 14:57
这个有人移植到51上没?
51+ENC28J60的,我看网上大多都是uip的

理论上来说,这个完全可以移植到51上的,比uip还省内存。不过最近没空搞这个,有兴趣的话可以试试。

出0入0汤圆

发表于 2013-5-30 15:54:34 | 显示全部楼层
楼主太牛了,学习

出0入0汤圆

发表于 2013-5-30 16:41:20 | 显示全部楼层
不错,赞一个。

出0入0汤圆

发表于 2013-5-30 17:19:45 | 显示全部楼层
楼主这个工程里面包含了UDP协议没有?

出0入8汤圆

发表于 2013-5-30 17:28:54 | 显示全部楼层
可以移植到小内存的芯片上

出0入0汤圆

 楼主| 发表于 2013-5-30 22:23:20 | 显示全部楼层
denike 发表于 2013-5-30 17:19
楼主这个工程里面包含了UDP协议没有?

UDP都没有怎么能算一个完整的协议栈

出0入0汤圆

发表于 2013-5-30 22:49:58 | 显示全部楼层
现在裸奔中玩TCP。。。多谢楼主

出0入0汤圆

发表于 2013-5-30 23:01:23 | 显示全部楼层
主赞美你,不知是否能写个简要的教程呢?吾等菜鸟非常感谢。

出0入0汤圆

发表于 2013-6-1 01:27:59 来自手机 | 显示全部楼层
很好,正想搞这方面。

出0入0汤圆

发表于 2013-6-1 08:42:38 来自手机 | 显示全部楼层
Mark…
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端

出0入0汤圆

发表于 2013-6-1 09:11:22 | 显示全部楼层
嗯,我的DEMO板上没有网络功能。

出0入0汤圆

发表于 2013-6-12 20:08:32 | 显示全部楼层
谢谢楼主,不知这个协议栈稳定性和可靠性如何?

出0入0汤圆

发表于 2013-6-12 20:57:12 | 显示全部楼层
感谢楼主,正在研究这个·~~~~

出0入0汤圆

发表于 2013-6-13 07:52:20 来自手机 | 显示全部楼层
强烈支持,谢谢

出0入0汤圆

发表于 2013-6-13 09:15:28 | 显示全部楼层
都是这方面的高手啊

出0入0汤圆

发表于 2013-6-25 21:16:10 | 显示全部楼层
楼主给力啊 TCPIP

出0入0汤圆

发表于 2013-6-26 10:22:51 | 显示全部楼层
谢谢楼主分享~~收藏了~

出0入0汤圆

发表于 2013-6-27 15:11:14 | 显示全部楼层
mark!!!!!!!

出0入0汤圆

发表于 2013-8-13 13:19:50 | 显示全部楼层
楼主辛苦了!!!

出0入0汤圆

发表于 2013-8-13 13:51:02 | 显示全部楼层
tantao820 发表于 2013-8-13 13:19
楼主辛苦了!!!

+10086        

出0入0汤圆

发表于 2013-8-13 20:58:35 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-8-19 17:28:12 | 显示全部楼层
请教下楼主,怎么把代码转换成二进制文件??官方的那工具怎么都用不了!

出0入0汤圆

发表于 2013-8-19 20:07:36 | 显示全部楼层
你好!看到你发的microchip TCP/IP的内容,很想跟你学习一下这个TCP/IP,现在正在看这个东西,感觉没有头绪,还望指点一下,谢谢
1

出0入0汤圆

 楼主| 发表于 2013-8-22 14:52:30 | 显示全部楼层
tantao820 发表于 2013-8-19 17:28
请教下楼主,怎么把代码转换成二进制文件??官方的那工具怎么都用不了! ...

官方那个是JAVA写的,需要JAVA运行环境

出0入0汤圆

 楼主| 发表于 2013-8-22 14:52:59 | 显示全部楼层
liubins715 发表于 2013-8-19 20:07
你好!看到你发的microchip TCP/IP的内容,很想跟你学习一下这个TCP/IP,现在正在看这个东西,感觉没有头绪 ...

参考Micorochip的使用说明即可。

出0入0汤圆

发表于 2013-8-22 16:14:40 | 显示全部楼层
楼主研究过 snmp吗 ?

出0入0汤圆

 楼主| 发表于 2013-8-23 11:59:32 | 显示全部楼层
东海傲虾 发表于 2013-8-22 16:14
楼主研究过 snmp吗 ?

Microchip的协议栈支持SNMP,用过,还比较简单的。

出0入0汤圆

发表于 2013-8-23 12:07:58 | 显示全部楼层
这个也玩啊,楼主精力充沛:)

出0入0汤圆

发表于 2013-8-23 13:19:26 | 显示全部楼层
qllaoda1 发表于 2013-8-23 11:59
Microchip的协议栈支持SNMP,用过,还比较简单的。

能给我一些参考资料吗,学习snmp的,感觉网上资料比较少呢。

出0入0汤圆

 楼主| 发表于 2013-8-23 14:52:04 | 显示全部楼层
东海傲虾 发表于 2013-8-23 13:19
能给我一些参考资料吗,学习snmp的,感觉网上资料比较少呢。

你可以参考Microchip应用库里的使用帮助,有详细步骤。我也没什么可以给你参考的资料

出0入0汤圆

发表于 2013-8-23 15:21:13 | 显示全部楼层
qllaoda1 发表于 2013-8-23 14:52
你可以参考Microchip应用库里的使用帮助,有详细步骤。我也没什么可以给你参考的资料 ...

好的,我已经在看了。

出0入0汤圆

发表于 2013-8-23 23:51:37 | 显示全部楼层
买了个ENC28J60.原来发现这个东西这么难,连资料都不知道要找什么。

好吧。保持伸手党的风格:-》马克

出0入0汤圆

发表于 2013-9-21 11:37:18 | 显示全部楼层
楼主,能共享网页转换工具吗?用网页转换工具需要修改那些文件,能弄个简易教程吗?谢谢!

出0入0汤圆

 楼主| 发表于 2013-9-23 09:39:25 | 显示全部楼层
lsz7269 发表于 2013-9-21 11:37
楼主,能共享网页转换工具吗?用网页转换工具需要修改那些文件,能弄个简易教程吗?谢谢! ...

Microchip网站上有个应用程序库,里面有这些工具,还有视频教程

出0入0汤圆

发表于 2013-9-24 09:13:32 | 显示全部楼层
你好!看你上面介绍的stm32+enc28j60速度能达到100kByte/s左右, 能不能介绍一下怎么才能达到这么大的速度呢,我现在想用stm32+enc28j60做一个TCP SERVER,当接到客户端连接后,就往客户端不停的发送数据,实际测试速度并不理想。现在已经把程序里的所有功能就关闭了,只留下tcpserver的功能。实际使用tcp 调试工具模拟客户端连接stm32,10s接收到的数据才48K左右,实在太小了。目前发送数组设置为1K,即每次发送1K数据,不做延时,想请教一下,谢谢!

出0入0汤圆

 楼主| 发表于 2013-9-24 10:58:07 | 显示全部楼层
liubins715 发表于 2013-9-24 09:13
你好!看你上面介绍的stm32+enc28j60速度能达到100kByte/s左右, 能不能介绍一下怎么才能达到这么大的速度 ...

没做什么特别处理啊,肯定你的协议栈里延时太大了

出0入0汤圆

发表于 2013-9-24 13:19:05 | 显示全部楼层
qllaoda1 发表于 2013-9-24 10:58
没做什么特别处理啊,肯定你的协议栈里延时太大了

你说的那个协议栈里的延时在哪里更改呢?我用的是你这个贴子里发的程序,协议的发送处理好像是在函数staticTask()里,看了一下,没有看到设置延时的地方,请指点一下,谢谢!

出0入0汤圆

发表于 2013-9-24 13:31:53 | 显示全部楼层
LZ高手,TCP玩熟悉了

出0入0汤圆

发表于 2013-9-24 16:17:25 | 显示全部楼层
多谢楼主分享,正需要!!!

出0入0汤圆

发表于 2013-10-31 17:16:40 | 显示全部楼层
多谢楼主分享,看来看去还是Microchip提供的网络协议栈功能丰富,使用简单!

出0入0汤圆

发表于 2013-10-31 17:23:28 | 显示全部楼层
不错,学习...............

出0入0汤圆

发表于 2013-11-22 22:33:45 | 显示全部楼层
不错,mark一下,以后看

出0入0汤圆

发表于 2013-11-22 23:52:49 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-11-23 08:51:32 | 显示全部楼层
向LZ学习,我还差得远~

出0入0汤圆

发表于 2013-11-24 11:16:59 | 显示全部楼层
mark下,谢谢

出0入0汤圆

发表于 2014-3-28 15:28:16 | 显示全部楼层
不错,谢谢分享

出0入0汤圆

发表于 2014-4-20 20:50:18 | 显示全部楼层
关于TCP/IP想请教,不知可否 q-8/4-01-84375, 谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 02:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表