【以太网硬件TCP/IP协议栈】硬件协议栈W5500应用

硬件协议栈和软件协议的区别:

MCU+MAC+PHY方案

传统的以太网接入方案如下图,由 MCU+MAC+PHY 再加入网络接口实现以太网的物理连接,通过在主控芯片中植入TCP/IP 协议代码实现通信及上层应用。

 

硬件协议栈W5500芯片方案

www.w5500.com文档例程全在里面。

由 MCU+硬件协议栈芯片(内含 MAC和 PHY)直接加网络接口,便可方便的实现单片机联网,所有的处理 TCP/IP 协议的工作都是通过硬件协议栈芯片来完成。

 硬件协议栈是指通过将传统的软件 TCP/IP 协议栈用硬件化的逻辑门电路来实现:

 两种方案对比

方案分类

MCU资源利用

代码量

安全性

灵活型

MAC+PHY方案

频繁响应中断,占用MCU运算/时钟资源

轻量级TCP/IP协议栈,约40KB代码量。

软件协议栈容易受到恶意攻击

软件协议栈具备灵活性

W5500硬件协议栈芯片方案

MCU 只需要处理面向用户的应用层数据

完成对Socket 的编程以及寄存器的调用,仅有 10K 左右的代码量

硬件化的电路处理协议会更加快速、稳定

只支持 4 /8 Socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

W5500硬件方案

硬件连接主要如下:

注: 一号片选引荐SCS低电平有效。

 程序文件分类

W5500初始化需要以下几个文件:

W5500初始化

操作W5500需要配置下列寄存器参数:

1. 模式寄存器(MR)
2. 中断屏蔽寄存器(IMR)
3. 重发时间寄存器(RTR)
4. 重发计数寄存器(RCR)

网络信息设置:

1. 网关地址寄存器(GAR)
2. 本机物理地址寄存器(SHAR)
3. 子网掩码寄存器(SUBR)
4. 本机 IP 地址寄存器(SIPR)

代码分析

SOCKET 接收TX和发送缓存RX的大小配置文件

void socket_buf_init( uint8 * tx_size, uint8 * rx_size  )
{
  int16 i;
  int16 ssum=0,rsum=0;
 
  for (i = 0 ; i < MAX_SOCK_NUM; i++)       // Set the size, masking and base address of Tx & Rx memory by each channel
  {
          IINCHIP_WRITE( (Sn_TXMEM_SIZE(i)), tx_size[i]);
          IINCHIP_WRITE( (Sn_RXMEM_SIZE(i)), rx_size[i]);
          
#ifdef __DEF_IINCHIP_DBG__
         printf("tx_size[%d]: %d, Sn_TXMEM_SIZE = %d\r\n",i, tx_size[i], IINCHIP_READ(Sn_TXMEM_SIZE(i)));
         printf("rx_size[%d]: %d, Sn_RXMEM_SIZE = %d\r\n",i, rx_size[i], IINCHIP_READ(Sn_RXMEM_SIZE(i)));
#endif
    SSIZE[i] = (int16)(0);
    RSIZE[i] = (int16)(0);
	
    if (ssum <= 16384)
    {
			SSIZE[i] = (int16)tx_size[i]*(1024);
    }

	if (rsum <= 16384)
	{
			RSIZE[i]=(int16)rx_size[i]*(1024);
    }
			ssum += SSIZE[i];
			rsum += RSIZE[i];

  }
}

初始化接收和发送缓存的大小:

	socket_buf_init(txsize, rxsize);		/*初始化8个Socket的发送接收缓存大小*/

W5500 有 1 个通用寄存器,8 个 Socket 寄存器区,以及对应每个 Socket 的收/发缓存区。开启8个通道,每一个 Socket 的发送缓存区都在一个 16KB 的物理发送内存中,初始化分配为 2KB。每一个 Socket 的接收缓存区都在一个 16KB 的物理接收内存中,初始化分配为 2KB。无论给每个 Socket 分配多大的收/发缓存,都必须在 16 位的偏移地址范围内(从 0x0000 到 0xFFFF)。
16KB 的发送内存初始化被分配为每个 Socket 2KB 发送缓存区(2KB X 8 =16KB)。初始化分配的 2KB Socket 发送缓存,可以通过使用 Socket 发送缓存大小寄存器(Sn_TXBUF_SIZE)重新分配。一旦所有的 Socket 发送缓存大小寄存器(Sn_TXBUF_SIZE)配置完成,16KB 的发送内存就会按照配置分配给每个 Socket的发送缓存,并按照从 Socket 0 到 7 顺序分配。

uint8 txsize[MAX_SOCK_NUM] = {2,2,2,2,2,2,2,2};//tx buffer set	K bits
uint8 rxsize[MAX_SOCK_NUM] = {2,2,2,2,2,2,2,2};//rx buffet set  K bits

  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
W5500是一种高度集成的以太网控制器,它集成了完整的TCP/IP协议,可以在FPGA中使用。W5500的FPGA源码是用于在FPGA芯片上实现W5500的功能的代码。 W5500的FPGA源码主要包括硬件描述语言(HDL)代码,如Verilog或VHDL,以及必要的配置和控制代码。FPGA源码的功能是在FPGA芯片上实现W5500的控制器,以便实现TCP/IP协议。 使用W5500的FPGA源码,我们可以借助FPGA的可编程性,将W5500的控制器功能集成到我们的FPGA设计中。这样,我们就可以实现一个基于W5500以太网应用,如网络通信、远程控制等。 FPGA源码的编写需要具备一定的硬件描述语言知识,以及熟悉W5500芯片的功能和寄存器配置的技能。我们可以根据W5500的数据手册来编写FPGA源码,并根据需要进行相应的配置和控制。 使用W5500的FPGA源码可以带来一些优势。首先,FPGA的可编程性使得我们可以根据具体应用的需求进行自定义,实现更高性能和更好的定制性。其次,W5500硬件卸载功能可以减轻主处理器的负荷,使其能够更专注于其他任务。此外,W5500的集成度较高,可以减少组件的复杂度和成本。 总之,W5500的FPGA源码是用于实现W5500控制器在FPGA芯片上的功能的代码。通过使用W5500的FPGA源码,我们可以实现一个基于W5500的高度集成的TCP/IP协议,并将其应用于各种网络通信和远程控制领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米杰的声音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值