嵌入式以太网社区

 找回密码
 立即注册
搜索
I2C总线监控分析仪,I2C总线数据抓取分析利器!利用Python来控制STM32USB转I2C总线适配器,数据透传!高速USB转SPI适配器,数据透传,速度快!
STM32高速USB数据传输方案,支持多系统!STM32全速USB数据传输方案,支持多系统!Flash高速烧写方案STM32 HID IAP/Bootloader升级方案
查看: 53462|回复: 207

如何移植使用W5500官方提供的最新Socket库

  [复制链接]

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
发表于 2014-10-25 18:37:05 | 显示全部楼层 |阅读模式
官方提供了W5500的最新驱动库,下载地址如下:
http://wizwiki.net/wiki/doku.php?id=products:w5500:driver
下面简单介绍下如何使用这套库
首先下载库源码,文件目录如下所示:
iolibrary_bsd.jpg
我们主要用到Ethernet文件夹下面的文件,将这些文件加入到自己的工程中,然后编译,若编译出现类似于如下错误
..\User\Ethernet\wizchip_conf.c(113): error:  #29: expected an expression
        .id                  = _WIZCHIP_ID_,
..\User\Ethernet\wizchip_conf.c(114): error:  #29: expected an expression
        .if_mode             = _WIZCHIP_IO_MODE_,
..\User\Ethernet\wizchip_conf.c(115): error:  #29: expected an expression
        .CRIS._enter         = wizchip_cris_enter,
..\User\Ethernet\wizchip_conf.c(116): error:  #29: expected an expression
        .CRIS._exit          = wizchip_cris_exit,
..\User\Ethernet\wizchip_conf.c(117): error:  #29: expected an expression
        .CS._select          = wizchip_cs_select,
..\User\Ethernet\wizchip_conf.c(118): error:  #29: expected an expression
        .CS._deselect        = wizchip_cs_deselect,
..\User\Ethernet\wizchip_conf.c(119): error:  #29: expected an expression
        .IF.BUS._read_byte   = wizchip_bus_readbyte,
..\User\Ethernet\wizchip_conf.c(120): error:  #29: expected an expression
        .IF.BUS._write_byte  = wizchip_bus_writebyte
..\User\Ethernet\wizchip_conf.c(123): warning:  #12-D: parsing restarts here after previous syntax error
        };
..\User\Ethernet\wizchip_conf.c: 1 warning, 8 errors
则需要根据自己的编译器做下设置,keil MDK设置如下所示:
设置.jpg
主要原因是Keil MDK默认设置不支持按照结构体名称初始化结构体的原因导致。

W5500和MCU是通过SPI接口通信的,库是利用如下结构体中的相关函数指针实现SPI通信和其他功能。
[C] 纯文本查看 复制代码
_WIZCHIP  WIZCHIP =
      {
      .id                  = _WIZCHIP_ID_,
      .if_mode             = _WIZCHIP_IO_MODE_,
      .CRIS._enter         = wizchip_cris_enter,
      .CRIS._exit          = wizchip_cris_exit,
      .CS._select          = wizchip_cs_select,
      .CS._deselect        = wizchip_cs_deselect,
      .IF.BUS._read_byte   = wizchip_bus_readbyte,
      .IF.BUS._write_byte  = wizchip_bus_writebyte
//    .IF.SPI._read_byte   = wizchip_spi_readbyte,
//    .IF.SPI._write_byte  = wizchip_spi_writebyte
      };


根据函数名字和库中的注释,我们这里也对要实现的函数做个简单的说明
wizchip_cris_enter :进入临界区的函数,可以不管
wizchip_cris_exit :退出临界区的函数,也可以不管
wizchip_cs_select :输出有效片选信号的函数,也就是控制CS输出低电平的函数,必须实现
wizchip_cs_deselect :控制CS输出高电平的函数,必须实现
wizchip_bus_readbyte :SPI总线读取一字节数据函数,必须实现
wizchip_bus_writebyte :SPI总线写一字节数据函数,必须实现

根据以上可知,只要实现了SPI的基本操作,移植基本完成,是不是很简单

下面我们就新建一个spi.c的文件来实现这几个函数,当然这些函数名字可以不和这个结构体里面的函数名字一样,到时候可以调用相关的函数注册下即可
[C] 纯文本查看 复制代码
/**
  ******************************************************************************
  * @file    spi.c
  * $Author: 飞鸿踏雪 $
  * $Revision: 17 $
  * $Date:: 2014-10-25 11:16:48 +0800 #$
  * @brief   SPI驱动函数实现.
  ******************************************************************************
  * @attention
  *
  *<h3><center>© Copyright 2009-2012, EmbedNet</center>
  *<center><a href="http:\\[url]www.embed-net.com[/url]">[url]http://www.embed-net.com[/url]</a></center>
  *<center>All Rights Reserved</center></h3>
  * 
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/**
  * @brief  使能SPI时钟
  * @retval None
  */
static void SPI_RCC_Configuration(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,ENABLE);
}
/**
  * @brief  配置指定SPI的引脚
  * @retval None
  */
static void SPI_GPIO_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	//PA4->CS,PA5->SCK,PA6->MISO,PA7->MOSI		 					 
	GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_5 | GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; 
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	//初始化片选输出引脚
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
}
/**
  * @brief  根据外部SPI设备配置SPI相关参数
  * @retval None
  */
void SPI_Configuration(void)
{
	SPI_InitTypeDef SPI_InitStruct;

	SPI_RCC_Configuration();

	SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
	SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;
	SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
	SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
	SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
	SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
	SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
	SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI_InitStruct.SPI_CRCPolynomial = 7;
	SPI_Init(SPI1,&SPI_InitStruct);
	
	SPI_GPIO_Configuration();

	SPI_SSOutputCmd(SPI1, ENABLE);
	SPI_Cmd(SPI1, ENABLE);
}
/**
  * @brief  写1字节数据到SPI总线
  * @param  TxData 写到总线的数据
  * @retval None
  */
void SPI_WriteByte(uint8_t TxData)
{				 
	while((SPI1->SR&SPI_I2S_FLAG_TXE)==0);	//等待发送区空		  
	SPI1->DR=TxData;	 	  									//发送一个byte 
	while((SPI1->SR&SPI_I2S_FLAG_RXNE)==0); //等待接收完一个byte  
	SPI1->DR;		
}
/**
  * @brief  从SPI总线读取1字节数据
  * @retval 读到的数据
  */
uint8_t SPI_ReadByte(void)
{			 
	while((SPI1->SR&SPI_I2S_FLAG_TXE)==0);	//等待发送区空			  
	SPI1->DR=0xFF;	 	  										//发送一个空数据产生输入数据的时钟 
	while((SPI1->SR&SPI_I2S_FLAG_RXNE)==0); //等待接收完一个byte  
	return SPI1->DR;  						    
}
/**
  * @brief  进入临界区
  * @retval None
  */
void SPI_CrisEnter(void)
{
	__set_PRIMASK(1);
}
/**
  * @brief  退出临界区
  * @retval None
  */
void SPI_CrisExit(void)
{
	__set_PRIMASK(0);
}

/**
  * @brief  片选信号输出低电平
  * @retval None
  */
void SPI_CS_Select(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_4);
}
/**
  * @brief  片选信号输出高电平
  * @retval None
  */
void SPI_CS_Deselect(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
}
/*********************************END OF FILE**********************************/



到这里,移植基本上完成。
但是这些SPI的接口函数如何跟这套库衔接呢?不用怕,库提供有这样的函数来注册,只要在主函数中调用下就可以了,具体程序如下
[C] 纯文本查看 复制代码
	// First of all, Should register SPI callback functions implemented by user for accessing WIZCHIP 
	/* Critical section callback */
	reg_wizchip_cris_cbfunc(SPI_CrisEnter, SPI_CrisExit);	//注册临界区函数
	/* Chip selection call back */
#if   _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_
	reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);//注册SPI片选信号函数
#elif _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_
	reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);  // CS must be tried with LOW.
#else
   #if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SIP_) != _WIZCHIP_IO_MODE_SIP_
      #error "Unknown _WIZCHIP_IO_MODE_"
   #else
      reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
   #endif
#endif
	/* SPI Read & Write callback function */
	reg_wizchip_spi_cbfunc(SPI_ReadByte, SPI_WriteByte);	//注册读写函数


到这里,移植工程基本完成,下面我们就将官方提供的一个loopback的测试程序移植到我们自己的工程中来,基本上也没做什么修改,下面是测试工程用到的几个测试函数
[C] 纯文本查看 复制代码
/**
  * @brief  Intialize the network information to be used in WIZCHIP
  * @retval None
  */
void network_init(void)
{
   uint8_t tmpstr[6];
	ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO);
	ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);

	// Display Network Information
	ctlwizchip(CW_GET_ID,(void*)tmpstr);
	printf("\r\n=== %s NET CONF ===\r\n",(char*)tmpstr);
	printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],
		  gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
	printf("SIP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
	printf("GAR: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
	printf("SUB: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
	printf("DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
	printf("======================\r\n");
}

/**
  * @brief  Loopback Test Example Code using ioLibrary_BSD	
  * @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;
}

/**
  * @brief  Loopback Test Example Code using ioLibrary_BSD	
  * @retval None
  */
int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port)
{
   int32_t  ret;
   uint16_t size, sentsize;
   uint8_t  destip[4];
   uint16_t destport;
   //uint8_t  packinfo = 0;
   switch(getSn_SR(sn))
   {
      case SOCK_UDP :
         if((size = getSn_RX_RSR(sn)) > 0)
         {
            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
            ret = recvfrom(sn,buf,size,destip,(uint16_t*)&destport);
            if(ret <= 0)
            {
               printf("%d: recvfrom error. %ld\r\n",sn,ret);
               return ret;
            }
            size = (uint16_t) ret;
            sentsize = 0;
            while(sentsize != size)
            {
               ret = sendto(sn,buf+sentsize,size-sentsize,destip,destport);
               if(ret < 0)
               {
                  printf("%d: sendto error. %ld\r\n",sn,ret);
                  return ret;
               }
               sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
            }
         }
         break;
      case SOCK_CLOSED:
         printf("%d:LBUStart\r\n",sn);
         if((ret=socket(sn,Sn_MR_UDP,port,0x00)) != sn)
            return ret;
         printf("%d:Opened, port [%d]\r\n",sn, port);
         break;
      default :
         break;
   }
   return 1;
}

/**
  * @brief  Loopback Test Example Code using ioLibrary_BSD	
  * @retval None
  */
void platform_init(void)
{
	SystemInit();//系统时钟初始化
	USART_Configuration();//串口1初始化
	printf("\x0c");printf("\x0c");//超级终端清屏
	printf("\033[1;40;32m");//设置超级终端背景为黑色,字符为绿色
	printf("\r\n*******************************************************************************");
	printf("\r\n************************ Copyright 2009-2014, EmbedNet ************************");
	printf("\r\n*************************** [url]http://www.embed-net.com[/url] **************************");
	printf("\r\n***************************** All Rights Reserved *****************************");
	printf("\r\n*******************************************************************************");
	printf("\r\n");
	//Config SPI
	SPI_Configuration();
	//延时初始化
	delay_init();
}


我们自己在工程中加了串口打印程序,程序运行后串口输出信息如下:
串口输出.jpg

我们ping下程序里面的IP试试
ping.jpg

能ping通,看来没什么大问题了

程序源码下载
STM32工程源码下载:
stm32_w5500_loopback.zip (776.65 KB, 下载次数: 2904)
人生到处知何似,应似飞鸿踏雪泥。
回复

使用道具 举报

32

帖子

8

主题

425

金币

管理员

Rank: 9Rank: 9Rank: 9

积分
521
QQ
发表于 2014-11-11 15:54:06 | 显示全部楼层
justloong 发表于 2014-11-11 14:44
搞定了。是没设置..\..\Drivers 这个路径。
虽搞定了,但还是不明白,能否解释一下

程序包含最上层是不是Ethernet这个文件夹?这个文件夹在什么地方才能看见?显然是Drivers这个文件夹噻,所以你要把Drivers这个文件夹包含进去...
回复 支持 0 反对 1

使用道具 举报

16

帖子

3

主题

64

金币

中级会员

Rank: 3Rank: 3

积分
217
发表于 2015-12-21 20:56:50 | 显示全部楼层
老是死在        //连接服务器        ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
                printf("%d:Socket Connect Error\r\n",SOCK_TCPS);
                while(1);

这个我也经常遇到请问有解决的吗
回复 支持 1 反对 0

使用道具 举报

31

帖子

0

主题

56

金币

注册会员

Rank: 2

积分
97
发表于 2015-8-18 17:54:39 | 显示全部楼层
要是早看到楼主的贴就好了,当时浪费了好几天弄这个
回复 支持 0 反对 1

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2016-7-21 09:53:32 | 显示全部楼层
zcllom 发表于 2016-7-20 23:15
_WIZCHIP  WIZCHIP =
      {
      .id                  = _WIZCHIP_ID_,

这个是在声明结构体变量的时候顺便给结构体里面的成员赋值,当然你在这里也可以不赋值,在后面的程序中再赋值,因为这个成员是存在的,所以调用它并不会报错,这个不是定义结构体,是定义结构体变量
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 1 反对 0

使用道具 举报

49

帖子

5

主题

155

金币

中级会员

Rank: 3Rank: 3

积分
310
发表于 2014-10-31 13:22:02 | 显示全部楼层
感谢分享               
回复 支持 1 反对 0

使用道具 举报

2

帖子

0

主题

6

金币

新手上路

Rank: 1

积分
8
发表于 2014-11-3 09:52:40 | 显示全部楼层
赞,学习了!!
回复

使用道具 举报

3

帖子

0

主题

27

金币

新手上路

Rank: 1

积分
30
发表于 2014-11-8 16:20:20 | 显示全部楼层
include.jpg

如图所诉,MDK在编译链接的时候报错,说没有这样的文件或则路径,可是我明明设置了路径,而且是正确的,但就是通不过。

但如果我把include改成 #include "wizchip_conf.h" 这样就能通过了。有谁能解释下吗?
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2014-11-8 18:37:47 | 显示全部楼层
justloong 发表于 2014-11-8 16:20
如图所诉,MDK在编译链接的时候报错,说没有这样的文件或则路径,可是我明明设置了路径,而且是正确的 ...

你没设置..\.\Drivers这样的路径
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

3

帖子

0

主题

27

金币

新手上路

Rank: 1

积分
30
发表于 2014-11-11 14:41:06 | 显示全部楼层
飞鸿踏雪 发表于 2014-11-8 18:37
你没设置..\.\Drivers这样的路径

我设置了啊,截图中有。
还是说我设置错了?
请问该如何设置
回复 支持 反对

使用道具 举报

3

帖子

0

主题

27

金币

新手上路

Rank: 1

积分
30
发表于 2014-11-11 14:44:38 | 显示全部楼层
飞鸿踏雪 发表于 2014-11-8 18:37
你没设置..\.\Drivers这样的路径

搞定了。是没设置..\..\Drivers 这个路径。
虽搞定了,但还是不明白,能否解释一下
回复 支持 反对

使用道具 举报

2

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
14
发表于 2014-11-20 10:18:57 | 显示全部楼层
我的怎么总是ping不通,ip地址都是对的,spi也是对的,网线是好的?
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2014-11-20 17:25:43 | 显示全部楼层
haohaohao 发表于 2014-11-20 10:18
我的怎么总是ping不通,ip地址都是对的,spi也是对的,网线是好的?

SPI你是如何证明是好的?用逻辑分析仪或者示波器抓了数据,并且数据也是对的?
网线是怎么接的?直接接电脑,还是接路由器,还是接交换机?
IP地址,子网掩码等设置是否和你当前网络一致?
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

2

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
14
发表于 2014-11-21 10:31:09 | 显示全部楼层
飞鸿踏雪 发表于 2014-11-20 17:25
SPI你是如何证明是好的?用逻辑分析仪或者示波器抓了数据,并且数据也是对的?
网线是怎么接的?直接接 ...

我现在用spi自己读写w5500是可以的,而且数据是正确的,我现在是问题解决了,我改的spi2,SPI_Init(SPI1, &SPI_InitStruct); 这个忘记改成spi2了,现在正在研究客服端断线重连,好像老是死在        //连接服务器        ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
                printf("%d:Socket Connect Error\r\n",SOCK_TCPS);
                while(1);
        }       
。可能是刚接触,我在好好看看。
回复 支持 反对

使用道具 举报

1

帖子

0

主题

9

金币

新手上路

Rank: 1

积分
10
发表于 2014-11-21 11:11:23 | 显示全部楼层
haohaohao 发表于 2014-11-21 10:31
我现在用spi自己读写w5500是可以的,而且数据是正确的,我现在是问题解决了,我改的spi2,SPI_Init(SPI1, ...

我这边的也是这个情况 通过打印 好像 getSn_SR(sn) 变成closed 所以 connect 跳不出来 死在那里 了 ,不知道怎么回事
回复 支持 反对

使用道具 举报

4

帖子

0

主题

66

金币

注册会员

Rank: 2

积分
76
发表于 2014-11-25 22:56:59 | 显示全部楼层
不错,顶起!
回复

使用道具 举报

3

帖子

0

主题

13

金币

新手上路

Rank: 1

积分
16
发表于 2014-12-3 21:12:34 | 显示全部楼层
wizchip_bus_readbyte,wizchip_bus_writebyte是不是应该改为wizchip_spi_readbyte,wizchip_spi_writebyte,W5500只有SPI总线,而不是通过地址和数据总线传输数据
回复 支持 反对

使用道具 举报

9

帖子

0

主题

24

金币

新手上路

Rank: 1

积分
43
发表于 2014-12-3 21:27:45 | 显示全部楼层
楼主你好,W5500的复位引脚是不是可以不用IO口控制,直接接电源还是通过电容接电源呢
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2014-12-3 21:34:01 | 显示全部楼层
llyzl0 发表于 2014-12-3 21:12
wizchip_bus_readbyte,wizchip_bus_writebyte是不是应该改为wizchip_spi_readbyte,wizchip_spi_writebyte ...

你不要被
[C] 纯文本查看 复制代码
_WIZCHIP  WIZCHIP =
      {
      .id                  = _WIZCHIP_ID_,
      .if_mode             = _WIZCHIP_IO_MODE_,
      .CRIS._enter         = wizchip_cris_enter,
      .CRIS._exit          = wizchip_cris_exit,
      .CS._select          = wizchip_cs_select,
      .CS._deselect        = wizchip_cs_deselect,
      .IF.BUS._read_byte   = wizchip_bus_readbyte,
      .IF.BUS._write_byte  = wizchip_bus_writebyte
//    .IF.SPI._read_byte   = wizchip_spi_readbyte,
//    .IF.SPI._write_byte  = wizchip_spi_writebyte
      };

这段代码迷惑,这段代码保留BUS的两个函数实际上是为了让程序不出错而这样初始化设置的,SPI的两个函数是有被赋值的,你可以跟进reg_wizchip_spi_cbfunc函数,代码如下:
[C] 纯文本查看 复制代码
void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb))
{
   while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_SPI_));
   
   if(!spi_rb || !spi_wb)
   {
      WIZCHIP.IF.SPI._read_byte   = wizchip_spi_readbyte;
      WIZCHIP.IF.SPI._write_byte  = wizchip_spi_writebyte;
   }
   else
   {
      WIZCHIP.IF.SPI._read_byte   = spi_rb;
      WIZCHIP.IF.SPI._write_byte  = spi_wb;
   }
}

这段代码实际上是注册的SPI的接口函数
还有个配置就是对WIZCHIP.if_mode的配置,你也可以跟进去看看,最终的定义是:
#define _WIZCHIP_IO_MODE_SPI_VDM_      (_WIZCHIP_IO_MODE_SPI_ + 1) /**< SPI interface mode for variable length data*/

人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2014-12-3 21:34:56 | 显示全部楼层
lzy888 发表于 2014-12-3 21:27
楼主你好,W5500的复位引脚是不是可以不用IO口控制,直接接电源还是通过电容接电源呢

我调试的时候直接悬空的,用发命令的方式进行软件复位,没用硬件复位方式
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

3

帖子

0

主题

13

金币

新手上路

Rank: 1

积分
16
发表于 2014-12-6 16:04:22 | 显示全部楼层
飞鸿踏雪 发表于 2014-12-3 21:34
你不要被
[mw_shl_code=c,true]_WIZCHIP  WIZCHIP =
      {

之前才看了两个头文件,c文件还没看,今天在wizchip_conf.c中看到WIZCHIP结构体中被定义的函数都被指向了,若自己没有在注册函数中指向函数指针的话,则WIZCHIP.IF.SPI._read_byte等函数被赋wizchip_spi_readbyte默认值
回复 支持 反对

使用道具 举报

1

帖子

0

主题

8

金币

新手上路

Rank: 1

积分
9
发表于 2014-12-6 23:12:59 | 显示全部楼层
好东西,谢谢楼主分享
回复 支持 反对

使用道具 举报

3

帖子

0

主题

13

金币

新手上路

Rank: 1

积分
16
发表于 2014-12-8 19:15:17 | 显示全部楼层
本帖最后由 llyzl0 于 2014-12-8 19:20 编辑
飞鸿踏雪 发表于 2014-12-3 21:34
你不要被
[mw_shl_code=c,true]_WIZCHIP  WIZCHIP =
      {

想问下楼主,我在用DSP实现网络通信时,SPI_CrisEnter和 SPI_CrisExit这两个临界区的函数需要用到吗?我看到嵌入式系统中才有这样的函数,如果不用临界区,会不会影响WIZNET芯片的使用?
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2014-12-8 21:06:31 | 显示全部楼层
llyzl0 发表于 2014-12-8 19:15
想问下楼主,我在用DSP实现网络通信时,SPI_CrisEnter和 SPI_CrisExit这两个临界区的函数需要用到吗?我 ...

可以不用的,应该没什么影响,最大的影响可能也只有对速度稍有影响
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

2

帖子

0

主题

35

金币

新手上路

Rank: 1

积分
37
发表于 2015-3-18 10:28:41 | 显示全部楼层
本帖最后由 DIIIIIII 于 2015-3-18 10:32 编辑

我的MDK4.7怎么没有C99? 2015-03-18_102856.png
已解决在misc controls上加--C99
回复 支持 反对

使用道具 举报

2

帖子

0

主题

35

金币

新手上路

Rank: 1

积分
37
发表于 2015-3-18 10:37:33 | 显示全部楼层
楼主,在官网上下的驱动有些文件的版本好像比这个托管的版本号高,我大致对比了一下,有些改动好像很大。我是初学者,具体的看不懂,楼主能顺便具体对比下吗?
回复 支持 反对

使用道具 举报

3

帖子

0

主题

20

金币

新手上路

Rank: 1

积分
23
发表于 2015-4-15 16:14:54 | 显示全部楼层
我用的keil MDK 4.72  在target选项中 找不到 c99 怎么办
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-4-15 19:41:22 | 显示全部楼层
jordan2005 发表于 2015-4-15 16:14
我用的keil MDK 4.72  在target选项中 找不到 c99 怎么办

换KEIL MDK5
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

3

帖子

0

主题

20

金币

新手上路

Rank: 1

积分
23
发表于 2015-4-16 10:43:47 | 显示全部楼层

找到办法了 在misc controls 中 加上“--C99” 即可编译成功
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-4-17 13:27:38 | 显示全部楼层
jordan2005 发表于 2015-4-16 10:43
找到办法了 在misc controls 中 加上“--C99” 即可编译成功

不错!我还没发现这样也可以
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

2

帖子

1

主题

18

金币

新手上路

Rank: 1

积分
20
发表于 2015-5-10 17:49:03 | 显示全部楼层
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?

wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x08, 0xdc,0x00, 0xab, 0xcd},
                             .ip = {192, 168, 1, 125},
                             .sn = {255,255,255,0},
                             .gw = {192, 168, 1, 1},
                             .dns = {0,0,0,0},
                             .dhcp = NETINFO_STATIC };

读出来是这样的  
=== W5500 NET CONF ===
MAC: 00:0C:FE:00:FF:EF
SIP: 224.252.1.127
GAR: 224.252.1.1
SUB: 255.255.255.0
DNS: 0.0.0.0

用电脑可以ping通192.168.1.125
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-5-10 22:24:44 | 显示全部楼层
new_w5500 发表于 2015-5-10 17:49
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?

wiz ...

读出的数据完全不对啊
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-5-10 22:25:49 | 显示全部楼层
new_w5500 发表于 2015-5-10 17:49
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?

wiz ...

你确认SPI配置是正确的?
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

1

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
13
发表于 2015-6-17 17:52:32 | 显示全部楼层
学习当中,很值得借鉴
回复 支持 反对

使用道具 举报

1

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
13
发表于 2015-7-9 22:09:23 | 显示全部楼层
楼主你好,我现正学习研究w5500的使用,过程中遇到了一个很纠结的问题:
官方给的soket.c中给的recv函数采用的while(1)阻塞接收数据的方式,但我的应用层设计不允许阻塞,我把while注释掉了。 测试:pc机网络调试助手为客户端。测试步骤: 1tcp连接成功  2数据收发正常  3调试助手断开本次连接   4pc机再次连接成功开始接收数据  。此时轮询非阻塞方式的recv  调试得到:在recv函数内的getSn_Rx_RSR 返回的的值特别大  接近65536。不知楼主有遇到??能指导指导?非常感谢
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-7-9 22:14:29 | 显示全部楼层
yuerbupashui 发表于 2015-7-9 22:09
楼主你好,我现正学习研究w5500的使用,过程中遇到了一个很纠结的问题:
官方给的soket.c中给的recv函数采 ...

我也改成过非阻塞方式,其实就是给一个超时时间,如果超过了这个时间还没正常连接,就返回上层代码一个错误代码,当然超时时间最好可以上层代码控制
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

15

帖子

0

主题

15

金币

新手上路

Rank: 1

积分
34
发表于 2015-7-14 22:09:14 | 显示全部楼层
感谢分享
回复

使用道具 举报

4

帖子

0

主题

17

金币

新手上路

Rank: 1

积分
21
发表于 2015-7-30 11:49:47 | 显示全部楼层
请问楼主有没有碰到连续收数据到800字节后会有1段时间接收数据不全,超过1024字节后又正常,然后2048字节后再抵达800字节又会重复
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-7-30 12:15:42 | 显示全部楼层
wjwrab0223 发表于 2015-7-30 11:49
请问楼主有没有碰到连续收数据到800字节后会有1段时间接收数据不全,超过1024字节后又正常,然后2048字节后 ...

没这样测试过...
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

4

帖子

0

主题

17

金币

新手上路

Rank: 1

积分
21
发表于 2015-7-30 12:51:09 | 显示全部楼层

有点奇怪了,每次都是很规律的800字节,然后接收只能收到第一个字节,后面几个都是FF,如果单个单个发,收到的是对的,感觉是SPI到那一段地址时不能连续读去几个字节。
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-7-30 14:59:55 | 显示全部楼层
wjwrab0223 发表于 2015-7-30 12:51
有点奇怪了,每次都是很规律的800字节,然后接收只能收到第一个字节,后面几个都是FF,如果单个单个发, ...

那你单独调试下SPI的驱动程序试试
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

17

帖子

2

主题

388

金币

中级会员

Rank: 3Rank: 3

积分
405
发表于 2015-8-4 23:45:15 | 显示全部楼层
楼主发的贴都是强贴,高
回复 支持 反对

使用道具 举报

4

帖子

0

主题

17

金币

新手上路

Rank: 1

积分
21
发表于 2015-8-5 09:31:05 | 显示全部楼层
飞鸿踏雪 发表于 2015-7-30 14:59
那你单独调试下SPI的驱动程序试试

不知道网友有没有遇到,分享下我折中的解决办法,芯片资料里也没注明,不知道是STM32和W5500不兼容还是别的原因。修改了读取缓存时的地址,强制将高的那几位置1就好了
回复 支持 反对

使用道具 举报

4

帖子

0

主题

17

金币

新手上路

Rank: 1

积分
21
发表于 2015-8-5 09:33:04 | 显示全部楼层
wjwrab0223 发表于 2015-8-5 09:31
不知道网友有没有遇到,分享下我折中的解决办法,芯片资料里也没注明,不知道是STM32和W5500不兼容还是别 ...

void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len)
{
   uint16_t i = 0;
   uint16_t j = 0;
   WIZCHIP_CRITICAL_ENTER();
   WIZCHIP.CS._select();

#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_))

   #if  ( _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_ )
      AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_);
      WIZCHIP.IF.SPI._write_byte((AddrSel& 0x00FF0000|0x00F80000) >> 16);  //强制置高位为1
                        //WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
      WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >>  8);
      WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >>  0);
      for(i = 0; i < len; i++)
        pBuf = WIZCHIP.IF.SPI._read_byte();
   #elif( _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_ )
      AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_FDM_OP_LEN4_);
      for(i = 0; i < len/4; i++, j)
      {
         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >>  8);
         WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >>  0);
         pBuf[i*4]   = WIZCHIP.IF.SPI._read_byte();
         pBuf[i*4+1] = WIZCHIP.IF.SPI._read_byte();
         pBuf[i*4+2] = WIZCHIP.IF.SPI._read_byte();            
         pBuf[i*4+3] = WIZCHIP.IF.SPI._read_byte();            
         AddrSel = WIZCHIP_OFFSET_INC(AddrSel,4);
      }
      len %= 4;      // for the rest data
      // M20131220 : remove for loop
      i *= 4;        
      if(len >= 2)
      {
         AddrSel -= 1;  // change _W5500_SPI_FDM_OP_LEN4_ to _W5500_SPI_FDM_OP_LEN2_

       //for(j = 0; j < len/2 ; j++)
         {
            WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
            WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >>  8);
            WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >>  0);
            pBuf   = WIZCHIP.IF.SPI._read_byte();
            pBuf[i+1] = WIZCHIP.IF.SPI._read_byte();
            i += 2;
            AddrSel = WIZCHIP_OFFSET_INC(AddrSel,2);
         }
      }
      len %= 2;
      if(len)
      {
        AddrSel -= 1;  // change _W5500_SPI_FDM_OP_LEN2_ to _W5500_SPI_FDM_OP_LEN1_
        WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
        WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >>  8);
        WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >>  0);
        pBuf   = WIZCHIP.IF.SPI._read_byte();
      }      
   #else
      #error "Unsupported _WIZCHIP_IO_MODE_SPI_ in W5500 !!!"
   #endif

#elif ( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) )

   #if  (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_)

   #elif(_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_)

   #else
      #error "Unsupported _WIZCHIP_IO_MODE_BUS_ in W5500 !!!"
   #endif
#else
   #error "Unknown _WIZCHIP_IO_MODE_ in W5500. !!!!"
#endif

   WIZCHIP.CS._deselect();
   WIZCHIP_CRITICAL_EXIT();
}
回复 支持 反对

使用道具 举报

48

帖子

7

主题

3

金币

注册会员

Rank: 2

积分
81
发表于 2015-8-6 15:57:49 | 显示全部楼层
谢谢分享,研究一下
回复 支持 反对

使用道具 举报

29

帖子

1

主题

11

金币

注册会员

Rank: 2

积分
65
发表于 2015-8-10 20:39:09 | 显示全部楼层
谢谢分享,研究一下
回复 支持 反对

使用道具 举报

13

帖子

0

主题

92

金币

注册会员

Rank: 2

积分
105
发表于 2015-8-17 23:48:02 | 显示全部楼层
谢谢!特别实用!
回复 支持 反对

使用道具 举报

13

帖子

0

主题

92

金币

注册会员

Rank: 2

积分
105
发表于 2015-8-17 23:48:43 | 显示全部楼层
还差一点积分!下载不了!
回复 支持 反对

使用道具 举报

22

帖子

1

主题

67

金币

注册会员

Rank: 2

积分
122
发表于 2015-8-27 22:06:56 | 显示全部楼层
哈哈,谢谢版主分享、、、
回复 支持 反对

使用道具 举报

19

帖子

0

主题

20

金币

注册会员

Rank: 2

积分
71
发表于 2015-9-3 00:59:05 | 显示全部楼层
顶贴啊,顶起来
回复 支持 反对

使用道具 举报

22

帖子

0

主题

39

金币

注册会员

Rank: 2

积分
79
发表于 2015-9-11 08:32:01 | 显示全部楼层
好东西,下载下来研究一下
回复 支持 反对

使用道具 举报

13

帖子

0

主题

145

金币

中级会员

Rank: 3Rank: 3

积分
294
发表于 2015-10-14 17:21:22 | 显示全部楼层
非常好的资料,学习了
回复 支持 反对

使用道具 举报

22

帖子

1

主题

67

金币

注册会员

Rank: 2

积分
122
发表于 2015-11-10 09:21:41 | 显示全部楼层
楼主,可以讲一下w5500的中断么?对这个中断不太了解,但是想用,不太清楚这个。。
回复 支持 反对

使用道具 举报

8

帖子

0

主题

9

金币

新手上路

Rank: 1

积分
29
发表于 2015-11-20 22:22:05 | 显示全部楼层
good job!!!
回复

使用道具 举报

16

帖子

0

主题

20

金币

注册会员

Rank: 2

积分
62
发表于 2015-12-2 07:53:59 | 显示全部楼层
赚取金币,下载文件,3QQQQ
回复 支持 反对

使用道具 举报

6

帖子

0

主题

11

金币

新手上路

Rank: 1

积分
29
发表于 2015-12-2 15:59:36 | 显示全部楼层
刚刚准备学习W5500,先来取点经谢谢分享
回复 支持 反对

使用道具 举报

59

帖子

15

主题

85

金币

中级会员

Rank: 3Rank: 3

积分
400
发表于 2015-12-7 09:35:41 | 显示全部楼层
ENC28J60用过,W5500没用过 ,应该更好用,呵呵!
回复 支持 反对

使用道具 举报

1

帖子

0

主题

8

金币

新手上路

Rank: 1

积分
11
发表于 2015-12-9 09:24:47 | 显示全部楼层
怎么不能下载呢
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-12-9 10:14:34 | 显示全部楼层
du3900 发表于 2015-12-9 09:24
怎么不能下载呢

直接点击就可以下载了
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

4

帖子

0

主题

6

金币

新手上路

Rank: 1

积分
18
发表于 2015-12-16 12:50:17 | 显示全部楼层
这段时间刚好要折腾W5500,可以参考一下,谢谢楼主
回复 支持 反对

使用道具 举报

68

帖子

0

主题

54

金币

中级会员

Rank: 3Rank: 3

积分
248
发表于 2015-12-18 11:16:38 | 显示全部楼层
非常感谢
回复

使用道具 举报

16

帖子

3

主题

64

金币

中级会员

Rank: 3Rank: 3

积分
217
发表于 2015-12-21 20:58:24 | 显示全部楼层
另外使用DHCP的时候经常卡住这边do{
    if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
      Println("Unknown PHY Link stauts.\r\n");
    }
       
        Println("CW_GET_PHYLINK.\r\n");
        }while(tmp == PHY_LINK_OFF);
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-12-21 22:05:53 | 显示全部楼层
hydjmu 发表于 2015-12-21 20:58
另外使用DHCP的时候经常卡住这边do{
    if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
      Pri ...

遇到这种情况,软件复位下5500试试
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
140199
QQ
 楼主| 发表于 2015-12-21 22:06:08 | 显示全部楼层
hydjmu 发表于 2015-12-21 20:58
另外使用DHCP的时候经常卡住这边do{
    if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
      Pri ...

遇到这种情况,软件复位下5500试试
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

16

帖子

3

主题

64

金币

中级会员

Rank: 3Rank: 3

积分
217
发表于 2015-12-21 22:16:52 | 显示全部楼层
飞鸿踏雪 发表于 2015-12-21 22:06
遇到这种情况,软件复位下5500试试

试过软件复位没有效果,确认网线是连接好的,就偶尔不行
回复 支持 反对

使用道具 举报

16

帖子

3

主题

64

金币

中级会员

Rank: 3Rank: 3

积分
217
发表于 2015-12-21 22:17:47 | 显示全部楼层
飞鸿踏雪 发表于 2015-12-21 22:06
遇到这种情况,软件复位下5500试试

试过软件复位没有效果,确认网线是连接好的,就偶尔不行


回复 支持 反对

使用道具 举报

16

帖子

3

主题

64

金币

中级会员

Rank: 3Rank: 3

积分
217
发表于 2015-12-21 22:18:58 | 显示全部楼层
飞鸿踏雪 发表于 2015-12-21 22:05
遇到这种情况,软件复位下5500试试


老是死在        //连接服务器        ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
                printf("%d:Socket Connect Error\r\n",SOCK_TCPS);
                while(1);
这个怎么解决 主要是这个 有时候可以连有时候会卡住在这,确认连接的服务器是可以连接的
回复 支持 反对

使用道具 举报

16

帖子

3

主题

64

金币

中级会员

Rank: 3Rank: 3

积分
217
发表于 2015-12-21 22:20:03 | 显示全部楼层
飞鸿踏雪 发表于 2015-12-21 22:05
遇到这种情况,软件复位下5500试试


老是死在        //连接服务器        ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
                printf("%d:Socket Connect Error\r\n",SOCK_TCPS);
                while(1);
这个怎么解决 主要是这个 有时候可以连有时候会卡住在这,确认连接的服务器是可以连接的
回复 支持 反对

使用道具 举报

68

帖子

0

主题

54

金币

中级会员

Rank: 3Rank: 3

积分
248
发表于 2015-12-24 09:45:08 | 显示全部楼层
天天登录,来挣个金币!!!!!!
回复 支持 反对

使用道具 举报

68

帖子

0

主题

54

金币

中级会员

Rank: 3Rank: 3

积分
248
发表于 2016-1-6 10:15:36 | 显示全部楼层
天天登录,来挣个金币!!!!!!!
回复 支持 反对

使用道具 举报

68

帖子

0

主题

54

金币

中级会员

Rank: 3Rank: 3

积分
248
发表于 2016-1-6 10:16:16 | 显示全部楼层
天天登录,来挣个金币!!!!!!
回复 支持 反对

使用道具 举报

68

帖子

0

主题

54

金币

中级会员

Rank: 3Rank: 3

积分
248
发表于 2016-1-8 12:44:31 | 显示全部楼层
天天登录,来挣个金币!!!!!!
回复 支持 反对

使用道具 举报

68

帖子

0

主题

54

金币

中级会员

Rank: 3Rank: 3

积分
248
发表于 2016-1-11 14:10:57 | 显示全部楼层
天天登录,来挣个金币!!!!!
回复 支持 反对

使用道具 举报

3

帖子

0

主题

14

金币

新手上路

Rank: 1

积分
23
发表于 2016-1-16 17:53:43 | 显示全部楼层
正要学习,感学斑竹~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

3

帖子

0

主题

14

金币

新手上路

Rank: 1

积分
23
发表于 2016-1-16 17:54:26 | 显示全部楼层
回复的时候响应好慢。。
回复 支持 反对

使用道具 举报

22

帖子

0

主题

12

金币

注册会员

Rank: 2

积分
72
发表于 2016-1-25 02:26:11 | 显示全部楼层
学习了,谢谢楼主
回复 支持 反对

使用道具 举报

8

帖子

0

主题

16

金币

新手上路

Rank: 1

积分
34
发表于 2016-1-26 16:17:04 | 显示全部楼层
谢谢     学习了  嘻嘻
回复 支持 反对

使用道具 举报

3

帖子

0

主题

20

金币

新手上路

Rank: 1

积分
29
发表于 2016-2-3 10:59:05 | 显示全部楼层
感谢分享  
回复 支持 反对

使用道具 举报

18

帖子

0

主题

5

金币

注册会员

Rank: 2

积分
60
发表于 2016-2-3 15:00:17 | 显示全部楼层
好资料,学习中
回复 支持 反对

使用道具 举报

21

帖子

4

主题

140

金币

版主

Rank: 7Rank: 7Rank: 7

积分
293
发表于 2016-2-19 17:36:57 | 显示全部楼层
好东西,赞一个!
回复 支持 反对

使用道具 举报

11

帖子

0

主题

2

金币

新手上路

Rank: 1

积分
25
发表于 2016-2-24 15:02:37 | 显示全部楼层
W5500官方提供的最新Socket库
回复 支持 反对

使用道具 举报

11

帖子

0

主题

33

金币

注册会员

Rank: 2

积分
66
发表于 2016-3-9 02:59:42 | 显示全部楼层
感谢分享!!!
回复

使用道具 举报

2

帖子

0

主题

31

金币

新手上路

Rank: 1

积分
37
发表于 2016-3-25 14:14:51 | 显示全部楼层
学习了,楼主赞一个
回复 支持 反对

使用道具 举报

2

帖子

0

主题

31

金币

新手上路

Rank: 1

积分
37
发表于 2016-3-25 14:23:15 | 显示全部楼层
最近调试W5500也遇到设置进去的MAC地址等,读出来有部分正确,开始以为是没有配置crisenter和crisexit的原因,增加开关中断,发现仍然读出有误,修改SPI波特率,错误更多,由此可定位基本是SPI通信时序问题,查找最原子的SPI发送接收函数,发现是发送时,等待接收成功后,没有读取DR里的数据,增加空读DR数据,测试OK,去掉crisenter和crisexit,测试OK
回复 支持 反对

使用道具 举报

4

帖子

0

主题

1

金币

新手上路

Rank: 1

积分
13
发表于 2016-4-28 22:05:16 | 显示全部楼层

STM32学习中,先下载学习了
回复 支持 反对

使用道具 举报

42

帖子

0

主题

32

金币

注册会员

Rank: 2

积分
144
发表于 2016-4-28 22:54:28 | 显示全部楼层
非常感谢
回复

使用道具 举报

8

帖子

0

主题

147

金币

注册会员

Rank: 2

积分
171
发表于 2016-5-3 13:11:52 | 显示全部楼层
new_w5500 发表于 2015-5-10 17:49
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?

wiz ...

不知楼主这个问题解决了么?怎么解决的!
回复 支持 反对

使用道具 举报

8

帖子

2

主题

37

金币

注册会员

Rank: 2

积分
73
发表于 2016-5-11 11:25:22 | 显示全部楼层
http://www.embed-net.com/thread-558-1-1.html 版主 你好,W5500 无法发送心跳包,是啥原因呢?
回复 支持 反对

使用道具 举报

14

帖子

1

主题

310

金币

中级会员

Rank: 3Rank: 3

积分
361
发表于 2016-5-14 08:37:49 | 显示全部楼层
好东西,学习了.谢谢.
回复 支持 反对

使用道具 举报

2

帖子

0

主题

68

金币

注册会员

Rank: 2

积分
74
发表于 2016-5-23 17:44:10 | 显示全部楼层
很好不错  基础差看不懂啊
回复 支持 反对

使用道具 举报

5

帖子

0

主题

8

金币

新手上路

Rank: 1

积分
23
发表于 2016-5-23 17:49:12 | 显示全部楼层
这个必须收藏起来
回复 支持 反对

使用道具 举报

1

帖子

0

主题

34

金币

新手上路

Rank: 1

积分
37
发表于 2016-5-27 00:12:32 | 显示全部楼层
资料很有用,谢谢!
回复 支持 反对

使用道具 举报

12

帖子

0

主题

48

金币

注册会员

Rank: 2

积分
84
发表于 2016-6-13 13:47:40 | 显示全部楼层

好东西,学习了.谢谢.
回复 支持 反对

使用道具 举报

10

帖子

0

主题

5

金币

新手上路

Rank: 1

积分
42
发表于 2016-6-15 17:05:14 | 显示全部楼层
谢谢楼主,很好的资料
回复 支持 反对

使用道具 举报

25

帖子

0

主题

39

金币

注册会员

Rank: 2

积分
106
发表于 2016-6-17 13:40:20 | 显示全部楼层
感谢楼主分享! 学习一下
回复 支持 反对

使用道具 举报

25

帖子

0

主题

39

金币

注册会员

Rank: 2

积分
106
发表于 2016-6-22 18:24:32 | 显示全部楼层
感谢楼主分享! 学习一下
回复 支持 反对

使用道具 举报

2

帖子

0

主题

6

金币

新手上路

Rank: 1

积分
12
发表于 2016-6-28 22:57:35 | 显示全部楼层
222222222222222
回复 支持 反对

使用道具 举报

4

帖子

1

主题

4

金币

新手上路

Rank: 1

积分
19
发表于 2016-7-12 19:12:12 | 显示全部楼层
谢谢分享。。。。
回复

使用道具 举报

4

帖子

1

主题

4

金币

新手上路

Rank: 1

积分
19
发表于 2016-7-12 19:13:44 | 显示全部楼层
好东西,谢谢分享
回复 支持 反对

使用道具 举报

3

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
13
发表于 2016-7-13 13:53:58 | 显示全部楼层
版主真心不错  谢谢分享 努力学习之中
回复 支持 反对

使用道具 举报

4

帖子

0

主题

10

金币

新手上路

Rank: 1

积分
22
发表于 2016-7-19 09:37:08 | 显示全部楼层
感谢LZ,提供了这么好的例子来参考!在我的项目中刚好用到,而且用的非常好!
感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|嵌入式以太网社区 ( 渝ICP备14007427号

GMT+8, 2019-6-20 19:17 , Processed in 0.124494 second(s), 34 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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