WCH沁恒单片机
直播中

张霞

8年用户 1102经验值
私信 关注
[问答]

CH395 Socket3 Socket4 Socket5 配置成TCP_Client,Socket4 Socket5不能接收数据怎么解决?

CH395 Socket3 Socket4 Socket5 配置成TCP_Client,只有Socket3能正常收发数据,Socket4 Socket5不能接收数据(无接收中断),能发心跳包,但数据是错的,且是固定的有规律数据,重新分配过缓存了,  
static void Socket_R_S_Buf_Modify(void )  // 定义6个 Socket收发缓冲区 大小
{
   CH395SetSocketRecvBuf(0,0,4);     // Socket 0 ,接收缓冲区4*512 = 2K,发送缓冲区4*512 = 2K
   CH395SetSocketSendBuf(0,4,4);  
  
   CH395SetSocketRecvBuf(1,8,4);     // Socket 1
   CH395SetSocketSendBuf(1,12,4);  
  
   CH395SetSocketRecvBuf(2,16,4);    // Socket 2
   CH395SetSocketSendBuf(2,20,4);  
  
   CH395SetSocketRecvBuf(3,24,4);    // Socket 3
   CH395SetSocketSendBuf(3,28,4);  
  
   CH395SetSocketRecvBuf(4,32,4);    // Socket 4
   CH395SetSocketSendBuf(4,36,4);  
  
   CH395SetSocketRecvBuf(5,40,4);    // Socket 5
   CH395SetSocketSendBuf(5,44,4);
}
请版主帮助分析解决,急啊

  
  

回帖(1)

庄雪昕

2022-10-17 09:28:59
您好,CH395默认开启四个socket,需要增加socket数量则另外要分配缓冲区。
(1)需要重新分配缓冲区数量,保证每个socket有收发缓存可使用。鉴于您进行了此步骤,可排除相关问题。
(2)驱动代码宏定义中的_SOCK_INF的socket信息和socketbuff外部缓存也需要定义足够组量。
(3)在判断全局中断状态类型的时候,由两个字节表示;鉴于后四个socket存在问题,检查第二个字节的标志是否正确读到,可使用逻辑分析仪检查实际物理电压波形。
(4)后三个TCP_Client的socket,请检查是否有相同的目的IP、目的端口或者本地端口号存在,造成冲突。
(5)使用芯片前可先按照官方例程风格及内容移植,确认代码正常使用之后,在按照需求进行更改,以此避免其他影响。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分