|
发表于 2019-3-26 11:48:35
|
显示全部楼层
楼上几个坛友所谈到w5500的数据包限制问题,是由于W5500硬件收、发寄存器各有16K大小。而它一共有8各socket,平均每个socket就是2K大小。如果想要突破2K大小的限制,就必须要改W5500的初始化参数。比如我搞的一个产品里,2K不满足要求,我改为了4K。
- /**@brief W5500初始化函数
- *@param None
- *@ret None
- */
- void W5500_init(void)
- {
- //uint8_t memsize[2][8] = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}}; //默认每个SOCKET分配2K空间
- uint8_t memsize[2][8] = {{4,4,4,4,0,0,0,0},{4,4,4,4,0,0,0,0}}; //改TX的 socket0 - 4 容量从默认2K到4K, 改RX的 socket0 - 4 容量从默认2K到4K
- uint8_t tmp;
- // 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); //注册读写函数
- /* WIZCHIP SOCKET Buffer initialize */
- if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1)
- {
- printf("WIZCHIP Initialized fail.\r\n");
- while(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);
- }
复制代码
|
|