W5500 使用总结

一、资源

官网:WIZnet – 官方中文网站 (iwiznet.cn)

芯片资源:W5500 – WIZnet (iwiznet.cn)

驱动库:GitHub - Wiznet/ioLibrary_Driver: Create a repository of WIZnet ioLibrary.

二、W5500功能框图在这里插入图片描述

三、接口

W5500 提供了 SPI(串行外部接口)作为外设主机接口,有 SCSn,SCLK, MOSI, MISO 共 4 路信号,且作为 SPI 从机工作

W5500 支持 SPI 模式 0 及模式 3。MOSI 和 MISO 信号无论是接收发送,均遵从从最高标志位(MSB)到最低标志位(LSB)的传输序列。

四、工作模式

1、可变数据模式

在可变数据长度模式(如图 4 所示),W5500 可以与其他 SPI 设备共用 SPI 接口。
在这里插入图片描述

2、固定数据模式

在固定数据长度模式(如图 5 所示),SPI 将指定给 W5500,不能与其他 SPI 设备共享。
在这里插入图片描述

五、数据帧格式

在这里插入图片描述
W5500 的 SPI 数据帧包括了 16 位地址段的偏移地址,8 位控制段N 字节数据段
在这里插入图片描述
W5500 支持数据的连续读/写。其流程为数据从(2/4/N 字节连续数据 的)偏移地址的基址开始传输,偏移地址会(自增寻址)加 1 传输接下来 的数据。

六、寄存器和内存

1、1 个通用寄存器

2、8 个 Socket 寄存器

3、每个 Socket 收发缓存区
在这里插入图片描述

1、通用寄存器

通用寄存器区配置了 W5500 的基本信息,例如:IP 及 MAC 地址。
在这里插入图片描述

2、socket 寄存器

在这里插入图片描述

七、W5500使用

1、W5500启动和配置

1、重置 W5500(RSTn引脚保持低电平 500us 以上)。

2、配置 W5500

  • 设置 mac 值(SHAR)
  • 设置 ip 地址(SIPR)
  • 设置子网掩码(SUBR)
  • 设置网关(GAR)
  • 为 socket 分配缓存大小(Sn_RXBUF_SIZE 、Sn_TXBUF_SIZE)
  • 设置重试时间(RTR)和重试次数(RCR)

3、示例

unsigned char txsize[8] = {16,0,0,0,0,0,0,0};
unsigned char rxsize[8] = {16,0,0,0,0,0,0,0};

static void lan_in_set_parameter(void)
{
	unsigned char mac[6]={0x00,0x08,0xdc,0x11,0x11,0x11};
	unsigned char ip[4]={192,168,1,100};
	unsigned char sub[4]={255,255,255,0};
	unsigned char gw[4]={192,168,1,1};

	setSHAR(mac);
	setSIPR(ip);
	setSUBR(sub);
	setGAR(gw);
	sysinit(txsize, rxsize);
	setRTR(2000);
	setRCR(3);
}

2、MACRAW模式

1、开启 macraw 模式

void macraw_open(void)
{
  uint8 sock_num;
  uint16 dummyPort = 0;
  uint8 mFlag = 0;
  sock_num = 0;


  close(sock_num); // Close the 0-th socket
  socket(sock_num, Sn_MR_MACRAW, dummyPort,mFlag);  // OPen the 0-th socket with MACRAW mode
}
/* 以上函数为 w5500 提供库函数 */

2、数据接收

/*
buf - 数据接收缓存
len - W5500接收缓存中数据长度
返回值 - 当前mac帧长度(指示函数执行后获取数据长度)
*/
uint16 macraw_recv( uint8 * buf, uint16 len )
{
   uint8 sock_num;
   uint16 data_len=0;
   uint16 dummyPort = 0;
   uint16 ptr = 0;
   uint8 mFlag = 0;
   sock_num = 0;

   if ( len > 0 )
   {

      data_len = 0;

      ptr = IINCHIP_READ(Sn_RX_RD0(sock_num));
      ptr = (uint16)((ptr & 0x00ff) << 8) + IINCHIP_READ( Sn_RX_RD1(sock_num) );
      //-- read_data(s, (uint8 *)ptr, data, len); // read data
      data_len = IINCHIP_READ_RXBUF(0, ptr);
      ptr++;
      data_len = ((data_len<<8) + IINCHIP_READ_RXBUF(0, ptr)) - 2;
      ptr++;

      if(data_len > 1514)
      {
         printf("data_len over 1514\r\n");
         printf("\r\nptr: %X, data_len: %X", ptr, data_len);
         //while(1);
         /** recommand : close and open **/
         close(sock_num); // Close the 0-th socket
         socket(sock_num, Sn_MR_MACRAW, dummyPort,mFlag);  // OPen the 0-th socket with MACRAW mode
         return 0;
      }

      IINCHIP_READ_RXBUF_BURST(sock_num, ptr, data_len, (uint8*)(buf));
      ptr += data_len;

      IINCHIP_WRITE(Sn_RX_RD0(sock_num),(uint8)((ptr & 0xff00) >> 8));
      IINCHIP_WRITE(Sn_RX_RD1(sock_num),(uint8)(ptr & 0x00ff));
      IINCHIP_WRITE(Sn_CR(sock_num), Sn_CR_RECV);
      while( IINCHIP_READ(Sn_CR(sock_num)) ) ;
   }

   return data_len;
}
/* 以上函数为 w5500 提供库函数 */

MACRAW 模式下,W5500 接收缓存中数据结构:
在这里插入图片描述
3、数据发送

/*
buf - 数据发送缓存
len - 发送数据长度
返回值 - 成功发送数据长度
*/
uint16 macraw_send( const uint8 * buf, uint16 len )
{
   uint16 ret=0;
   uint8 sock_num;
   sock_num =0;


   if (len > getIINCHIP_TxMAX(sock_num)) ret = getIINCHIP_TxMAX(sock_num); // check size not to exceed MAX size.
   else ret = len;

   send_data_processing(sock_num, (uint8 *)buf, len);

   //W5500 SEND COMMAND
   IINCHIP_WRITE(Sn_CR(sock_num),Sn_CR_SEND);
   while( IINCHIP_READ(Sn_CR(sock_num)) );
   while ( (IINCHIP_READ(Sn_IR(sock_num)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK );
   IINCHIP_WRITE(Sn_IR(sock_num), Sn_IR_SEND_OK);

   return ret;
}
/* 以上函数为 w5500 提供库函数 */

3、TCP模式

1、配置 W5500,具体见 W5500 启动和配置章节。

2、开启 socket

/*
s - 指定 socket
protocol - 指定 socket 工作模式
port - 指定 socket 本地端口号
flag - 指定 socket 附加模式
返回值 - 表示 socket 函数执行是否成功
*/
uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag)
{
   uint8 ret;
   if (
        ((protocol&0x0F) == Sn_MR_TCP)    ||
        ((protocol&0x0F) == Sn_MR_UDP)    ||
        ((protocol&0x0F) == Sn_MR_IPRAW)  ||
        ((protocol&0x0F) == Sn_MR_MACRAW) ||
        ((protocol&0x0F) == Sn_MR_PPPOE)
      )
   {
      close(s);
      IINCHIP_WRITE(Sn_MR(s) ,protocol | flag);
      if (port != 0) {
         IINCHIP_WRITE( Sn_PORT0(s) ,(uint8)((port & 0xff00) >> 8));
         IINCHIP_WRITE( Sn_PORT1(s) ,(uint8)(port & 0x00ff));
      } else {
         local_port++; // if don't set the source port, set local_port number.
         IINCHIP_WRITE(Sn_PORT0(s) ,(uint8)((local_port & 0xff00) >> 8));
         IINCHIP_WRITE(Sn_PORT1(s) ,(uint8)(local_port & 0x00ff));
      }
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_OPEN); // run sockinit Sn_CR

      /* wait to process the command... */
      while( IINCHIP_READ(Sn_CR(s)) )
         ;
      /* ------- */
      ret = 1;
   }
   else
   {
      ret = 0;
   }
   return ret;
}
/* 以上函数为 w5500 提供库函数 */

3、监听(做服务端)

/*
s - 指定 socket
返回值 - 表示函数执行是否成功
*/
uint8 listen(SOCKET s)
{
   uint8 ret;
   if (IINCHIP_READ( Sn_SR(s) ) == SOCK_INIT)
   {
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_LISTEN);
      /* wait to process the command... */
      while( IINCHIP_READ(Sn_CR(s) ) )
         ;
      /* ------- */
      ret = 1;
   }
   else
   {
      ret = 0;
   }
   return ret;
}
/* 以上函数为 w5500 提供库函数 */

4、连接(做客户端)

/*
s - 指定 socket
addr - 指定对端 ip 地址
port - 指定对端端口号
返回值 - 表示函数执行是否成功
*/
uint8 connect(SOCKET s, uint8 * addr, uint16 port)
{
    uint8 ret;
    if
        (
            ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
            ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
            (port == 0x00)
        )
    {
      ret = 0;
    }
    else
    {
        ret = 1;
        // set destination IP
        IINCHIP_WRITE( Sn_DIPR0(s), addr[0]);
        IINCHIP_WRITE( Sn_DIPR1(s), addr[1]);
        IINCHIP_WRITE( Sn_DIPR2(s), addr[2]);
        IINCHIP_WRITE( Sn_DIPR3(s), addr[3]);
        IINCHIP_WRITE( Sn_DPORT0(s), (uint8)((port & 0xff00) >> 8));
        IINCHIP_WRITE( Sn_DPORT1(s), (uint8)(port & 0x00ff));
        IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_CONNECT);
        /* wait for completion */
        while ( IINCHIP_READ(Sn_CR(s) ) ) ;

        while ( IINCHIP_READ(Sn_SR(s)) != SOCK_SYNSENT )
        {
            if(IINCHIP_READ(Sn_SR(s)) == SOCK_ESTABLISHED)
            {
                break;
            }
            if (getSn_IR(s) & Sn_IR_TIMEOUT)
            {
                IINCHIP_WRITE(Sn_IR(s), (Sn_IR_TIMEOUT));  // clear TIMEOUT Interrupt
                ret = 0;
                break;
            }
        }
    }

   return ret;
}
/* 以上函数为 w5500 提供库函数 */

5、接收数据

void recv_data_processing(SOCKET s, uint8 *data, uint16 len)
{
  uint16 ptr = 0;
  uint32 addrbsb = 0;
  
  if(len == 0)
  {
    printf("CH: %d Unexpected2 length 0\r\n", s);
    return;
  }

  ptr = IINCHIP_READ( Sn_RX_RD0(s) );
  ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ( Sn_RX_RD1(s) );

  addrbsb = ((uint32)ptr<<8) + (s<<5) + 0x18;
  wiz_read_buf(addrbsb, data, len);
  ptr += len;

  IINCHIP_WRITE( Sn_RX_RD0(s), (uint8)((ptr & 0xff00) >> 8));
  IINCHIP_WRITE( Sn_RX_RD1(s), (uint8)(ptr & 0x00ff));
}

/*
s - 指定 socket
addr - 指定接收数据缓存
port - 指定接收数据长度
返回值 - 无
*/
uint16 recv(SOCKET s, uint8 * buf, uint16 len)
{
   uint16 ret=0;
   if ( len > 0 )
   {
      recv_data_processing(s, buf, len);
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_RECV);
      /* wait to process the command... */
      while( IINCHIP_READ(Sn_CR(s) ));
      /* ------- */
      ret = len;
   }
   return ret;
}
/* 以上函数为 w5500 提供库函数 */

TCP 模式下,W5500 接收缓存中数据结构:
在这里插入图片描述
6、发送数据

/*
s - 指定 socket
addr - 指定发送数据缓存
port - 指定发送数据长度
返回值 - 返回成功发送数据长度
*/
uint16 send(SOCKET s, const uint8 * buf, uint16 len)
{
  uint8 status=0;
  uint16 ret=0;
  uint16 freesize=0;

  if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  else ret = len;

  // if freebuf is available, start.
  do
  {
    freesize = getSn_TX_FSR(s);
    status = IINCHIP_READ(Sn_SR(s));
    if ((status != SOCK_ESTABLISHED) && (status != SOCK_CLOSE_WAIT))
    {
      ret = 0;
      break;
    }
  } while (freesize < ret);


  // copy data
  send_data_processing(s, (uint8 *)buf, ret);
  IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_SEND);

  /* wait to process the command... */
  while( IINCHIP_READ(Sn_CR(s) ) );

  while ( (IINCHIP_READ(Sn_IR(s) ) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  {
    status = IINCHIP_READ(Sn_SR(s));
    if ((status != SOCK_ESTABLISHED) && (status != SOCK_CLOSE_WAIT) )
    {
      printf("SEND_OK Problem!!\r\n");
      close(s);
      return 0;
    }
  }
  IINCHIP_WRITE( Sn_IR(s) , Sn_IR_SEND_OK);

#ifdef __DEF_IINCHIP_INT__
   putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
#else
   IINCHIP_WRITE( Sn_IR(s) , Sn_IR_SEND_OK);
#endif

   return ret;
}
/* 以上函数为 w5500 提供库函数 */

7、关闭 socket

/*
s - 指定 socket
返回值 - 无
*/
void close(SOCKET s)
{

   IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_CLOSE);

   /* wait to process the command... */
   while( IINCHIP_READ(Sn_CR(s) ) )
      ;
   /* ------- */
        /* all clear */
   IINCHIP_WRITE( Sn_IR(s) , 0xFF);
}
/* 以上函数为 w5500 提供库函数 */

4、UDP模式、IPRAW模式

1、配置 W5500,具体见 W5500 启动和配置章节。

2、开启 socket

/*
s - 指定 socket
protocol - 指定 socket 工作模式
port - 指定 socket 本地端口号
flag - 指定 socket 附加模式
返回值 - 表示 socket 函数执行是否成功
*/
uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag)
{
   uint8 ret;
   if (
        ((protocol&0x0F) == Sn_MR_TCP)    ||
        ((protocol&0x0F) == Sn_MR_UDP)    ||
        ((protocol&0x0F) == Sn_MR_IPRAW)  ||
        ((protocol&0x0F) == Sn_MR_MACRAW) ||
        ((protocol&0x0F) == Sn_MR_PPPOE)
      )
   {
      close(s);
      IINCHIP_WRITE(Sn_MR(s) ,protocol | flag);
      if (port != 0) {
         IINCHIP_WRITE( Sn_PORT0(s) ,(uint8)((port & 0xff00) >> 8));
         IINCHIP_WRITE( Sn_PORT1(s) ,(uint8)(port & 0x00ff));
      } else {
         local_port++; // if don't set the source port, set local_port number.
         IINCHIP_WRITE(Sn_PORT0(s) ,(uint8)((local_port & 0xff00) >> 8));
         IINCHIP_WRITE(Sn_PORT1(s) ,(uint8)(local_port & 0x00ff));
      }
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_OPEN); // run sockinit Sn_CR

      /* wait to process the command... */
      while( IINCHIP_READ(Sn_CR(s)) )
         ;
      /* ------- */
      ret = 1;
   }
   else
   {
      ret = 0;
   }
   return ret;
}
/* 以上函数为 w5500 提供库函数 */

3、接收数据

/*
s - 指定 socket
buf - 指定数据接收缓存
len - 指定 W5500 缓存中数据长度
addr - 指定保存数据发送端 IP 地址缓存
port - 指定保存数据发送端 PORT 缓存
返回值 - 返回成功获取数据长度
*/
uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port)
{
   uint8 head[8];
   uint16 data_len=0;
   uint16 ptr=0;
   uint32 addrbsb =0;
   if ( len > 0 )
   {
      ptr     = IINCHIP_READ(Sn_RX_RD0(s) );
      ptr     = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_RX_RD1(s));
      addrbsb = (uint32)(ptr<<8) +  (s<<5) + 0x18;
      
      switch (IINCHIP_READ(Sn_MR(s) ) & 0x07)
      {
      case Sn_MR_UDP :
        wiz_read_buf(addrbsb, head, 0x08);        
        ptr += 8;
        // read peer's IP address, port number.
        addr[0]  = head[0];
        addr[1]  = head[1];
        addr[2]  = head[2];
        addr[3]  = head[3];
        *port    = head[4];
        *port    = (*port << 8) + head[5];
        data_len = head[6];
        data_len = (data_len << 8) + head[7];

        addrbsb = (uint32)(ptr<<8) +  (s<<5) + 0x18;
        wiz_read_buf(addrbsb, buf, data_len);                
        ptr += data_len;

        IINCHIP_WRITE( Sn_RX_RD0(s), (uint8)((ptr & 0xff00) >> 8));
        IINCHIP_WRITE( Sn_RX_RD1(s), (uint8)(ptr & 0x00ff));
        break;

      case Sn_MR_IPRAW :
        wiz_read_buf(addrbsb, head, 0x06);        
        ptr += 6;
        addr[0]  = head[0];
        addr[1]  = head[1];
        addr[2]  = head[2];
        addr[3]  = head[3];
        data_len = head[4];
        data_len = (data_len << 8) + head[5];

        addrbsb  = (uint32)(ptr<<8) +  (s<<5) + 0x18;
        wiz_read_buf(addrbsb, buf, data_len);        
        ptr += data_len;

        IINCHIP_WRITE( Sn_RX_RD0(s), (uint8)((ptr & 0xff00) >> 8));
        IINCHIP_WRITE( Sn_RX_RD1(s), (uint8)(ptr & 0x00ff));
        break;

      case Sn_MR_MACRAW :
        wiz_read_buf(addrbsb, head, 0x02);
        ptr+=2;
        data_len = head[0];
        data_len = (data_len<<8) + head[1] - 2;
        if(data_len > 1514)
        {
           printf("data_len over 1514\r\n");
           while(1);
        }

        addrbsb  = (uint32)(ptr<<8) +  (s<<5) + 0x18;
        wiz_read_buf(addrbsb, buf, data_len);
        ptr += data_len;

        IINCHIP_WRITE( Sn_RX_RD0(s), (uint8)((ptr & 0xff00) >> 8));
        IINCHIP_WRITE( Sn_RX_RD1(s), (uint8)(ptr & 0x00ff));
        break;

      default :
            break;
      }
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_RECV);

      /* wait to process the command... */
      while( IINCHIP_READ( Sn_CR(s)) ) ;
      /* ------- */
   }
   return data_len;
}
/* 以上函数为 w5500 提供库函数 */

UDP 模式下,W5500 接收缓存中数据结构:
在这里插入图片描述
IPRAW 模式下,W5500 接收缓存中数据结构:
在这里插入图片描述
4、发送数据

/*
s - 指定 socket
buf - 指定数据发送缓存
len - 指定发送数据长度
addr - 指定接收端 IP 地址
port - 指定接收端端 PORT
返回值 - 返回成功发送数据长度
*/
uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port)
{
   uint16 ret=0;

   if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
   else ret = len;

   if( ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) || ((port == 0x00)) )//||(ret == 0) )
   {
      /* added return value */
      ret = 0;
   }
   else
   {
      IINCHIP_WRITE( Sn_DIPR0(s), addr[0]);
      IINCHIP_WRITE( Sn_DIPR1(s), addr[1]);
      IINCHIP_WRITE( Sn_DIPR2(s), addr[2]);
      IINCHIP_WRITE( Sn_DIPR3(s), addr[3]);
      IINCHIP_WRITE( Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));
      IINCHIP_WRITE( Sn_DPORT1(s),(uint8)(port & 0x00ff));
      // copy data
      send_data_processing(s, (uint8 *)buf, ret);
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_SEND);
      /* wait to process the command... */
      while( IINCHIP_READ( Sn_CR(s) ) )
         ;
      /* ------- */

      while( (IINCHIP_READ( Sn_IR(s) ) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
      {
         if (IINCHIP_READ( Sn_IR(s) ) & Sn_IR_TIMEOUT)
         {
            /* clear interrupt */
            IINCHIP_WRITE( Sn_IR(s) , (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
            return 0;
         }
      }
      IINCHIP_WRITE( Sn_IR(s) , Sn_IR_SEND_OK);
   }
   return ret;
}
/* 以上函数为 w5500 提供库函数 */
1.引言 随着通信技术的不断进步和应用场景的不断拓展,5G移动通信网络作为新一代移动通信技术备受关注。本文将从5G移动通信网络的技术特点、研究现状和未来发展等方面进行综述。 2.5G移动通信网络的技术特点 2.1 高速率 5G移动通信网络的最大特点是其高速率。其理论峰值速率可达20Gbps,远远高于4G的理论峰值速率1Gbps,这将使得用户可以更快地下载和上传大容量的数据。 2.2 低延迟 5G移动通信网络的另一个特点是其低延迟。它的延迟时间将降低到1毫秒以下,这将使得人们可以更快地获取所需的信息,并更好地支持实时应用程序,如虚拟现实和增强现实等。 2.3更大的容量 5G移动通信网络的容量将比4G增加10倍以上,这将使得网络可以更好地支持大量的设备和应用程序。此外,5G还可以支持更多的频段,包括毫米波和中频段。 2.4更广泛的覆盖范围 5G移动通信网络将具有更广泛的覆盖范围,这将使得人们可以更容易地访问网络,并使得网络覆盖更偏远的地区成为可能。此外,5G还将支持更短的基站距离,这将使得基站更容易部署和维护。 3.5G移动通信网络的研究现状 目前,5G移动通信网络的研究主要分为以下几个方面。 3.1技术标准 制定5G移动通信网络的技术标准是目前研究的重点。目前,国际电信联盟(ITU)已经制定了5G移动通信网络的第一个版本的技术标准。此外,各个国家和地区都在积极制定自己的5G技术标准,以确保其在5G技术的研究和发展方面拥有更大的话语权。 3.2新的频段 5G移动通信网络将支持更多的频段,包括毫米波和中频段。毫米波频段具有更高的数据速率和更大的带宽,但其传输距离相对较短。中频段则具有更广阔的覆盖范围和更长的传输距离,但其数据速率和带宽相对较低。 3.3云和边缘计算 云和边缘计算将是5G移动通信网络的重要组成部分。云计算可以将计算和存储资源从移动设备转移到云端,从而提高设备的运行效率和降低能耗。边缘计算则可以在网络边缘部署计算资源,从而提高网络的响应速度和降低延迟时间。 3.4网络架构 5G移动通信网络的网络架构将会发生重大变化。传统的基于核心网的网络架构将被取代,而基于软件定义网络和网络功能虚拟化的新型网络架构将得到广泛应用。这将使得网络更加灵活和可扩展,同时也将降低其运营成本。 4.5G移动通信网络的未来发展 5G移动通信网络的发展有望在以下几个方面实现。 4.1物联网 物联网将成为5G移动通信网络的重要应用场景之一。5G的高速率、低延迟和更大的容量将使其可以支持更多的设备和应用程序,从而实现物联网更加普及和应用。 4.2车联网 车联网将成为5G移动通信网络的另一个重要应用场景。5G的低延迟和更广泛的覆盖范围将使得车联网更加安全和可靠,并支持更多的智能应用程序,如自动驾驶等。 4.3虚拟现实和增强现实 5G移动通信网络的高速率和低延迟将使其成为虚拟现实和增强现实的理想平台。这将使得用户可以更好地体验虚拟现实和增强现实应用程序,并使得这些应用程序的应用范围更广。 5.结论 5G移动通信网络作为新一代移动通信技术,具有高速率、低延迟、更大的容量和更广泛的覆盖范围等特点。目前,5G移动通信网络的研究主要集中在制定技术标准、研究新的频段、云和边缘计算以及网络架构等方面。未来,5G移动通信网络有望在物联网、车联网、虚拟现实和增强现实等方面得到广泛应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值