关于初始化W5500与LPC1768之间的通信

通信步骤:1.初始化W5500的相关引脚,在这里要注意看原理图,看看W5500和主控制芯片是怎么连接的。

                    2.W5500 与外设主机的通讯受 SPI 数据帧控制,W5500 的帧分为 3 段:地址段,控制段,数据段。所以要对SPI进行相应的初始化,在这里包括SCSn  ,SCLK  时钟输入(SPI clock input),MISO 主机输入从机(W5500 )输出,MOSI 主机输出从机(W5500 )输入,INTn中断输出(Interrupt output ),RSTn  复位,这些一定要对着所设计的芯片手册完成,注意各个引脚的位是什么意思。

                  3.完成所有引脚的初始化之后,需要重新启动W5500.

                  4.配置网络信息

                     void set_network(void)
{
  uint8_t ip[4];
  setSHAR(ConfigMsg.mac);
  setSUBR(ConfigMsg.sub);
  setGAR(ConfigMsg.gw);
  setSIPR(ConfigMsg.lip);

  //Init. TX & RX Memory size of w5500
  wizchip_init(txsize, rxsize);
 
  setRTR(2000);//200ms
  setRCR(3);
 
  setSn_IMR(0, 0x07);
  setSn_IMR(1, 0x07);//enable socket 1 receive interrupt
  setSn_IMR(2, 0x07);
  setSn_IMR(3, 0x07);
  setSn_IMR(4, 0x07);
  setSn_IMR(5, 0x07);
  setSn_IMR(6, 0x07);
  setSn_IMR(7, 0x07);
  setSIMR(0xff);//enable socket interrupt
 

  getSIPR (ip);

  _printf("IP : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]);

  getSUBR(ip);

  _printf("SN : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]);

  getGAR(ip);

  _printf("GW : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]);
}

void set_default(void)
{
  uint8 mac[6]={0x00,0x08,0xdc,0x11,0x11,0x15};
  uint8 lip[4]={192,168,0,202};
  uint8 sub[4]={255,255,255,0};
  uint8 gw[4]={192,168,0,1};
  uint8 dns[4]={8,8,8,8};
  tcp_port = 6180;
  if(get_eth_para())
  //if(0)
  {
    lip[0] = eth_para[0];
    lip[1] = eth_para[1];
    lip[2] = eth_para[2];
    lip[3] = eth_para[3];
    sub[0] = eth_para[4];
    sub[1] = eth_para[5];
    sub[2] = eth_para[6];
    sub[3] = eth_para[7];
    gw[0] = eth_para[8];
    gw[1] = eth_para[9];
    gw[2] = eth_para[10];
    gw[3] = eth_para[11];
    mac[0] = eth_para[12];
    mac[1] = eth_para[13];
    mac[2] = eth_para[14];
    mac[3] = eth_para[15];
    mac[4] = eth_para[16];
    mac[5] = eth_para[17];
    tcp_port = eth_para[18];
    tcp_port = (tcp_port<<8) | eth_para[19];
  }
  memcpy(ConfigMsg.lip, lip, 4);
  memcpy(ConfigMsg.sub, sub, 4);
  memcpy(ConfigMsg.gw,  gw, 4);
  memcpy(ConfigMsg.mac, mac,6);
  memcpy(ConfigMsg.dns,dns,4);
  /*
  uint8 dhcp;
  uint8 debug;

  uint16 fw_len;
  uint8 state;
  */
  ConfigMsg.dhcp=0;
  ConfigMsg.debug=1;
  ConfigMsg.fw_len=0;
 
  ConfigMsg.state=NORMAL_STATE;
  ConfigMsg.sw_ver[0]=FW_VER_HIGH;
  ConfigMsg.sw_ver[1]=FW_VER_LOW;
 
}

                  4打开TCP服务器,W5500有八个TCP可以用到。

                  下面是除了初始化之后的通信部分程序

                 TCPServerOpen(1, tcp_port);//打开TCP服务器----一共5个tcp_port相当于一个身份??
        TCPServerOpen(2, tcp_port);
        TCPServerOpen(3, tcp_port);
        TCPServerOpen(4, tcp_port);
        TCPServerOpen(5, tcp_port);
        //TCPServerOpen(0, 80);
        
        UDPOpen(6, 6180);//??
        
    
        /* Loop forever */
    while(1)//这些所有的东西都在一个大的While循环中进行
    {
           
      for(i = 0; i < 5; i++)
      {
                if(eth_get_data[i])
                {
            eth_data_proc(i+1, tcp_port);
            eth_get_data[i] = 0;
                }
      }
      
      for(i = 0; i < 5; i++)
      {
              if(eth_get_order[i])
              {
            eth_order_proc(i);
            order_src = i+1;
               }
      }
      
      for(i = 0; i < 5; i++)
      {
               if(sock_connected[i])
                {
            if(keep_alive_delay[i] > 3000)//活跃时间大于3000的话从新关闭TCP,并对其进行重新打开
             {
               TCPClose(i+1);
               sock_connected[i] = 0;
               TCPServerOpen(i+1, tcp_port);
            }
                 }
      }


下面是关于W5500芯片手册的介绍

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)及掉电模式供客户选择使用。
特点
-  支持硬件 TCP/IP 协议:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE
-  支持 8 个独立端口(Socket)同时通讯
-  支持掉电模式
-  支持网络唤醒
-  支持高速串行外设接口(SPI 模式 0,3)
-  内部 32K 字节收发缓存
-  内嵌 10BaseT/100BaseTX 以太网物理层(PHY)
-  支持自动协商(10/100-Based 全双工/半双工)
-  不支持 IP 分片
-  3.3V 工作电压,I/O 信号口 5V 耐压;
-  LED 状态显示(全双工/半双工,网络连接,网络速度,活动状态)
-  48 引脚 LQFP 无铅封装(7x7mm, 0.5mm 间距)

目标应用
W5500 适合于以下嵌入式应用:
- 家庭网络设备: 机顶盒、个人录像机、数码媒体适配器
- 串行转以太网: 门禁控制、LED 显示屏、无线 AP 继电器等
- 并行转以太网: POS/微型打印机、复印机
- USB 转以太网: 存储设备、网络打印机
- GPIO 转以太网: 家庭网络传感器
- 安全系统: 数字录像机、网络摄像机、信息亭
- 工厂和楼宇自动化控制系统
- 医疗监测设备
- 嵌入式服务器

SPI 工作模式
W5500 与外设主机的通讯受 SPI 数据帧控制 。
W5500 的帧分为 3 段:地址段,控制段,数据段。
地址段为 W5500 寄存器或 TX/RX 内存指定了 16 位的偏移地址。
控制段指定了地址段设定的偏移区域的归属,读/写访问模式以及 SPI 工作模式(可变长度模式/固定长度模式)。
数据段可以设定为任意长度(N-字节,1≤N)或者是固定的长度:1 字节,2 字节或 4 字节;
如果 SPI 工作模式设置为可变数据长度模式(VDM),SPI 的 SCSn 信号需要由外部主机通过 SPI 帧控制。
在可变数据长度模式下,SCSn 控制 SPI 帧的开始和停止:
SCSn 信号拉低(高电平到低电平),即代表 W5500 的 SPI 帧开始(地址段);
SCSn 信号拉高(低电平到高电平),即代表 W5500 的 SPI 帧结束(数据段的随机 N字节数据结尾);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值