CH340串口芯片导致CPU占用高与蓝屏现象排查

坑,全是坑

起因

最近在为iot power编写客户端,波特率是921600,上报的数据量差不多有40KB/s。

遇到了两件没法解决的事:

cpu占用很高

CPU占用高

如图,要说原因的话,我一开始以为是刷图占用的cpu就这么高,不过原因并不是这个,接着看吧

蓝屏

蓝屏

这个问题就严重了,因为之前有一次蓝屏,导致vs工程代码全变成了0x00,害我重写了一遍,自从串口数据变多后,那一天电脑蓝屏了三次

测试

因为板子上用的是CH340N(立创买的,不可能是假货),所以第一怀疑对象就是它,所以我把串口三根线引了出来,外接了一块带CP2102的板子测试:

外接CP2102

测试结果很明显,就是CH340N导致的,看看CPU占用就懂了

CPU占用正常

低了将近一半

其他人遇到过吗?

搜了搜,还真有人发现过这问题:CH340的驱动CPU占用率比竞品高很多,但是这篇帖子最后也没有得出结论,看沁恒官方的回复,全是邮件私联,完全没有公开解释的样子

那原因是啥呢?

对比测试

接下来又测试了FT232,发现会严重粘包,就知道事情不是这么简单了。

打开设备管理器的设置界面,原来相差这么大:

CH340N和CP2102的设置界面都是很简单的

而FT232。。。好家伙不愧是最贵的芯片

下面是测试结果:

芯片占用接收缓冲延迟计时器
CH34050-60%不能改不能改
CH34350%左右不能改不能改
CP210230%左右不能改不能改
FT23250%左右40961ms
FT23220-30%102410ms

为啥蓝屏?

不知道,我也搞不明白,官网最新的驱动装上也会蓝

结论

低速用用340没啥问题,但如果你要无人看守/高速传输。。。那就要慎重考虑了

6 Comments

  1. Google Chrome 92.0.4515.131 Google Chrome 92.0.4515.131 Windows 10 x64 Edition Windows 10 x64 Edition

    老哥,确认下你的驱动版本是不是官方最新V3.6版本。你的应用和我们很像,还没有发现有蓝屏问题。关于你转发的链接,我们之前也看到了,只有数据量大显示频繁的时候才会导致CPU占用率高。CH340的串口数据返回快,刷新频繁,才会有你这个情况出现。

    1. Firefox 95.0esr Firefox 95.0esr Windows 10 x64 Edition Windows 10 x64 Edition

      驱动新的老的都试过,甚至2011年的版本也测试过,结果没有区别,而且蓝屏触发规律基本摸出来了,就是接收数据同时读写硬盘,会大概率蓝屏。
      本身就是数据量大的应用场景,沁恒家的芯片测试下来一个都不满足要求,CPU占用全都高得离谱(相对而言)

      1. Google Chrome 97.0.4692.99 Google Chrome 97.0.4692.99 Windows 10 x64 Edition Windows 10 x64 Edition

        你有空试下官网这个V3.6:http://www.wch.cn/downloads/CH341SER_EXE.html,我们以前遇到过蓝屏,和沁恒厂家沟通过。用这个版本我怎么折腾也不会蓝屏。这个版本是刚更新不久的,我感觉你用的不是这个版本。

晨旭进行回复 取消回复

您的电子邮箱地址不会被公开。