采用异步串口通信,Socket 0 作为TCP服务器;
CH395Q初始化时,出现两个失败:
(1)CH395OpenSocket(0),函数返回值为0x20;
(2)CH395TCPListen(0),函数返回值为0x11,CH395_ERR_MEM 0x11;
请问应该是什么问题导致,谢谢
采用异步串口通信,Socket 0 作为TCP服务器;
CH395Q初始化时,出现两个失败:
(1)CH395OpenSocket(0),函数返回值为0x20;
(2)CH395TCPListen(0),函数返回值为0x11,CH395_ERR_MEM 0x11;
请问应该是什么问题导致,谢谢
另外,Socket 0 的发送/接收缓冲区是5K
CH395SetSocketRecvBuf(0,0,10); /* Socket 0 ,接收缓冲区10*512 = 5K,发送缓冲区10*512 = 5K*/
CH395SetSocketSendBuf(0,10,10);
使用P52 / RST,作为复位PIN
52 26 RST 输出 电源上电复位和外部复位输出,高电平有效
您好,
1.返回0x20代表socket已打开,排查一下代码是否在其他地方已经开启了socket。如果没有,在打开socket前调用close函数测试一下是否可以恢复正常。
2.返回0x11代表内存错误,正常不会产生此错误。可以先不设置socket收发缓冲区测试一下。
3.关于收发缓冲区的设置,参考手册的8.3.9章节说明。
4.根据您的描述,应该用的是CH395L,可以用0x01命令查一下固件版本。另外,52脚并不是复位脚,395L的复位脚是RSTI(63脚),拉低复位。建议在操作395前执行一下复位操作。
如果方便,可将您的芯片版本和测试代码邮件发来看一下(邮箱:lq@wch.cn)
多谢答疑,还有几个问题想请教下;
1.返回0x20代表socket已打开,排查一下代码是否在其他地方已经开启了socket。如果没有,在打开socket前调用close函数测试一下是否可以恢复正常。
2.返回0x11代表内存错误,正常不会产生此错误。可以先不设置socket收发缓冲区测试一下。
===此两处错误,我使用CH395SetKeepLive(0,1);后,Socket 0 初始化正常,
===请问下CH395SetKeepLive作用是什么,对后面报文收发,有无影响;
4.根据您的描述,应该用的是CH395L,可以用0x01命令查一下固件版本。另外,52脚并不是复位脚,395L的复位脚是RSTI(63脚),拉低复位。建议在操作395前执行一下复位操作。
=== 我描述有误,板子上使用的芯片是CH395Q E284版本,硬件设计 26脚作为复位引脚,和MCU的引脚相连;
=== 请问下,26脚(RST)作为复位引脚,CH395Q能否正常使用;还是说,必须要使用36脚(RSTI),和MCU相连;
上一个关于 1 2 的问题,回答有误,我再把操作说明下;
1.返回0x20代表socket已打开,排查一下代码是否在其他地方已经开启了socket。如果没有,在打开socket前调用close函数测试一下是否可以恢复正常。
2.返回0x11代表内存错误,正常不会产生此错误。可以先不设置socket收发缓冲区测试一下。
=== 此两处错误,在以下操作后,Socket 0 初始化正常;
(1)代码添加 CH395CMDReset(),对CH395Q进行复位,代码烧录板子上,此时CH395Q不通;
(2)再注掉 CH395CMDReset(),代码烧录板子上,CH395Q通,且Socket 0 初始化成功;
有两个问题,(1)CH395指令,有没有解复位的指令;
(2)Socket 0 初始化失败,是不是和您讲的,与复位引脚有关;必须要使用36脚(RSTI),和MCU相连;
您好,
1.keeplive功能为tcp的保活机制,具体作用可参考网上资料。该功能本身不会影响tcp通信,开启keeplive功能对于tcp客户端和tcp服务器有些不同,可参考手册5.59章节。
2.open_socket和是否开启keepLive功能无关,建议您可以用逻辑分析仪抓时序看一下是否因时序问题导致socket打开异常。
3.RST引脚是输出脚,RSTI脚才是复位脚,想要实现引脚复位需要接RSTI脚。建议在操作395前加上对其的复位操作。
4. CH395CMDReset() 该命令执行的是通过写入复位命令码实现复位,调用此命令后需延时50ms左右。
可以参考我司提供的例程并对照手册进行开发设计。后续有其他问题可邮件交流:(lq@wch.cn)
手册:/downloads/CH395DS1_PDF.html
EVT例程:/downloads/CH395EVT_ZIP.html
非常感谢!请问第4条,
4. CH395CMDReset() 该命令执行的是通过写入复位命令码实现复位,调用此命令后需延时50ms左右。
=== 请问下,有没有解复位的命令,我在手册没找到;
因为写入复位命令码后,CH395Q就不通信了;
395没有解复位的命令。
建议执行复位后通过check命令(命令码:0x06)确保通信接口是正常的,否则后续操作肯定是异常的导致无法正常通信。可以用逻辑分析仪抓一下上电后的时序,这样可以较容易分析和排查问题。
可把抓的时序发送到我的邮箱看一下(邮箱:lq@wch.cn)