【官方发布】CH9344 USB转四串口芯片Linux驱动

您好,请使用如下代码更新原有提示报错部分,然后重新编译。

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))

        if (tty_port_initialized(&ch9344->ttyport[i].port))

#else

        if (test_bit(ASYNCB_INITIALIZED, &ch9344->ttyport[i].port.flags))

#endif



话说那个i是不是应该是0啊,写i会提示未声明...然后0的话就可以正常make,然后install之后ll /dev/ttyCH*就可以看到四路串口了。


完整code如下所示,使用中若有其他问题,随时沟通。

static int ch9344_reset_resume(struct usb_interface *intf)

{

    struct ch9344 *ch9344 = usb_get_intfdata(intf);

    int i;


    for (i = 0; i < ch9344->num_ports; i++) {

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))

        if (tty_port_initialized(&ch9344->ttyport[i].port))

#else

        if (test_bit(ASYNCB_INITIALIZED, &ch9344->ttyport[i].port.flags))

#endif

            tty_port_tty_hangup(&ch9344->ttyport[i].port, false);

    }


    return ch9344_resume(intf);

}



想请问ch9344_resume这个函数的完整代码是什么?因为它里面也有ASYNCB_INITIALIZED这个变量的使用,而且需不需要在它外面也加一层for循环?


我把完整的code发给你邮件发送过去,有疑问可随时沟通,请查收私信地址。


在/dev下没有找到ttyWCHUSB0等设备,打印信息如下:

image.png

不知道哪里的问题?


您好,加载驱动后找不到设备,通常是因为主机无法正常枚举到CH9344,设备插入后可以通过lsusb或者dmesg来确认硬件识别情况,若硬件工作不正常,可参考如下链接查找原因:http://www.wch.cn/bbs/thread-70783-1.html 


您好,加载驱动后找不到设备,通常是因为主机无法正常枚举到CH9344,设备插入后可以通过lsusb或者dmesg来确认硬件识别情况,若硬件工作不正常,可参考如下链接查找原因:http://www.wch.cn/bbs/thread-70783-1.html 


我测试了一下引脚

2,37,33: 3.3V,

18: 2.71V,

3: 1.21V,

48: 4.74V,

35: 1.2V

晶振的频率:30.12M。 这些是不是说明硬件没有问题?

CH9344L是直接焊在PCB板上,不需要拔插,linux系统是4.15。dmesg

dmesg命令在上图已经有显示。只是找到驱动,并没有找到设备。这是为什么?


您好,正常情况下PIN2=PIN27=PIN33=PIN18=PIN48为电源输入端都应为3.3V,PIN3=PIN35为内核电源IO引脚,电平为1.2V左右。根据您的测试情况,建议结合如下注意事项进行排查,其对应电阻电容的标称值应与参考值一致:image.png


能降速为全速设备么,高速设备板子的usb hub不识别啊.?



您好,CH9344支持USB 2.0 高速/全速接口 自动切换,正常不影响识别和使用。



请问集成到linux系统中,收到数据分行,请问能不能一行输出image.png


您好,如沟通,如上您使用的是CH342芯片。在串口接收的时候第一个字节会被拆分,可以通过应用代码做下处理。也即设置下串口的VTIME和VMIN。详细用法可参考链接:

两者结合使用分为下面4种情况:

VMIN = 0 和 VTIME = 0 :在这种情况下,read 调用总是立刻返回。如果有等待处理的字符,read 就会立刻返回;如果没有字符等待处理,read 调用返回0,并且不读取任何字符;

VMIN = 0 和 VTIME > 0 :在这种情况下,只要有字符可以处理或者是经过 VTIME 个十分之一秒的时间间隔,read 调用就返回。如果因为超时而未读到任何字符,read 返回0,否则 read 返回读取的字符数目。

VMIN > 0 和 VTIME = 0 :在这种情况下,read 调用将一直等待,直到有 MIN 个字符可以读取时才返回,返回值是读取的字符数量。到达文件尾时返回0。

VMIN > 0 和 VTIME > 0 :在这种情况下,当 read 被调用时,它会等待接收一个字符。在接收到第一个字符及后续的每个字符后,一个字符间隔定时器被启动(如果定时器已经运行,则重启它)。当有 MIN 个字符可读或两个字符之间的时间间隔超过 TIME 个十分之一秒时,read 调用返回。这个功能可用于区分是单独按下了 Escape 键还是按下一个 Escape 键开始的功能组合键。但要注意的是,网络通信或处理器的高负载将使得类似这样的定时器失去作用。


有问题可随时保持沟通。



故障: CH9344 热拔时,导致Linux系统死机。


CH9344 USB驱动不支持热插拔?是否有想关补丁?


 


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