大家平時用的比較多的是兩線全雙工模式,但是針對晶片管腳不足、Bootloader升級接口受限和節省通訊線成本等因素,往往希望有晶片能夠支持單線UART傳輸模式。本篇主要介紹單線UART傳輸模式,目前新唐M0/M23/M4等內核產品,比如M031/M251/M460/M480等系列產品都支持單線UART傳輸模式,並且最高通信速率可以達到6Mbps。
一、 雙線UART和單線UART對比


二、 單線UART硬體設計由於單線模式設定UART_RXD功能時,會被設定成輸入模式,因此當兩個M031用單線UART對接的時候,需要通過外部上拉電阻使總線維持高電平狀態。
單線UART對單線UART的接線方式:

單線UART對雙線UART的接線方式:
三、 UART單線半雙工模式原理
UART控制器提供在UART功能模式下的單線半雙工功能 (設置UART_FUNCSEL[2:0]為’100’來使能 UART單線功能)。單線總線空閒時保持RX狀態。通過將數據寫入TX緩衝區DAT(UART_DAT[7:0]),單線總線立即將總線RX狀態轉變到TX狀態。傳輸結束後,單線總線狀態從TX狀態回到RX狀態。 為了減少總線衝突問題,UART控制器支持流控制和位錯誤檢測。nRTS在總線為保持TX狀態時不激活 。UART默認狀態為RX 模式,並且UART只會在ATOCTSEN (UART_INTEN[13])使能,nCTS 被取消激 活狀態後,才轉換為TX模式發送數據。在TX狀態期間,UART控制器將監視總線狀態。如果總線狀態不等於UART控制器TX狀態,則設置SWBEIF(UART_INTSTS[16])。
注1:在寫入TX緩存數據前,總線狀態可以通過讀RXIDLE(UART_FIFOSTS[29])來檢測是否為空閒狀態。總線衝突可能導致RX接收錯誤數據。
注2:單線不支持自動流控制,因為自動流控制會在TX發送時自動激活nRTS。
四、 程序操作
1、 M031 SampleCode可以找到3個UART單線的例程

2、 管腳設置 將I/O模式更改成准雙向模式 (Quasi-bidirectional Mode),使總線維持空閒狀態,並設置UART_RXD管腳復用功能。

3、 單線模式設置

4、 按照正常的UART收發數據的方式即可,詳情客戶參考官方例程操作。
五、 UART_115200bps_SingleWire_ISP升級
這個例程可以實現使用單線UART將程序從LDROM啟動,並更新APROM程序。同時,官方也提供做的單線ISP升級工具。
這裡重點提一下是官方例程做好的單線UART 只有115200bps的速率,之前提到M031是可以支持的最高6Mbps的,這裡需要將修改三個地方即可。
1、UART_115200bps_SingleWire_ISP 例程修改
2、ISP Programming Tool修改,可以使用Microsoft Visual Studio編譯

修改完成重新編譯燒錄,在使用修改好的ISP進行連接更新程序,這裡和常規的ISP-UART升級方式是一樣的。
如果忘記的朋友,可以參考之前寫的博文 :Nuvoton開發流程 初級篇 2 -- Bootloader
評論