CH395常见问题汇总及解答(持续更新)

一、CH395外围电路设计注意

1.CH395的PHY是电流型,网络变压器的中心抽头要接3.3V

2.CH395的电源引脚退耦电容不可少,而且要靠芯片周围摆放

3.CH395支持串口,SPI和并口(仅CH395L支持)接口,在芯片上电时,395根据SEL和TXD引脚的电平来决定采用哪种方式

4.为了在电源上电期间有效复位并减少外部干扰,可以在RSTI引脚与地之间接一个0.1UF的电容。

5.具体接法可以上沁恒官网(www.denis-pharm.com)上搜索“CH395EVT”

二、395初始化失败

1.首先检查“check_exist”命令,正常情况下395会将该命令的输入值按位取反后输出, 若该命令不正常,则说明395的通讯接口有问题,请注意接口时序,检查CH395接口选择模式配置是否正确,即检查TXD,SEL电平状态是否正确。。

2.395初始化参数设置好后,先延时20ms左右,再执行初始化命令.

3.注意395的网络参数的合法性,设置不规范的ip地址可能会导致395网络出错

三、395与电脑无法建立TCP连接

1. 连接之前先将电脑的网络防火墙关闭。

2.对于多网卡的电脑,在设置电脑端网络调试软件时要注意选择正确的网卡,最好是打开软件前,将其他网 卡都禁用。

3.先ping一下395,若ping不通,则先检查网口的指示灯是否亮着,若不亮则换一根网线再试;若网口灯亮,则可能395初始化没有正确完成

4.检查395初始化配置的信息是否正确,目的ip与端口是否与电脑端设置相同`,TCP连接要注意ip地址处于同一网段,如果是在路由器局域网环境下,还要考虑395ip地址避免冲突。

5.TCP正常连接时,395的INT引脚会给出中断低电平信号,可以通过读取命令来获取中断状态

6.若出现连接断开后不能再次连上的问题,则可能是因为395在检测到连接断开后自动关闭了socket,可以通过在socket断开与超时中断里重新打开socket。

7.初始化socket之前没有将socket配置信息表清空

四、395数据接收与发送问题

1.若395接收到数据,会产生数据接收中断信号,检测395的INT引脚是否有低电平产生,注意如果使用单片机外部中断,则触发位要设置为低电平触发。若有中断信号,则读取中断状态,对照头文件里的定义,获取中断含义

2.检查395接收中断的处理,正常流程是:获取中断、读取数据长度,读取数据内容。

3.UDP server 模式下的数据收发与其他模式不一样:

数据接收时,395会在数据包前加上8个字节的信息,分别是数据包长度,源端口,源ip。在接收中断处理任务里,需要将这些信息分离并保存。数据发送时,395使用395UDPSendTo()函数,函数参数需要使用上面的信息

4.与395发送相关的中断有两个,分别是发送完成中断与发送缓冲区空闲中断;单片机向395发送缓冲区写一包数据,395会将数据复制到MAC缓冲区,复制完毕后会产生发送缓冲区空闲中断;CH395可能会将数据分装成若干包数据包,每发送一包数据包,395都会产生一次发送完成中断;因此在实际发送时,必须要等到发送缓冲区空闲中断产生后,才能向395缓冲区填写下一次数据

5.395在数据收发过程中出现数据丢包现象:

(1)395在收发数据的过程中不能被其他进程打断,如果395在数据收发中被其他任务打断,则可能会导致数据丢包

(2)检查下定义接收缓冲区大小,读取接收长度,看是否超过了接收缓冲区。接收缓冲区在定义的时候至少要大于定义的TCP MSS的值。

五、芯片发热。

由于CH395内部集成MAC和PHY,发热量稍大,但不会影响芯片稳定性。可通过以下方式改进:

(1)芯片RSETE 脚参考电阻18K。

(2)改善电源,如使用DC电源代替LDO,减小部分功耗。

(3)启用CH395低能耗模式。

六、编程注意事项。

(1)、芯片内置上电复位电路,主程序开始先延时200ms时间,留给CH395足够的上电复位时间,防止单片机上程序开始运行而CH395仍处于复位状态。

(2)、芯片初始化之后,建议先做测试命令,确保基本通信正常后再进行下面的操作。

(3)、假如程序中有设置MAC地址操作,需要延时200ms左右时间。

(4)、批量发送数据时,每次发送数据前要确保前一次数据已经发送完成(可通过查询SINT_STAT_SENBUF_FREE中断来实现)。


用CH395制作的设备,开启DHCP后,已自动获得了配置信息,在路由器的DHCP客户端列表当中已经存在,只是客户端名显示为Unknown。请问如何给设备命名?


七、CH395在使用过程中死机、无法通讯等问题。

 1、     首先检查CH395网口的灯的状态是否正常,如果灯处于熄灭状态,请检查网线是否插紧,板子供电是否正常;另外,如

    果板子上面有较大的压降作用于芯片的RSTI引脚,会导致CH395芯片复位,也会造成网口灯的状态异常,此时复位一下主控    

    芯片即可恢复正常。   

 2、     检查能否ping通CH395,如果不能ping通,请检查局域网内是否有和CH395ip地址相同的设备造成IP冲突;再读出CH395  

    的ip地址,检查ip是否有异常

 3、     如果TCP一直连不上,检查SOCKET的ip和端口配置信息,如果对方是电脑,检查电脑防火墙是否关闭,TCP端口是否打开,如果对

        方是云服务器/平台,请先用电脑连接云服务器/平台,确认服务能连通

  4、         如果数据收不到,请检查INT#引脚的电平,另外注意INT#引脚如果采用外部中断的方式,要将中断触发方式设置为低电平触发,不要设

        为边沿触发



UDP组播在客户处测试时,组播客户可以接受到数据,客户用组播方式下发数据时我们收不到指令,客户改为点播下发指令时可以发送成功,有别的设置吗mac滤波已经配置组播。


您好,CMD_SET_MAC_FILT命令, hash 表计算是否准确?请与孙工:025-52638370 联系,方便的话帮你查看相关代码。


八、程序初始化过程注意事项

1、CH395出厂时烧有全球唯一Mac地址,若通过函数修改CH395Mac地址,修改后无法找回。随意修改Mac地址可能造成经过交换机时Mac地址被过滤的问题。

2、MCU选用串口与CH395连接时,根据需要可能存在更改串口通信波特率设置过程。在复位MCU过程中,为了匹配即时时刻MCU与CH395之间的波特率,需在程序初始化CH395之前对其进行外部硬件复位。

3、若需开启CH395的8sockets连接,必须经过重新分配缓冲区的步骤,可参考历程中Socket_R_S_Buf_Modify()函数的使用。

4、开启CH395TCP监听功能时,可开启服务器多连接模式,即设置FUN_PARA_FLAG_TCP_SERVER位;若不开启,接入下一个客户端前需要释放掉前一个连接的socket。


并口方式,tcp sever模式下,接收的数据包个别字节随机丢失,请问如何解决。


  1. 你可以用wireshrk抓包看一下以太网有没有正确的发送接收

  2. 你用逻辑分析仪看一下那个 并口数据有没有正确 的接收


博主,你好,有CH395Q移植到rt-thread,使用SAL的例子吗


如果您是使用STM32F1/F4的MCU,您可以基于rtt  nano内核的demo工程,只需要在boardinit里面将对应的通信接口,IO初始化完毕,然后创建线程,去查询init脚电平即可。然后再做对应的处理。线程优先级最好设置最高。


问一个问题,不接网线,发送引脚有信号,但是一插网线,发送引脚变没有信号了。当然,插上网线,elink也没有提示网线接上,读取phy状态,返回phy未连接。 电压驱动方式,量了3.3V电压与1.8V电压,都是正常的。这大约是什么情况,怎么排查


您可以先提供一下您的使用方法和对CH395的驱动方式,方便排查问题。

还有您可以参考网址/downloads/CH395EVT_ZIP.html  包里的硬件原理框图设计,您的设计图中和该设计图中有不一样的部分均可详细说明。

对于您现在的问题,可能是PHY协商不成功造成的。主要原因可能是:接上网线相当于网口变压器二次侧接入了有效负载,需要一次侧提供足够的功率驱动,您可以检查一下变压器的中心抽头出是否接入3.3V电压;还有需要注意两对差分引脚需要接49.9欧姆电阻上拉至3.3V,电阻精度最好控制在1%内。

具体问题您可以直接联系官网技术支持咨询。


111111111


你好,想请问一下,可以提供395的NTP和FTP客户端被动方式的例程吗


CH395上层应用的实现可以参考CH563EVT里的相关例程代码移植实现。

CH563EVT下载网址:/downloads/CH563EVT_ZIP.html


并口方式,已经调整好参数,误码率很低,目前测试是1/3600 0000 的误码率。不过感觉这个芯片还是有很多的改进空间,并口时序要求太过严格,Read信号持续的时间长一点,数据正确率会有明显的变化。

stm32f103zet6使用fsmc时,hal库参数配置如下

  
   /* USER CODE END FSMC_Init 0 */
   FSMC_NORSRAM_TimingTypeDef Timing = {0};
   FSMC_NORSRAM_TimingTypeDef ExtTiming = {0};
   /* USER CODE BEGIN FSMC_Init 1 */
    //省略
  /* Timing */    //读时序参数
  Timing.AddressSetupTime = 15;
  Timing.AddressHoldTime = 0;
  Timing.DataSetupTime = 3;
  Timing.BusTurnAroundDuration = 0;
  Timing.CLKDivision = 0;
  Timing.DataLatency = 0;
  Timing.AccessMode = FSMC_ACCESS_MODE_A;
  
  /* ExtTiming */    //写时序参数
  ExtTiming.AddressSetupTime = 15;
  ExtTiming.AddressHoldTime = 0;
  ExtTiming.DataSetupTime = 4;
  ExtTiming.BusTurnAroundDuration = 0;
  ExtTiming.CLKDivision = 0;
  ExtTiming.DataLatency = 0;
  ExtTiming.AccessMode = FSMC_ACCESS_MODE_A;


希望能再出一款专用于并口的,时序容错率高,引脚简明的DIP封装的高速网络协议栈芯片。


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