我的開發(fā)板需要多串口通訊,于是使用了CH9344L芯片。系統(tǒng)為Linux 5.6,使用論壇上的官方驅(qū)動,版本1.15。編譯加載驅(qū)動后,我發(fā)現(xiàn)串口/dev/ttyWCHUSB0, /dev/ttyWCHUSB1等設(shè)備都可以正常發(fā)送接收,通訊基本正常。然而,/RTS信號似乎始終不受控制。
我使用了如下的測試程序:
/*?嘗試粘貼include語句,但發(fā)現(xiàn)論壇系統(tǒng)會把尖括號當(dāng)成HTML代碼。只好刪除,請自行加入。*/ #include?stdio.h #include?sys/types.h #include?sys/stat.h #include?fcntl.h #include?sys/ioctl.h #include?unistd.h int?main(int?argc,?char?**argv) { ????if?(argc?!=?2)?{ ????????printf("Usage:?./dtr?/dev/ttyX\n"); ????????return?1; ????} ????int?fd?=?open(argv[1],?O_RDWR?|?O_NOCTTY); ????printf("Open?%s,?fd?%d\n",?argv[1],?fd); ???? ????/*?set?RTS?and?DTR?*/ ????ioctl(fd,?TIOCMBIS,?TIOCM_RTS); ????ioctl(fd,?TIOCMBIS,?TIOCM_DTR); ???? ????sleep(1); ???? ????/*?clear?RTS?and?DTR?*/ ????ioctl(fd,?TIOCMBIC,?TIOCM_RTS); ????ioctl(fd,?TIOCMBIC,?TIOCM_DTR); ???? ????close(fd); ????return?0; }
在SiLabs CP2102串口開發(fā)板上,運(yùn)行該程序可以正常產(chǎn)生RTS或者DTR信號。但同樣的程序在CH9344上似乎完全無效,0號串口的/RTS引腳(第20針)和1號串口的/RTS(第12針)始終處于低電平狀態(tài)。不僅沒有信號,而且我發(fā)現(xiàn)這RTS引腳似乎處于高阻抗輸入而非輸出狀態(tài):我在RTS與3.3V電源之間連了個LED燈(串聯(lián)470歐電阻),發(fā)現(xiàn)芯片引腳上的電壓也隨之上升到3.3V(雖然這時候LED燈是反向偏置的),斷開LED燈后電壓又下降到0 V。
以下為Linux內(nèi)核驅(qū)動的調(diào)試日志。
[180312.372767]?[471983]?tty?ttyWCHUSB1:?ch934x_tty_install,?index:1 [180312.372778]?[471983]?usb_wch?2-1:1.0:?ch934x_port_activate [180312.373106]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.373982]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.374200]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.374677]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.374679]?[471983]?tty?ttyWCHUSB1:?ch934x_tty_set_termios [180312.374990]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.375097]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.375213]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.376109]?[471983]?usb_wch?2-1:1.0:?ch934x_cmd_out---> [180312.376112]?[471983]?usb_wch?2-1:1.0:?ch934x_port_dtr_rts [180313.376315]?[471983]?usb_wch?2-1:1.0:?ch934x_tty_close [180313.376319]?[471983]?usb_wch?2-1:1.0:?ch934x_port_dtr_rts [180313.376320]?[471983]?usb_wch?2-1:1.0:?ch934x_port_shutdown,?portnum:1 [180313.376413]?[471325]?usb_wch?2-1:1.0:?ch934x_tty_cleanup
可見ch934x_port_dtr_rts()函數(shù)確實(shí)被調(diào)用了,但不知為何沒有效果。