由于公司需要,最近接触了w5500这款嵌入式以太网控制器

TS-W5500模块特点:

1、尺寸小:5CM*3CM
2、4层板设计并了TVS等保护IC,差分走线,保障了良好的EMC兼容性
3、5V、3V单片机都兼容
W5500
W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易
的互联网连接方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)
及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。
久经市场考验的WIZnet全硬件TCP/IP协议栈支持TCP,UDP,IPv4,ICMP,ARP,IGMP 以
及PPPoE协议。W5500内嵌32K字节片上缓存以供以太网包处理。如果你使用W5500,
你只需要一些简单的Socket编程就能实现以太网应用。这将会比其他嵌入式以太网方案
更加快捷、简便。用户可以同时使用8个硬件Socket独立通讯。
W5500提供了SPI(外设串行接口)从而能够更加容易与外设MCU整合。而且,
W5500的使用了新的高效SPI协议支持80MHz速率,从而能够更好的实现高速网络通讯。

为了减少系统能耗,W5500提供了网络唤醒模式(WOL)及掉电模式供客户选择使用。

参考资源:http://bbs.21ic.com/icview-825510-1-1.html

程序是参考飞鸿踏雪的例程,在这里我分享下跟人开发中遇到的问题及解决办法。

1、将飞鸿踏雪的文件加入到自己的工程后,初始化会死机在

/* PHY link status check */
do{
if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
printf("Unknown PHY Link stauts.\r\n");
}
}while(tmp == PHY_LINK_OFF);

这个地方。

解决办法:

检查SPI驱动程序是否配置正确,片选引脚、复位引脚是否正确配置并和实际硬件对应,这个地方出问题属于物理链路层的问题检查软件驱动和硬件接线,应该可以解决问题。

2、移植飞鸿踏雪的服务器程序进行测试,发现网络接口处的两个指示灯并未亮或闪烁,服务器程序肯定没跑通。

问题原因,公司同事在做pcb板时忘记将5500的通讯引脚和接口的通信引脚相连,经过一番周折,用导线将引脚一个一个连接上,在进行测试,指示灯终于亮了,信心大增。

3、解决通讯线问题后更新完程序,将板子用网线通过一个分线盒和电脑连接上,此时电脑连接的是路由器,IP为192.168.31.166,板子本地IP设置为192.168.123进行测试发现不能ping通,

解决办法,直接用网线将电脑和板子连接,关闭路由器,社本地IP为192.168.0.101,设置板子IP为192.168.0.100,再次进行测试,可以ping通了。完善程序中的端口配置,打开pc端tcpIP客户端,设置为tcpclient,测试连接目标板IP,可以连接上并能进行通信。

/**
  * @brief  TCP服务器
  * @retval None
  */
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)
{
   int32_t ret;
   uint16_t size = 0, sentsize=0;
   switch(getSn_SR(sn))
   {
       case SOCK_ESTABLISHED :
         if(getSn_IR(sn) & Sn_IR_CON)
         {
            printf("%d:Connected\r\n",sn);
            setSn_IR(sn,Sn_IR_CON);
         }
         if((size = getSn_RX_RSR(sn)) > 0)
         {
            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
            ret = recv(sn,buf,size);
            if(ret <= 0) return ret;
            sentsize = 0;
            while(size != sentsize)
            {
               ret = send(sn,buf+sentsize,size-sentsize);
               if(ret < 0)
               {
                  close(sn);
                  return ret;
               }
               sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
            }
         }
         break;
      case SOCK_CLOSE_WAIT :
         printf("%d:CloseWait\r\n",sn);
         if((ret=disconnect(sn)) != SOCK_OK) return ret;
         printf("%d:Closed\r\n",sn);
         break;
      case SOCK_INIT :
       printf("%d:Listen, port [%d]\r\n",sn, port);
         if( (ret = listen(sn)) != SOCK_OK) return ret;
         break;
      case SOCK_CLOSED:
         printf("%d:LBTStart\r\n",sn);
         if((ret=socket(sn,Sn_MR_TCP,port,0x00)) != sn)
            return ret;
         printf("%d:Opened\r\n",sn);
         break;
      default:
         break;
   }
   return 1;
}

4、测试将板子作为客户端,PC为服务器,移植飞鸿踏雪的例程,配置好服务器客户端端口,发现老是timeout,程序卡在

经过一顿百度,卡在此处是本地发出请求,没有应答,所以socket不会处于就绪状态。

解决办法是关闭电脑的防火墙,再次进行测试就ok了。

int32_t loopback_tcpclient(uint8_t sn, uint8_t* buf, uint16_t port)
{
   int32_t ret;
   uint16_t size = 0, sentsize=0;
   switch(getSn_SR(sn))
   {
   case SOCK_INIT :
       printf("%d:connect [%d]\r\n",sn, Server_Port);
         if(connect(sn,Server_IP,Server_Port) != SOCK_OK)
 {
disconnect(sn);
 }
         break;
       case SOCK_ESTABLISHED ://socket0Á¬½Ó½¨Á¢
         if(getSn_IR(sn) & Sn_IR_CON)
         {
            printf("%d:Connected\r\n",sn);
            setSn_IR(sn,Sn_IR_CON);
         }
         if((size = getSn_RX_RSR(sn)) > 0)
         {
            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
            ret = recv(sn,buf,size);
            if(ret <= 0) return ret;
            sentsize = 0;
            while(size != sentsize)
            {
               ret = send(sn,buf+sentsize,size-sentsize);
               if(ret < 0)
               {
                  close(sn);
                  return ret;
               }
               sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
            }
         }
         break;
      case SOCK_CLOSE_WAIT ://socket0µÈ´ý¹Ø±Õ
         printf("%d:CloseWait\r\n",sn);
         if((disconnect(sn)) != SOCK_OK) 
      break;
      case SOCK_CLOSED://socket0¹Ø±Õ£¬´ò¿ªsocket0µÄÒ»¸ö¶Ë¿Ú
         printf("%d:ClientStart\r\n",sn);
         socket(sn,Sn_MR_TCP,anyport++,0);
 if(anyport > 5000)
{
anyport=3000;
}
         printf("%d:Opened port[%d]\r\n",sn,anyport-1);
         break;
      default:
         break;
   }
   return 1;
}

至此,整个移植测试过程结束,谢谢大家交流和讨论。

关于w5500客户端和服务器的调试心得相关推荐

  1. 调试心得plc做主站(客户端)

    ##调试心得plc做主站(客户端) 调试软件,西门子博图15,PLC采用1200,协议抓包采用Wireshark抓包工具 发协议工具采用网络助手,绿色是PLC给我发的请求数据,蓝色我发的报文格式, 1 ...

  2. Windows网络编程入门:简单的客户端和服务器通信程序调试

    昨日入手Windows网络编程经络这本书,第一章给了Echo客户端和服务器的简单通信实例程序.从小白到入门目测都是比较苦逼,居然想不到怎么来测试结果.什么同时运行啊.分别编译运行啊乱七八糟的想法就开始 ...

  3. 客户端显示服务器图片不显示,客户端请求服务器图片不显示

    客户端请求服务器图片不显示 内容精选 换一换 已成功登录鲲鹏代码迁移工具.只有管理员用户(portadmin)可以执行生成CSR文件.导入web服务器证书.重启和更换工作密钥的操作.普通用户只能查看w ...

  4. 在线服务器和客户端聊天,实验三、客户端和服务器能实现简单的聊天功能

    <实验三.客户端和服务器能实现简单的聊天功能>由会员分享,可在线阅读,更多相关<实验三.客户端和服务器能实现简单的聊天功能(6页珍藏版)>请在人人文库网上搜索. 1.实验三.客 ...

  5. 客户端和服务器之间的信息结构,客户端和服务器之间的信息结构

    客户端和服务器之间的信息结构 内容精选 换一换 说明:Web Service客户端和服务器间使用相同的编码方式,是为了防止出现乱码现象,也是实施输入校验的基础.安全加固:web server响应消息统 ...

  6. 手游遭遇兼容性、客户端、服务器、防外挂问题如何做?

    手游遭遇兼容性.客户端.服务器.防外挂问题如何做? 本文来自Game Look,不代表本平台观点与立场(好文章分享) 这份白皮书不仅给出了目前国内手游产品遭遇的技术上的主要问题,也给出了一个推荐给开发 ...

  7. 【游戏客户端与服务器面试题】-- 2022年最新游戏客户端与服务器面试(lua篇持续更新)

    [游戏客户端与服务器面试题干货]-- 2022年度最新游戏客户端面试干货(lua篇) 文章目录 一.Lua的8种数据类型 (1) nil 类型 (2) boolean类型 (3) number类型 1 ...

  8. Qt开发的TCP客户端和服务器

    前言 自己写的demo测试程序,已通过网络调试助手验证程序是可行的,该程序界面可以切换TCP客户端和服务器,可以接收和发送信息到网络调试助手,可以切换不同的语言,项目下载地址:https://down ...

  9. python3socket非阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

最新文章

  1. SSIS中的容器和数据流—举例说明数据转换任务
  2. Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include
  3. 《Effective Java》读书笔记 Item 1:考虑静态工厂方法,而不是构造器
  4. 使用use strict指令的目的
  5. 这个TsuNAME 新漏洞可对关键 DNS 服务器发动 DDoS 攻击
  6. arcgis栅格邻域统计_运用ArcGIS进行影像分类
  7. 1017 A除以B (20 分)—PAT (Basic Level) Practice (中文)
  8. 使用KELI调试单片机代码时,一定要用Open Project的方式打开。
  9. Mybatis-Plus注解自定义sql分页查询
  10. .Net C# Newtonsoft.Json JsonSerializerSettings配置
  11. 前端常见面试题-css篇
  12. 常用的推挽输出、开漏输出、上拉输入
  13. opencv滤镜-素描
  14. python爬取公众号文章_python爬取微信公众号历史文章
  15. 欧海:海梦易商道APP是教育与商业的双创新
  16. Unity导表工具Luban插件的数据加载原理与优化
  17. 用Electron开发的Windows快捷启动工具:Dawn Launcher
  18. 大学生阅读小说网页设计模板代码 小说书籍网页作业成品 学校书籍网页制作模板 学生简单书籍阅读网站设计成品
  19. easypr arm linux,arm linux下交叉編譯EasyPR中文車牌識別系統開發(一)
  20. 如何用手机开发单片机编写51或arduino等程序?

热门文章

  1. 乌云平台发布:2014年最新十大安全风险!
  2. pid 电机控制算法
  3. 【STM32F407的DSP教程】第18章 DSP控制函数-更好用的SIN,COS计算
  4. VishwaCTF 2022 部分writeup
  5. DOS命令__ping
  6. python音乐下载器安装_python实现音乐下载器
  7. OWC绘图控件研究(轉)
  8. Liblinear库编译
  9. robot-upstart开机自启动
  10. CentOS 启动后网卡自动启动不了 的解决办法