[以太网芯片] 求助,ch395提示发送缓冲区空闲,ping不到395,395也收不到数据

[复制链接]
974|2
 楼主| zuyilu 发表于 2022-5-25 16:28 | 显示全部楼层 |阅读模式
G:\Snipaste_2022-05-25_16-20-39.png
G:\Snipaste_2022-05-25_16-21-40.png
这是芯片初始化和配置
  1. printf("网络ch395 初始化开始。。。\n\r");
  2.     spi_net_init();
  3.     //复位 CH395
  4.     CH395_RST();
  5.     /*获取芯片版本*/
  6.     while((ch395_version = CH395CMDGetVer()) < 0x40)
  7.     {
  8.         printf("CH395CMDGetVer ERR\r\n");
  9.         delay_1ms(100);
  10.     }
  11.         printf("CH395CMDGetVer %d\r\n",ch395_version);
  12.     /*测试命令,按位取反返回说明测试通过*/
  13.     while(CH395CMDCheckExist(0x55) != 0xaa)
  14.     {
  15.         printf("\r\nCH395CMDCheck ERR\r\n");
  16.         delay_1ms(100);
  17.     }
  18.         printf("测试成功,存在\r\n");
  19.     /*初始化模块:成功返回 0 */
  20.     while(CH395CMDInitCH395() != 0)
  21.     {
  22.         printf("\r\nCH395CMDInitCH395 ERR\r\n");
  23.         delay_1ms(100);
  24.     }
  25.         printf("芯片初始化成功\r\n");
  26.     /*初始化UDP*/
  27.     while( ch395_socket_udp_init(SocketIndex, SocketDesIP, SocketDesPort, SocketSourPort) != 0)
  28.     {
  29.         printf("\r\nch395_socket_udp_init ERR\r\n");
  30.         delay_1ms(100);
  31.     }

  32.         printf("UDP初始化成功\r\n");
  33.        
  34.         CH395EEPROMTEST();
  35.         printf("CH395 EEPROM测试完成\r\n");
  36.        
  37.         CH395GetIPInf(buf);//获取IP,网关和子网掩码
  38.         printf("IP:%d.%d.%d.%d\r\n", buf[0], buf[1], buf[2], buf[3]);
  39.         printf("GWIP:%d.%d.%d.%d\r\n", buf[4], buf[5], buf[6], buf[7]);
  40.         printf("Mask:%d.%d.%d.%d\r\n", buf[8], buf[9], buf[10], buf[11]);
  41.         printf("DNS1:%d.%d.%d.%d\r\n", buf[12], buf[13], buf[14], buf[15]);
  42.         printf("DNS2:%d.%d.%d.%d\r\n", buf[16], buf[17], buf[18], buf[19]);
  43.        
  44.         #endif

然后udp中断就卡在这里了
  1. void ch395_socket_udp_interrupt(uint8_t sockindex)
  2. {
  3.     uint8_t  sock_int_socket;
  4.     uint16_t len;

  5.     /* 获取socket 的中断状态 */
  6.     sock_int_socket = CH395GetSocketInt(sockindex);

  7.     /* 发送缓冲区空闲,可以继续写入要发送的数据 */
  8.     if(sock_int_socket & SINT_STAT_SENBUF_FREE)
  9.     {
  10.                 printf("发送缓冲区空闲\r\n");
  11.     }
  12. //                CH395UDPSendTo("347GDFGRT45", 12, SocketDesIP, SocketDesPort, 0);

  13.     /* 发送完成中断 */
  14.     if(sock_int_socket & SINT_STAT_SEND_OK)
  15.     {
  16.                 printf("发送完成中断\r\n");
  17.     }

  18.     /* 接收数据中断 */
  19.     if(sock_int_socket & SINT_STAT_RECV)
  20.     {
  21.         len = CH395GetRecvLength(sockindex);/* 获取当前缓冲区内数据长度 */
  22.         printf("\r\nreceive len = %d\r\n", len);
  23.         if(len == 0)return;
  24.         if(len > recv_buff_len)len = recv_buff_len;
  25.         CH395GetRecvData(sockindex, len, recv_buff); /* 读取数据 */

  26.         /*把接收的数据返回给UDP*/
  27.         CH395SendData(sockindex, recv_buff, len);

  28.         //也可以使用下面的函数发送数据
  29.         CH395UDPSendTo(recv_buff, len, SocketDesIP, SocketDesPort, sockindex);

  30.         /*使用串口打印接收的数据*/
  31. //                PutData(&rb_t_usart1_send,recv_buff,len);
  32. //                USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
  33.     }
  34. }
 楼主| zuyilu 发表于 2022-5-25 16:30 | 显示全部楼层
这是两个图片

这是初始化的过程提示

这是初始化的过程提示

一直给ch395发数据

一直给ch395发数据
 楼主| zuyilu 发表于 2022-5-25 16:37 | 显示全部楼层
为啥收不到udp发来的数据啊?我主动发的时候,一直提示发送缓冲区空闲,不知道为啥。感谢感谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部