ch432t的linux驅動,收發(fā)數(shù)據(jù)異常且FIFO異常

使用ch432t進行串口通信時候,串口0配置為19200,8,n,2的串口信息,串口1設置為115200,8,n,1。


我們在嵌入式linux板子上加載你們提供的ch432t驅動后,使用linux串口編程的方式,接收串口助手發(fā)送的數(shù)據(jù)。當我慢點發(fā)送數(shù)據(jù)時,ch432t能夠正常進入中斷,linux串口編程中也能正常打印數(shù)據(jù),但當我快速發(fā)送數(shù)據(jù)時,ch432t就會一直在接收函數(shù)里面不斷接收,但并沒有及時串口應用層上,導致出現(xiàn)FIFO溢出。如何解決?

Linux系統(tǒng)下SPI傳輸使用系統(tǒng)自帶的API接口,受限于系統(tǒng)調度,效率一般不高,即硬件時序字節(jié)間有較大無效間隔;另外CH432芯片緩沖區(qū)較小,且每次SPI通信僅能處理1個字節(jié)串口數(shù)據(jù),多平臺壓力測試(不開硬件流控)連續(xù)傳輸最高到9600bps;如果實際需求高于9600bps,建議使用CH9434A(SPI轉4串口)芯片,收發(fā)FIFO較大,且SPI支持連續(xù)傳輸,實測4個串口全雙工連續(xù)通信可到115200bps。


按照你的說法, ch432t的驅動中應該如何改進呢?目前我們兩個串口都有使用,為何出現(xiàn)使用串口調試助手,連續(xù)發(fā)送數(shù)據(jù)時,為何接收中斷處理函數(shù)ch43x_handle_rx中的while ((lsr & CH43X_LSR_DR_BIT))一直有效,并且也沒有根據(jù)fifo設置的閾值及時把數(shù)據(jù),使用tty_flip_buffer_push上傳到linux應用層?




應用軟件只要打開了串口,芯片就會不斷接收并緩存數(shù)據(jù)到FIFO,然后驅動通過SPI讀出傳遞到應用層,while ((lsr & CH43X_LSR_DR_BIT))一直有效:是因為FIFO中一直有數(shù)據(jù)進來,Linux內核的其他串口驅動基本都是這種實現(xiàn)方法;


溢出的根本原因是主機端SPI處理效率不夠高。SPI設備驅動層面的改進方法參考:(1)不使用Linux內核原生API,咨詢SOC廠商看是否有更高效的API;(2)通過直接讀寫SOC寄存器,不經過系統(tǒng)調度來提高效率。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频