w5500模块 sch pcb为什么要调试客户端

查看: 15835|回复: 107
如何移植使用W5500官方提供的最新Socket库
帖子主题金币
官方提供了W5500的最新驱动库,下载地址如下:
下面简单介绍下如何使用这套库
首先下载库源码,文件目录如下所示:
iolibrary_bsd.jpg (72.07 KB, 下载次数: 19)
18:04 上传
我们主要用到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 (93.88 KB, 下载次数: 13)
18:08 上传
主要原因是Keil MDK默认设置不支持按照结构体名称初始化结构体的原因导致。
W5500和MCU是通过SPI接口通信的,库是利用如下结构体中的相关函数指针实现SPI通信和其他功能。
[C] 纯文本查看 复制代码_WIZCHIP
= _WIZCHIP_ID_,
= _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] 纯文本查看 复制代码/**
******************************************************************************
* $Author: 飞鸿踏雪 $
* $Revision: 17 $
11:16:48 +0800 #$
SPI驱动函数实现.
******************************************************************************
* @attention
*&h3&&center&© Copyright , EmbedNet&/center&
*&center&&a href=&http:\\[url]www.[/url]&&[url]http://www.[/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 ---------------------------------------------------------*/
使能SPI时钟
* @retval None
static void SPI_RCC_Configuration(void)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,ENABLE);
配置指定SPI的引脚
* @retval None
static void SPI_GPIO_Configuration(void)
GPIO_InitTypeDef GPIO_InitS
//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);
根据外部SPI设备配置SPI相关参数
* @retval None
void SPI_Configuration(void)
SPI_InitTypeDef SPI_InitS
SPI_RCC_Configuration();
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullD
SPI_InitStruct.SPI_Mode = SPI_Mode_M
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_L
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1E
SPI_InitStruct.SPI_NSS = SPI_NSS_S
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);
写1字节数据到SPI总线
TxData 写到总线的数据
* @retval None
void SPI_WriteByte(uint8_t TxData)
while((SPI1-&SR&SPI_I2S_FLAG_TXE)==0); //等待发送区空
SPI1-&DR=TxD
//发送一个byte
while((SPI1-&SR&SPI_I2S_FLAG_RXNE)==0); //等待接收完一个byte
从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;
进入临界区
* @retval None
void SPI_CrisEnter(void)
__set_PRIMASK(1);
退出临界区
* @retval None
void SPI_CrisExit(void)
__set_PRIMASK(0);
片选信号输出低电平
* @retval None
void SPI_CS_Select(void)
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
片选信号输出高电平
* @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 */
_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.
#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SIP_) != _WIZCHIP_IO_MODE_SIP_
#error &Unknown _WIZCHIP_IO_MODE_&
reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
/* SPI Read & Write callback function */
reg_wizchip_spi_cbfunc(SPI_ReadByte, SPI_WriteByte); //注册读写函数
到这里,移植工程基本完成,下面我们就将官方提供的一个loopback的测试程序移植到我们自己的工程中来,基本上也没做什么修改,下面是测试工程用到的几个测试函数
[C] 纯文本查看 复制代码/**
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&);
Loopback Test Example Code using ioLibrary_BSD
* @retval None
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)
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)
sentsize = 0;
while(size != sentsize)
ret = send(sn,buf+sentsize,size-sentsize);
if(ret & 0)
close(sn);
sentsize += // Don't care SOCKERR_BUSY, because it is zero.
case SOCK_CLOSE_WAIT :
printf(&%d:CloseWait\r\n&,sn);
if((ret=disconnect(sn)) != SOCK_OK)
printf(&%d:Closed\r\n&,sn);
case SOCK_INIT :
printf(&%d:Listen, port [%d]\r\n&,sn, port);
if( (ret = listen(sn)) != SOCK_OK)
case SOCK_CLOSED:
printf(&%d:LBTStart\r\n&,sn);
if((ret=socket(sn,Sn_MR_TCP,port,0x00)) != sn)
printf(&%d:Opened\r\n&,sn);
Loopback Test Example Code using ioLibrary_BSD
* @retval None
int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port)
uint16_t size,
destip[4];
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);
size = (uint16_t)
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);
sentsize += // Don't care SOCKERR_BUSY, because it is zero.
case SOCK_CLOSED:
printf(&%d:LBUStart\r\n&,sn);
if((ret=socket(sn,Sn_MR_UDP,port,0x00)) != sn)
printf(&%d:Opened, port [%d]\r\n&,sn, port);
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 , EmbedNet ************************&);
printf(&\r\n*************************** [url]http://www.[/url] **************************&);
printf(&\r\n***************************** All Rights Reserved *****************************&);
printf(&\r\n*******************************************************************************&);
printf(&\r\n&);
//Config SPI
SPI_Configuration();
//延时初始化
delay_init();
我们自己在工程中加了串口打印程序,程序运行后串口输出信息如下:
串口输出.jpg (126.39 KB, 下载次数: 7)
18:28 上传
我们ping下程序里面的IP试试
ping.jpg (69.92 KB, 下载次数: 6)
18:29 上传
能ping通,看来没什么大问题了
程序源码下载
STM32工程源码下载:
(776.65 KB, 下载次数: 1153)
18:35 上传
点击文件名下载附件
w5500官方库下载:
(38.13 KB, 下载次数: 493)
18:34 上传
点击文件名下载附件
DNS和DHCP库下载:
(16.4 KB, 下载次数: 438)
18:34 上传
点击文件名下载附件
API说明文档下载:
(1.28 MB, 下载次数: 954)
18:34 上传
点击文件名下载附件
STM32和W5500硬件连接只需要SPI的4根线就够了,也就是CS,CLK,MISO,MOSI,其他的可以不管。
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
发表于 5&天前
_WIZCHIP&&WIZCHIP =
& && &.id& && && && && && &= _WIZCHIP_ID_,
这个是在声明结构体变量的时候顺便给结构体里面的成员赋值,当然你在这里也可以不赋值,在后面的程序中再赋值,因为这个成员是存在的,所以调用它并不会报错,这个不是定义结构体,是定义结构体变量
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
注册会员, 积分 87, 距离下一级还需 113 积分
注册会员, 积分 87, 距离下一级还需 113 积分
感谢分享& && && && && &
帖子主题金币
新手上路, 积分 8, 距离下一级还需 42 积分
新手上路, 积分 8, 距离下一级还需 42 积分
赞,学习了!!
帖子主题金币
新手上路, 积分 30, 距离下一级还需 20 积分
新手上路, 积分 30, 距离下一级还需 20 积分
include.jpg (202.92 KB, 下载次数: 3)
16:19 上传
如图所诉,MDK在编译链接的时候报错,说没有这样的文件或则路径,可是我明明设置了路径,而且是正确的,但就是通不过。
但如果我把include改成 #include &wizchip_conf.h& 这样就能通过了。有谁能解释下吗?
帖子主题金币
如图所诉,MDK在编译链接的时候报错,说没有这样的文件或则路径,可是我明明设置了路径,而且是正确的 ...
你没设置..\.\Drivers这样的路径
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 30, 距离下一级还需 20 积分
新手上路, 积分 30, 距离下一级还需 20 积分
你没设置..\.\Drivers这样的路径
我设置了啊,截图中有。
还是说我设置错了?
请问该如何设置
帖子主题金币
新手上路, 积分 30, 距离下一级还需 20 积分
新手上路, 积分 30, 距离下一级还需 20 积分
你没设置..\.\Drivers这样的路径
搞定了。是没设置..\..\Drivers 这个路径。
虽搞定了,但还是不明白,能否解释一下
帖子主题金币
搞定了。是没设置..\..\Drivers 这个路径。
虽搞定了,但还是不明白,能否解释一下
程序包含最上层是不是Ethernet这个文件夹?这个文件夹在什么地方才能看见?显然是Drivers这个文件夹噻,所以你要把Drivers这个文件夹包含进去...
帖子主题金币
新手上路, 积分 14, 距离下一级还需 36 积分
新手上路, 积分 14, 距离下一级还需 36 积分
我的怎么总是ping不通,ip地址都是对的,spi也是对的,网线是好的?
帖子主题金币
我的怎么总是ping不通,ip地址都是对的,spi也是对的,网线是好的?
SPI你是如何证明是好的?用逻辑分析仪或者示波器抓了数据,并且数据也是对的?
网线是怎么接的?直接接电脑,还是接路由器,还是接交换机?
IP地址,子网掩码等设置是否和你当前网络一致?
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 14, 距离下一级还需 36 积分
新手上路, 积分 14, 距离下一级还需 36 积分
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);
& & & & }& & & &
。可能是刚接触,我在好好看看。
帖子主题金币
新手上路, 积分 10, 距离下一级还需 40 积分
新手上路, 积分 10, 距离下一级还需 40 积分
我现在用spi自己读写w5500是可以的,而且数据是正确的,我现在是问题解决了,我改的spi2,SPI_Init(SPI1, ...
我这边的也是这个情况 通过打印 好像 getSn_SR(sn) 变成closed 所以 connect 跳不出来 死在那里 了 ,不知道怎么回事
帖子主题金币
注册会员, 积分 64, 距离下一级还需 136 积分
注册会员, 积分 64, 距离下一级还需 136 积分
不错,顶起!
帖子主题金币
新手上路, 积分 14, 距离下一级还需 36 积分
新手上路, 积分 14, 距离下一级还需 36 积分
wizchip_bus_readbyte,wizchip_bus_writebyte是不是应该改为wizchip_spi_readbyte,wizchip_spi_writebyte,W5500只有SPI总线,而不是通过地址和数据总线传输数据
帖子主题金币
新手上路, 积分 8, 距离下一级还需 42 积分
新手上路, 积分 8, 距离下一级还需 42 积分
楼主你好,W5500的复位引脚是不是可以不用IO口控制,直接接电源还是通过电容接电源呢
帖子主题金币
wizchip_bus_readbyte,wizchip_bus_writebyte是不是应该改为wizchip_spi_readbyte,wizchip_spi_writebyte ...
[C] 纯文本查看 复制代码_WIZCHIP
= _WIZCHIP_ID_,
= _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_
WIZCHIP.IF.SPI._write_byte
= wizchip_spi_
WIZCHIP.IF.SPI._read_byte
WIZCHIP.IF.SPI._write_byte
这段代码实际上是注册的SPI的接口函数
还有个配置就是对WIZCHIP.if_mode的配置,你也可以跟进去看看,最终的定义是:
#define _WIZCHIP_IO_MODE_SPI_VDM_& && &(_WIZCHIP_IO_MODE_SPI_ + 1) /**& SPI interface mode for variable length data*/
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
楼主你好,W5500的复位引脚是不是可以不用IO口控制,直接接电源还是通过电容接电源呢
我调试的时候直接悬空的,用发命令的方式进行软件复位,没用硬件复位方式
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 14, 距离下一级还需 36 积分
新手上路, 积分 14, 距离下一级还需 36 积分
[mw_shl_code=c,true]_WIZCHIP&&WIZCHIP =
之前才看了两个头文件,c文件还没看,今天在wizchip_conf.c中看到WIZCHIP结构体中被定义的函数都被指向了,若自己没有在注册函数中指向函数指针的话,则WIZCHIP.IF.SPI._read_byte等函数被赋wizchip_spi_readbyte默认值
帖子主题金币
新手上路, 积分 4, 距离下一级还需 46 积分
新手上路, 积分 4, 距离下一级还需 46 积分
好东西,谢谢楼主分享
帖子主题金币
新手上路, 积分 14, 距离下一级还需 36 积分
新手上路, 积分 14, 距离下一级还需 36 积分
本帖最后由 llyzl0 于
19:20 编辑
[mw_shl_code=c,true]_WIZCHIP&&WIZCHIP =
想问下楼主,我在用DSP实现网络通信时,SPI_CrisEnter和 SPI_CrisExit这两个临界区的函数需要用到吗?我看到嵌入式系统中才有这样的函数,如果不用临界区,会不会影响WIZNET芯片的使用?
帖子主题金币
想问下楼主,我在用DSP实现网络通信时,SPI_CrisEnter和 SPI_CrisExit这两个临界区的函数需要用到吗?我 ...
可以不用的,应该没什么影响,最大的影响可能也只有对速度稍有影响
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 33, 距离下一级还需 17 积分
新手上路, 积分 33, 距离下一级还需 17 积分
本帖最后由 DIIIIIII 于
10:32 编辑
我的MDK4.7怎么没有C99?
_102856.png (49.68 KB, 下载次数: 0)
10:28 上传
已解决在misc controls上加--C99
帖子主题金币
新手上路, 积分 33, 距离下一级还需 17 积分
新手上路, 积分 33, 距离下一级还需 17 积分
楼主,在官网上下的驱动有些文件的版本好像比这个托管的版本号高,我大致对比了一下,有些改动好像很大。我是初学者,具体的看不懂,楼主能顺便具体对比下吗?
帖子主题金币
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
我用的keil MDK 4.72&&在target选项中 找不到 c99 怎么办
帖子主题金币
我用的keil MDK 4.72&&在target选项中 找不到 c99 怎么办
换KEIL MDK5
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
换KEIL MDK5
找到办法了 在misc controls 中 加上“--C99” 即可编译成功
帖子主题金币
找到办法了 在misc controls 中 加上“--C99” 即可编译成功
不错!我还没发现这样也可以
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 20, 距离下一级还需 30 积分
新手上路, 积分 20, 距离下一级还需 30 积分
请教点问题,最近做毕设调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
帖子主题金币
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?
读出的数据完全不对啊
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?
你确认SPI配置是正确的?
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
学习当中,很值得借鉴
帖子主题金币
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
楼主你好,我现正学习研究w5500的使用,过程中遇到了一个很纠结的问题:
官方给的soket.c中给的recv函数采用的while(1)阻塞接收数据的方式,但我的应用层设计不允许阻塞,我把while注释掉了。 测试:pc机网络调试助手为客户端。测试步骤: 1tcp连接成功&&2数据收发正常&&3调试助手断开本次连接& &4pc机再次连接成功开始接收数据&&。此时轮询非阻塞方式的recv&&调试得到:在recv函数内的getSn_Rx_RSR 返回的的值特别大&&接近65536。不知楼主有遇到??能指导指导?非常感谢
帖子主题金币
楼主你好,我现正学习研究w5500的使用,过程中遇到了一个很纠结的问题:
官方给的soket.c中给的recv函数采 ...
我也改成过非阻塞方式,其实就是给一个超时时间,如果超过了这个时间还没正常连接,就返回上层代码一个错误代码,当然超时时间最好可以上层代码控制
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 34, 距离下一级还需 16 积分
新手上路, 积分 34, 距离下一级还需 16 积分
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
请问楼主有没有碰到连续收数据到800字节后会有1段时间接收数据不全,超过1024字节后又正常,然后2048字节后再抵达800字节又会重复
帖子主题金币
请问楼主有没有碰到连续收数据到800字节后会有1段时间接收数据不全,超过1024字节后又正常,然后2048字节后 ...
没这样测试过...
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
没这样测试过...
有点奇怪了,每次都是很规律的800字节,然后接收只能收到第一个字节,后面几个都是FF,如果单个单个发,收到的是对的,感觉是SPI到那一段地址时不能连续读去几个字节。
帖子主题金币
有点奇怪了,每次都是很规律的800字节,然后接收只能收到第一个字节,后面几个都是FF,如果单个单个发, ...
那你单独调试下SPI的驱动程序试试
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
注册会员, 积分 175, 距离下一级还需 25 积分
注册会员, 积分 175, 距离下一级还需 25 积分
楼主发的贴都是强贴,高
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
那你单独调试下SPI的驱动程序试试
不知道网友有没有遇到,分享下我折中的解决办法,芯片资料里也没注明,不知道是STM32和W5500不兼容还是别的原因。修改了读取缓存时的地址,强制将高的那几位置1就好了
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 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& 0x00FFF80000) && 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 & 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
& && &// M : 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();
& && &}& && &
& && &#error &Unsupported _WIZCHIP_IO_MODE_SPI_ in W5500 !!!&
#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_)
& && &#error &Unsupported _WIZCHIP_IO_MODE_BUS_ in W5500 !!!&
& &#error &Unknown _WIZCHIP_IO_MODE_ in W5500. !!!!&
& &WIZCHIP.CS._deselect();
& &WIZCHIP_CRITICAL_EXIT();
帖子主题金币
注册会员, 积分 85, 距离下一级还需 115 积分
注册会员, 积分 85, 距离下一级还需 115 积分
谢谢分享,研究一下
帖子主题金币
新手上路, 积分 43, 距离下一级还需 7 积分
新手上路, 积分 43, 距离下一级还需 7 积分
谢谢分享,研究一下
帖子主题金币
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
谢谢!特别实用!
帖子主题金币
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
还差一点积分!下载不了!
帖子主题金币
注册会员, 积分 91, 距离下一级还需 109 积分
注册会员, 积分 91, 距离下一级还需 109 积分
要是早看到楼主的贴就好了,当时浪费了好几天弄这个
帖子主题金币
注册会员, 积分 84, 距离下一级还需 116 积分
注册会员, 积分 84, 距离下一级还需 116 积分
哈哈,谢谢版主分享、、、
帖子主题金币
新手上路, 积分 43, 距离下一级还需 7 积分
新手上路, 积分 43, 距离下一级还需 7 积分
顶贴啊,顶起来
帖子主题金币
注册会员, 积分 73, 距离下一级还需 127 积分
注册会员, 积分 73, 距离下一级还需 127 积分
好东西,下载下来研究一下
帖子主题金币
中级会员, 积分 276, 距离下一级还需 224 积分
中级会员, 积分 276, 距离下一级还需 224 积分
非常好的资料,学习了
帖子主题金币
注册会员, 积分 84, 距离下一级还需 116 积分
注册会员, 积分 84, 距离下一级还需 116 积分
楼主,可以讲一下w5500的中断么?对这个中断不太了解,但是想用,不太清楚这个。。
帖子主题金币
新手上路, 积分 37, 距离下一级还需 13 积分
新手上路, 积分 37, 距离下一级还需 13 积分
good job!!!
帖子主题金币
注册会员, 积分 62, 距离下一级还需 138 积分
注册会员, 积分 62, 距离下一级还需 138 积分
赚取金币,下载文件,3QQQQ
帖子主题金币
新手上路, 积分 29, 距离下一级还需 21 积分
新手上路, 积分 29, 距离下一级还需 21 积分
刚刚准备学习W5500,先来取点经谢谢分享
帖子主题金币
中级会员, 积分 356, 距离下一级还需 144 积分
中级会员, 积分 356, 距离下一级还需 144 积分
ENC28J60用过,W5500没用过 ,应该更好用,呵呵!
帖子主题金币
新手上路, 积分 11, 距离下一级还需 39 积分
新手上路, 积分 11, 距离下一级还需 39 积分
怎么不能下载呢
帖子主题金币
怎么不能下载呢
直接点击就可以下载了
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 18, 距离下一级还需 32 积分
新手上路, 积分 18, 距离下一级还需 32 积分
这段时间刚好要折腾W5500,可以参考一下,谢谢楼主
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
帖子主题金币
中级会员, 积分 217, 距离下一级还需 283 积分
中级会员, 积分 217, 距离下一级还需 283 积分
老是死在& && &&&//连接服务器& && &&&ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
& && && && && & printf(&%d:Socket Connect Error\r\n&,SOCK_TCPS);
& && && && && & while(1);
这个我也经常遇到请问有解决的吗
帖子主题金币
中级会员, 积分 217, 距离下一级还需 283 积分
中级会员, 积分 217, 距离下一级还需 283 积分
另外使用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);
帖子主题金币
另外使用DHCP的时候经常卡住这边do{
& & if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
& && &Pri ...
遇到这种情况,软件复位下5500试试
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
另外使用DHCP的时候经常卡住这边do{
& & if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1){
& && &Pri ...
遇到这种情况,软件复位下5500试试
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
中级会员, 积分 217, 距离下一级还需 283 积分
中级会员, 积分 217, 距离下一级还需 283 积分
遇到这种情况,软件复位下5500试试
试过软件复位没有效果,确认网线是连接好的,就偶尔不行
帖子主题金币
中级会员, 积分 217, 距离下一级还需 283 积分
中级会员, 积分 217, 距离下一级还需 283 积分
遇到这种情况,软件复位下5500试试
试过软件复位没有效果,确认网线是连接好的,就偶尔不行
帖子主题金币
中级会员, 积分 217, 距离下一级还需 283 积分
中级会员, 积分 217, 距离下一级还需 283 积分
遇到这种情况,软件复位下5500试试
老是死在& && &&&//连接服务器& && &&&ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
& && && && && & printf(&%d:Socket Connect Error\r\n&,SOCK_TCPS);
& && && && && & while(1);
这个怎么解决 主要是这个 有时候可以连有时候会卡住在这,确认连接的服务器是可以连接的
帖子主题金币
中级会员, 积分 217, 距离下一级还需 283 积分
中级会员, 积分 217, 距离下一级还需 283 积分
遇到这种情况,软件复位下5500试试
老是死在& && &&&//连接服务器& && &&&ret = connect(SOCK_TCPS,DstIP,9901);if(ret != SOCK_OK){
& && && && && & printf(&%d:Socket Connect Error\r\n&,SOCK_TCPS);
& && && && && & while(1);
这个怎么解决 主要是这个 有时候可以连有时候会卡住在这,确认连接的服务器是可以连接的
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
天天登录,来挣个金币!!!!!!
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
天天登录,来挣个金币!!!!!!!
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
天天登录,来挣个金币!!!!!!
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
天天登录,来挣个金币!!!!!!
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
天天登录,来挣个金币!!!!!
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
正要学习,感学斑竹~~~~~~~~~~~~
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
回复的时候响应好慢。。
帖子主题金币
注册会员, 积分 72, 距离下一级还需 128 积分
注册会员, 积分 72, 距离下一级还需 128 积分
学习了,谢谢楼主
帖子主题金币
新手上路, 积分 32, 距离下一级还需 18 积分
新手上路, 积分 32, 距离下一级还需 18 积分
谢谢& &&&学习了&&嘻嘻
帖子主题金币
新手上路, 积分 29, 距离下一级还需 21 积分
新手上路, 积分 29, 距离下一级还需 21 积分
感谢分享&&
帖子主题金币
注册会员, 积分 60, 距离下一级还需 140 积分
注册会员, 积分 60, 距离下一级还需 140 积分
好资料,学习中
帖子主题金币
好东西,赞一个!
帖子主题金币
新手上路, 积分 25, 距离下一级还需 25 积分
新手上路, 积分 25, 距离下一级还需 25 积分
W5500官方提供的最新Socket库
帖子主题金币
注册会员, 积分 54, 距离下一级还需 146 积分
注册会员, 积分 54, 距离下一级还需 146 积分
感谢分享!!!
帖子主题金币
新手上路, 积分 31, 距离下一级还需 19 积分
新手上路, 积分 31, 距离下一级还需 19 积分
学习了,楼主赞一个
帖子主题金币
新手上路, 积分 31, 距离下一级还需 19 积分
新手上路, 积分 31, 距离下一级还需 19 积分
最近调试W5500也遇到设置进去的MAC地址等,读出来有部分正确,开始以为是没有配置crisenter和crisexit的原因,增加开关中断,发现仍然读出有误,修改SPI波特率,错误更多,由此可定位基本是SPI通信时序问题,查找最原子的SPI发送接收函数,发现是发送时,等待接收成功后,没有读取DR里的数据,增加空读DR数据,测试OK,去掉crisenter和crisexit,测试OK
帖子主题金币
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
STM32学习中,先下载学习了
帖子主题金币
注册会员, 积分 147, 距离下一级还需 53 积分
注册会员, 积分 147, 距离下一级还需 53 积分
帖子主题金币
注册会员, 积分 72, 距离下一级还需 128 积分
注册会员, 积分 72, 距离下一级还需 128 积分
请教点问题,最近做毕设调W5500,读SHAR读出来的数跟写进去的不一样,麻烦指点一下这个是这么回事?
不知楼主这个问题解决了么?怎么解决的!
帖子主题金币
注册会员, 积分 71, 距离下一级还需 129 积分
注册会员, 积分 71, 距离下一级还需 129 积分
版主 你好,W5500 无法发送心跳包,是啥原因呢?
帖子主题金币
注册会员, 积分 106, 距离下一级还需 94 积分
注册会员, 积分 106, 距离下一级还需 94 积分
好东西,学习了.谢谢.
帖子主题金币
注册会员, 积分 74, 距离下一级还需 126 积分
注册会员, 积分 74, 距离下一级还需 126 积分
很好不错&&基础差看不懂啊
帖子主题金币
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
这个必须收藏起来
帖子主题金币
新手上路, 积分 37, 距离下一级还需 13 积分
新手上路, 积分 37, 距离下一级还需 13 积分
资料很有用,谢谢!
帖子主题金币
新手上路, 积分 42, 距离下一级还需 8 积分
新手上路, 积分 42, 距离下一级还需 8 积分
好东西,学习了.谢谢.
帖子主题金币
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
谢谢楼主,很好的资料
帖子主题金币
注册会员, 积分 84, 距离下一级还需 116 积分
注册会员, 积分 84, 距离下一级还需 116 积分
感谢楼主分享! 学习一下
帖子主题金币
注册会员, 积分 84, 距离下一级还需 116 积分
注册会员, 积分 84, 距离下一级还需 116 积分
感谢楼主分享! 学习一下
帖子主题金币
新手上路, 积分 10, 距离下一级还需 40 积分
新手上路, 积分 10, 距离下一级还需 40 积分
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
谢谢分享。。。。
帖子主题金币
新手上路, 积分 19, 距离下一级还需 31 积分
新手上路, 积分 19, 距离下一级还需 31 积分
好东西,谢谢分享
帖子主题金币
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
版主真心不错&&谢谢分享 努力学习之中
帖子主题金币
新手上路, 积分 18, 距离下一级还需 32 积分
新手上路, 积分 18, 距离下一级还需 32 积分
发表于 7&天前
感谢LZ,提供了这么好的例子来参考!在我的项目中刚好用到,而且用的非常好!
Powered by

我要回帖

更多关于 w5500模块 sch pcb 的文章

 

随机推荐