CH395Q 初始化socket失败

采用异步串口通信,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章节。

image.png

2.open_socket和是否开启keepLive功能无关,建议您可以用逻辑分析仪抓时序看一下是否因时序问题导致socket打开异常。

3.RST引脚是输出脚,RSTI脚才是复位脚,想要实现引脚复位需要接RSTI脚。建议在操作395前加上对其的复位操作。

image.png

4. CH395CMDReset() 该命令执行的是通过写入复位命令码实现复位,调用此命令后需延时50ms左右。image.png


可以参考我司提供的例程并对照手册进行开发设计。后续有其他问题可邮件交流:(lq@wch.cn)

手册:/downloads/CH395DS1_PDF.html

EVT例程:/downloads/CH395EVT_ZIP.html


非常感谢!请问第4条,

4. CH395CMDReset() 该命令执行的是通过写入复位命令码实现复位,调用此命令后需延时50ms左右。

=== 请问下,有没有复位的命令,我在手册没找到;

       因为写入复位命令码后,CH395Q就不通信了;


395没有解复位的命令。

建议执行复位后通过check命令(命令码:0x06)确保通信接口是正常的,否则后续操作肯定是异常的导致无法正常通信。可以用逻辑分析仪抓一下上电后的时序,这样可以较容易分析和排查问题。

可把抓的时序发送到我的邮箱看一下(邮箱:lq@wch.cn)


只有登录才能回复,可以选择微信账号登录