worksnfkpynn99 发表于 2012-10-24 10:58:45

移植/熟悉过microchip TCP/IP的大虾进来帮我看看呀,求助中...

客户端使用嵌入式开发的设备(PIC18F66J60),想移植microchip TCP/IP的协议。

客户端很简单,就是向服务器IP地址为目的IP打包数据发送和接收服务器往本IP地址的数据,一切以IP地址为唯一沟通身份,不使用DHCP。
如果想达到这样的目的,需要加载哪些TCPIP的协议呀?
Announce.c
ARP.c
DHCP.c
DNS.c
Helpers.c
ICMP.c
IP.c
MPFS.c
SPIRAM.c
StackTsk.c
TCP.c
Tick.c
UDP.c
SSL.c
FTP.c
HTTP2
NBNS.c
……
对TCPIP不了解呀,大侠指点一二吧。。。。

kevin_me 发表于 2012-10-24 15:37:14

你读一下每个文件的说明,在最前面都有讲到,要实现什么功能才需要将相应的头文件include进去。
按照你的要求,TCP、IP、ARP是跑不了的
Announce.c是声明,必须。然后StackTsk.c是最主要的程序调度,必须有。

最后楼主你想使用什么协议(应用层的)需要自行编写或者使用标准的协议,常见的有HTTP,邮件、ftp等,我用过MODBUS TCP。
如果要加入ping支持,还需要把ICMP.C添加进去。
然后建议你看看官方文档AN833.

worksnfkpynn99 发表于 2012-10-24 16:01:08

kevin_me 发表于 2012-10-24 15:37 static/image/common/back.gif
你读一下每个文件的说明,在最前面都有讲到,要实现什么功能才需要将相应的头文件include进去。
按照你的要 ...

嗯嗯,说得很好,基本上现在都是这么样做。AN833文档已经看过了,里面详细描述了各协议之间的关系与功能,但我本身对TCP/IP网络没什么概念,比如我知道传输层有三种方式:TCP,UDP,ICMP,我会选择用TCP方式来传输,为什么,不知道。

你说的Announce.c我有点疑问:
这个是原协议栈里面的注释,看红色标识行。
=================================================================
* FileName:      Announce.c
* Dependencies:    UDP
* Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F, PIC32
* Compiler:      Microchip C32 v1.05 or higher
*                                        Microchip C30 v3.12 or higher
*                                        Microchip C18 v3.30 or higher
*                                        HI-TECH PICC-18 PRO 9.63PL2 or higher
* Company:         Microchip Technology, Inc.
*
* Software License Agreement
==================================================================
// Microchip Embedded Ethernet Device Discoverer server/client

如果我不使用UDP作为传输方式的话,是不是就不需要加入这个协议了呢?

worksnfkpynn99 发表于 2012-10-24 16:04:15

本帖最后由 worksnfkpynn99 于 2012-10-24 16:05 编辑

kevin_me 发表于 2012-10-24 15:37 static/image/common/back.gif
你读一下每个文件的说明,在最前面都有讲到,要实现什么功能才需要将相应的头文件include进去。
按照你的要 ...

worksnfkpynn99 发表于 2012-10-25 08:49:55

好像挺少人讨论这个问题的。。。。

kevin_me 发表于 2012-10-26 15:06:00

“如果更看中的是实时性,而不是准确性的的话,当然要选择udp了,tcp的连续性好,但是实时性差。比如视频会议都会选择udp协议来传输,因为视频里丢几帧数据对于整个图像来说没有什么大碍。”
这是我的一个工程:

kevin_me 发表于 2012-10-26 15:13:38

你可以从上图看出来,很多头文件都是不必要的,官方的工程做的大而全。我的工程对于TCP/IP这块非常简单,就是TCP、ARP、ICMP、和MODBUS TCP的应用层,而且只做服务器端。

如果你想做客户端,则需要做更多额外的工作,比如主动发送ARP、创建MAC地址池等;如果你的客户端与服务器不在一个网段,需用通过路由来转发,则要注意整个通信链路对你控制器端口的影响,做好过滤无效包、广播包什么的。

老兄你用的是ENC28J60这个片子还是ENC424 or624? 28j60这片子有bug,编程阶段你要读一读勘误表,有bug修复的指导。

djdym 发表于 2012-11-14 15:41:12

这么难, mark,下次用

worksnfkpynn99 发表于 2012-11-15 10:15:01

kevin_me 发表于 2012-10-26 15:13 static/image/common/back.gif
你可以从上图看出来,很多头文件都是不必要的,官方的工程做的大而全。我的工程对于TCP/IP这块非常简单,就 ...

我是直接使用PIC18F97J60(MCU+28J60)系列的单片机(客户端设备),现在已经完成初步的调试了,并实现了UDP的通讯方式(局域网)。使用了ARP、ICMP、UDP……等协议,支持PING响应。

谢谢你的指导。

pine222 发表于 2012-11-17 11:14:55

worksnfkpynn99 发表于 2012-11-15 10:15 static/image/common/back.gif
我是直接使用PIC18F97J60(MCU+28J60)系列的单片机(客户端设备),现在已经完成初步的调试了,并实现了 ...

好贴,我也在搞这个,想做个WIFI电子标签的。还是个新手,多指点啊

peter_yu 发表于 2012-11-17 11:21:40

记忆中是5年前流行过一段时间,官方出个DEMO,当时仿照外围电路软件直接烧进去,然后慢慢裁剪软件,其他就没什么了,挺简单的。

worksnfkpynn99 发表于 2012-11-17 12:49:11

peter_yu 发表于 2012-11-17 11:21 static/image/common/back.gif
记忆中是5年前流行过一段时间,官方出个DEMO,当时仿照外围电路软件直接烧进去,然后慢慢裁剪软件,其他就 ...

我也差不多是这么样做的,可以很讯速地装载TCPIP协议。

但之后修改的时候会出现这样那样的问题。感觉暂时官方论坛才有人讨论,所以遇到问题的时候,寻求帮助也是件痛苦的事。

peter_yu 发表于 2012-11-19 09:11:49

建议先了解一下有关以太网及TCPIP协议的基础文档,应用中选择对自己有用的部分就可以了,他就像WORD软件,相当部分的功能可能这辈子你也不会去用。TCPIP协议栈是很复杂的,如果是工业应用,建议选择硬件协议栈芯片,或者买标准模块,研华、MOSA等,对价格敏感的话选国内的。

Wxy8030 发表于 2012-11-19 17:20:04

官方的东西不允许商业化的吧 ........ 你们这么用也属于盗版了 ......

shjw 发表于 2012-11-22 09:56:34

大家说的都这么简单,哎对我打击很大。一个产品领导说要实现以太网(我感觉可以不实现,意义不大),时间也不充裕,现在我根本不知道怎么办。CPU用PIC32mx575,网络芯片用ENC424J600,菜鸟我还是第一次用PIC32,智商又低{:dizzy:}

justkan 发表于 2012-12-17 23:10:33

Wxy8030 发表于 2012-11-19 17:20 static/image/common/back.gif
官方的东西不允许商业化的吧 ........ 你们这么用也属于盗版了 ......

好像是使用他家的器件就OK的。

worksnfkpynn99 发表于 2012-12-25 20:06:58

Wxy8030 发表于 2012-11-19 17:20 static/image/common/back.gif
官方的东西不允许商业化的吧 ........ 你们这么用也属于盗版了 ......

人家都公开下载,如果你不是做到跨国公司跑去美国抢microchip的饭碗,就一沧海一粟的小公司,谁有那闲功夫去查你是不是用的他家的microchip TCPIP ?更何况这还是在中国?
苹果为什么老找三星打官司,但中国高仿的苹果的,周街都是,明目张胆在柜台摆卖,为什么苹果找他们的茬?一个道理。

只是题外话,仅代表个人看法。

worksnfkpynn99 发表于 2013-2-4 16:55:42

本帖最后由 worksnfkpynn99 于 2013-2-4 17:02 编辑

问题:最近使用Microchip TCP/IP协议栈,在应用UDP通讯的时候,偶尔会出现读不到数据的情况。(感觉每次出现这种情况都是在当:设备发送数据,服务器立马(100ms内)回复的时候设备就一直读不到了。)

平台:MPLAB V8.86
编译器:MPLAB C18 V3.44
设备硬件:PIC18F66J60
工作方式是:设备通过UDP的方式与远端服务器进行数据交换。指定收发端口号为:8889/8890,指定服务器的IP地址和MAC地址。

不知道有没有研究过Microchip TCP/IP协议栈的大侠,下面是我的UDP收发代码,参考的是Announce.c 文件里"void DiscoveryTask(void );" 程序结构:void MyUDPTask(void)
{
         static enum {
                   MyUDP_HOME = 0,
                   MyUDP_READ,
                   MyUDP_SEND,
                   MyUDP_DISABLED
         } MyUDPSM = MyUDP_HOME;
   
         static UDP_SOCKET          MySocket;
         NODE_INFO            Remote;
   
         switch(MyUDPSM)
         {
                   case MyUDP_HOME:
                            if(!MACIsLinked())
                                     return;
                            if(ServerIPAddress==0xFF || ServerIPAddress==0x00)
                            {
                                     memset(&Remote, 0xFF, sizeof(Remote));
                            }
                            else
                            {
                                     //only read from or send to my server.
                                     Remote.MACAddr.v=ServerMACAddress;
                                     Remote.MACAddr.v=ServerMACAddress;
                                     Remote.MACAddr.v=ServerMACAddress;
                                     Remote.MACAddr.v=ServerMACAddress;
                                     Remote.MACAddr.v=ServerMACAddress;
                                     Remote.MACAddr.v=ServerMACAddress;
                                     Remote.IPAddr.Val = ServerIPAddress;
                                     Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress;
                                     Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress;
                                     Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress;
                            }
                            MySocket = UDPOpenEx((DWORD)&Remote,UDP_OPEN_NODE_INFO,UDPREAD_PORT,UDPSEND_PORT);
                            if(MySocket == INVALID_UDP_SOCKET)
                                     return;
                            else
                                     MyUDPSM = MyUDP_READ;
                            break;
                   case MyUDP_READ:
                            if(!UDPIsGetReady(MySocket))
                            {
                                     if(RXTimes>30)
                                             MyUDPSM = MyUDP_SEND;
                                     else
                                             RXTimes++;
                                     return;
                            }
                            UDPGetArray(ReadBuffer,64);
                            UDPDiscard();
                            //Here is my read app.
                            for(i=0;i<64;i++)
                            {
                                     ReadBuffer = 0x00;
                            }
                            MyUDPSM = MyUDP_SEND;
                   case MyUDP_SEND:
                            if(!UDPIsPutReady(MySocket))
                            {
                                     return;
                            }
                            //Here is my send app   
                            UDPPutArray((BYTE*)&SendBuffer,64);
                            UDPFlush();
                            for(i=0;i<64;i++)
                            {
                                     SendBuffer = 0x00;
                            }   
                            MyUDPSM = MyUDP_DISABLED;   
                            break;
                   case MyUDP_DISABLED:
                            RXTimes = 0;
                            UDPClose(MySocket);
                            MyUDPSM = MyUDP_HOME;
                            break;
         }
} 有知晓的友友帮我看看,貌似不知道哪里不对,一头雾水。。。。

Friendz 发表于 2013-2-11 21:24:55

shjw 发表于 2012-11-22 09:56 static/image/common/back.gif
大家说的都这么简单,哎对我打击很大。一个产品领导说要实现以太网(我感觉可以不实现,意义不大),时间也 ...

不太会PIC32,不过PIC32有带网络接口的开发板,买块来调通了,再照猫画虎搬到自己板子上,成功就容易些。 官方开发板的程序都是能保证好用的。

tara0809 发表于 2014-10-16 05:05:58

kevin_me 发表于 2012-10-26 15:06
“如果更看中的是实时性,而不是准确性的的话,当然要选择udp了,tcp的连续性好,但是实时性差。比如视频会 ...

本人是菜鸟,想用PIC Explorer 16和 Wi-Fi PICtail MRF24WB0MA   做一个 mudbus rtu的无线传输。
请教一下您的这个软件,是和这个相关吗?
mudbus tcp是每个frame每个frame 的传输还是多个frame 包在一起呢!
十分感激!
页: [1]
查看完整版本: 移植/熟悉过microchip TCP/IP的大虾进来帮我看看呀,求助中...