#创作者激励#STM32驱动网卡W5500 |
您所在的位置:网站首页 › usb网卡接口定义 › #创作者激励#STM32驱动网卡W5500 |
1.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)及掉电模式供客户选择使用。
W5500提供了SPI(串行外部接口)作为外设主机接口,共有 SCSn, SCLK, MOSI,MISO 4 路信号,且作为 SPI 从机工作。根据SCSn引脚的选择,WW5500的数据数据长度可以设置为可变长度和固定长度。如下图接线方式为可变数据长度。
![]() W5500 的 SPI 数据帧包括了 16 位地址段的偏移地址, 8 位控制段和 N 字节数据段。
8 位控制段可以通过修改区域选择位 (BSB[4:0]),读/写访问模式位(RWB)以及 SPI工作模式位(OM[1:0])来重新定义。区域选择位选择了归属于偏移地址的区域。
![]() ![]() ![]() ![]() ![]() ![]() ![]() 硬件开发平台:STM32F103C8T6 驱动协议:SPI 开发环境:KEIL5 5.1 接线方式 W5500模块 STM32核心板 片选CS PB12 时钟SCLK PB13 主机输入MISO PB14 主机输出MOSI PB15 INT PB0 RST PB1 5.2 SPI底层驱动编写w5500_config.c文件 CONFIG_MSG ConfigMsg; /*配置结构体*/ /*定义MAC地址,如果多块W5500网络适配板在同一现场工作,请使用不同的MAC地址*/ uint8 mac[6]={0x00,0x08,0xdc,0x11,0x11,0x11}; /*定义默认IP信息*/ uint8 local_ip[4] ={192,168,1,88}; /*定义W5500默认IP地址*/ uint8 subnet[4] ={255,255,255,0}; /*定义W5500默认子网掩码*/ uint8 gateway[4] ={192,168,1,1}; /*定义W5500默认网关*/ uint8 dns_server[4]={114,114,114,114}; /*定义W5500默认DNS*/ uint16 local_port=5000; /*定义本地端口*/ /*定义远端IP信息*/ uint8 remote_ip[4]={192,168,1,102}; /*远端IP地址*/ uint16 remote_port=5000; /*远端端口号*/ /*IP配置方法选择,请自行选择*/ uint8 ip_from=IP_FROM_DHCP; uint8 dhcp_ok = 0; /*dhcp成功获取IP*/ uint32 ms = 0; /*毫秒计数*/ uint32 dhcp_time = 0; /*DHCP运行计数*/ vu8 ntptimer = 0; /*NPT秒计数*/ /*硬件配置*/ void W5500_GPIO_Init(void) { RCC->APB2ENR|=1CRH|=0x38330000; GPIOB->CRL&=0xFFFFFF00; GPIOB->CRL|=0x00000038; W5500_CS=1; W5500_RST=1; } /*模块复位*/ void W5500_reset(void) { W5500_RST=0; Delay_Us(2); W5500_RST=1; Delay_Ms(1000); Delay_Ms(600); } /*SPI读写一个字节*/ u8 SPI_WR_Byte(u8 byte) { u8 data_rx=0; u8 i=0; for(i=0;i>16); IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8); IINCHIP_SpiSendData( (addrbsb & 0x000000F8)) ; data = IINCHIP_SpiSendData(0x00); W5500_CS=1; return data; } /* 向W5500指定地址写入指定长度数据 形参:addrbsb -- 写入的地址 buf -- 要写入的数据 len -- 写入的长度 返回值:写入的数据长度 */ u16 wiz_write_buf(u32 addrbsb,u8* buf,u16 len) { u16 idx = 0; if(len == 0) printf("Êý¾Ý³¤¶ÈΪ0\r\n"); W5500_CS=0; IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16); IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8); IINCHIP_SpiSendData( (addrbsb & 0x000000F8) + 4); for(idx = 0; idx < len; idx++) { IINCHIP_SpiSendData(buf[idx]); } W5500_CS=1; return len; } /* 从指定地址读取指定长度数据 形参:addrbsb -- 读取的地址 buf -- 读取的数据保存地址 len -- 读取的长度 返回值:读取的数据长度 */ u16 wiz_read_buf(u32 addrbsb, u8* buf,u16 len) { u16 idx = 0; W5500_CS=0; IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16); IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8); IINCHIP_SpiSendData( (addrbsb & 0x000000F8)); for(idx = 0; idx < len; idx++) { buf[idx] = IINCHIP_SpiSendData(0x00); } W5500_CS=1; return len; } /*DHCP用到定时器初始化*/ void dhcp_timer_init(void) { TIMx_Init(TIM3,72,1000); TIM3->CR1|=1 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |