1.问题介绍
笔者在做机械臂项目的时候,单片机上的USB转串口芯片从CP2102换成了CH9102,在自己笔记本的ubuntu上做串口通信测试的时候没有任何问题,但是将程序移植到工控机的ubuntu上时,CH9102无法正常通信,表现为:通信时好时坏,每次上电只能收到头一组数据,单片机用仿真器debug的时候也是如此,有时甚至接收不到数据。
2.解决方案
由于笔者不懂硬件电路,只能硬着头皮先上排除法。先找单片机的麻烦,幸好官方提供了更新CH9102后的配套单片机例程,将先前的代码移植到新的工程上面,测试发现还是一样的问题。 再想到将CH9102单片机接到笔记本ubuntu上可以正常通信,接到工控机ubuntu上无法正常通信,但是老的CP2102板子却可以正常通信,怀疑是驱动问题。对比了一下:
在笔记本上,CH9102被识别为设备ttych343usb0
,而在工控机上则被识别为ttyacm0
。查询相关资料得到CH9102支持免安装CDC类驱动程序的操作系统内置或者多功能高速率的VCP厂商驱动程序。排除到这估摸着也只剩下这一种可能性了,应该就是驱动的问题。
关于串口CDC驱动、HID驱动、VCP驱动笔者也没啥认知。查了下相关资料,发现工控机里面没有CH343驱动,于是先去安装驱动,附上链接:
下载完之后解压下来,进入driver目录依次执行:
make
sudo make load
sudo make install
然后查看串口驱动是否安装成功:
ll /dev | grep ttyCH343USB0
安装成功后再测试通信,就正常啦!
如果在安装驱动的时候insmod加载驱动程序报错:Operation not permitte,大概率是bios里面secure boot开着,把它关了再重新操作就没问题了。
如果有大佬知道更详细的原因,或者能解释一下这几个驱动的问题,笔者感激不尽!