0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于UART 控制器的RTS/CTS技術(shù)分析

電子設(shè)計(jì) ? 來源:csdn ? 作者:zeroboundary ? 2021-05-17 11:35 ? 次閱讀

RS232 中本來 CTS 與 RTS 有明確的意義,但自從賀氏(HAYES ) 推出了聰明貓(SmartModem)后就有點(diǎn)混淆了,不過現(xiàn)在這種意義為主流意義的,各大芯片制造廠家對 UART 控制器的流控基本采用 HAYES MODEM 流控解釋。

RS232 中 RTS 與 CTS 是用來半雙工模式下的方向切換,本文不解釋;

如果 UART 只有 RX、TX 兩個(gè)信號,要流控的話只能是軟流控;如果有 RX,TX,CTS,RTS 四個(gè)信號,則多半是支持硬流控的 UART;如果有 RX,TX,CTS ,RTS ,DTR,DSR 六個(gè)信號的話,RS232 標(biāo)準(zhǔn)的可能性比較大。

SIMCOM 公司對 RTS/CTS 的解釋:

(要注意區(qū)別是不是講串口支持硬流控的 RTS/CTS,別看為益,在和瑞芯微調(diào)試硬件流控時(shí),被這個(gè)非主流的解釋搞得暈頭轉(zhuǎn)向的)

RTS 是模塊的輸入端,用于 MCU 通知模塊,MCU 是否準(zhǔn)備好,模塊是否可向 MCU 發(fā)送信息,RTS 的有效電平為低。

CTS 是模塊的輸出端,用于模塊通知 MCU,模塊是否準(zhǔn)備好,MCU 是否可向模塊發(fā)送信息,CTS 的有效電平為低

HAYES Modem 中的 RTS ,CTS 是用來進(jìn) 行硬件流控的?,F(xiàn)在通常 UART 的 RTC、CTS 的含義指后者,即用來做硬流控的。

硬流控的 RTS、CTS:

(現(xiàn)在做串口使用 RTS/CTS 必看內(nèi)容,因?yàn)?MTK/)

RTS (Require ToSend,發(fā)送請求)為輸出信號,用于指示本設(shè)備準(zhǔn)備好可接收數(shù)據(jù),低電平有效,低電平說明本設(shè)備可以接收數(shù)據(jù)。

CTS (Clear ToSend,發(fā)送允許)為輸入信號,用于判斷是否可以向?qū)Ψ桨l(fā)送數(shù)據(jù),低電平有效,低電平說明本設(shè)備可以向?qū)Ψ桨l(fā)送數(shù)據(jù)。

此處有人將 CTS 翻譯為發(fā)送允許,我感覺的確比翻譯為清除發(fā)送好。因?yàn)?CTS 是對方的 RTS 控制己方的 CTS 是否允許發(fā)送的功能。

用 AP 與 MODEM 采用流控收發(fā)串口數(shù)據(jù)舉例:

CTS 為輸入

RTS 為輸出

AP 的 CTS 對接 MODEM 的 RTS;MODEM 的 CTS 對接 AP 的 RTS。

默認(rèn)啟動時(shí):

AP 的 CTS 為高

AP 的 RTS 為低

MODEM 的 CTS 高 但極容易被拉低

MODEM 的 RTS 低

默認(rèn)休眠時(shí)

MODEM 的 CTS 高 但極容易被拉低

MODEM 的 RTS 高

其中 CTS 用電壓表測量電壓時(shí)發(fā)現(xiàn):在測量最初的大概 200ms 時(shí),為高電平,然后電壓值不斷下降,變成低電平,這說明 CTS 懸空時(shí)應(yīng)該為高,這中高電平僅僅是一定量的正電荷而已。

不知道芯片設(shè)計(jì)時(shí),規(guī)格說明書為什么要寫 CTS 默認(rèn)為高,CTS 僅僅是輸入端,不需要什么默認(rèn)值啊。并且在流控打開情況下,不接 CTS 與 RTS,也是可以正常 3 根線(RXD/TXD/GND)通信的,這說明不接 RTS/CTS 時(shí),CTS 為低電平才對。為何實(shí)際使用與芯片規(guī)格說明書不一致,可能是被外殼金屬蓋干擾到低電平了,畢竟自己用的模塊,CTS 是如此靠近低電平的金屬保護(hù)蓋,并且 CTS 為輸入口,沒有上拉下拉電平能力。

AP 與 MODEM 的流控這樣通信的:

AP 串口可用時(shí),將 AP-RTS 拉低,MODEM-CTS 檢測到 AP-RTS 為低,知道 AP 串口已準(zhǔn)備好,可以發(fā)送數(shù)據(jù);

AP 串口不可用時(shí),將 AP-RTS 拉高,MODEM-CTS 檢測到 AP-RTS 為高,知道 AP 串口還未準(zhǔn)備好,就不會放數(shù)據(jù)。

MODEM 串口可用與不可用時(shí)的交互是同樣道理。

沒有串口控制器,用中斷和普通 IO 口即可實(shí)現(xiàn) RTS 與 CTS 功能。

RTS 用 GPIO 實(shí)現(xiàn),串口就緒(無數(shù)據(jù)發(fā)送,等待接收)拉低電平,串口忙(自己有數(shù)據(jù)發(fā)送)拉高電平

CTS 用中斷實(shí)現(xiàn),檢測到低電平,將串口數(shù)據(jù)發(fā)送出去,檢測到高電平則保留串口數(shù)據(jù)直到檢測到低電平為止。

下面是摘錄網(wǎng)上有用的參考資料

假定 A、B 兩設(shè)備通信,A 設(shè)備的 RTS 連接 B 設(shè)備的 CTS ;A 設(shè)備的 CTS 連接 B 設(shè)備的 RTS 。

前一路信號控制 B 設(shè)備的發(fā)送,后一路信號控制 A 設(shè)備的發(fā)送。對 B 設(shè)備的發(fā)送(A 設(shè)備接收)來說,如果 A 設(shè)備接收緩沖快滿的時(shí)發(fā)出 RTS 信號(RTS 拉高,RTS 無效,告知對方停止發(fā)送),通知 B 設(shè)備停止發(fā)送,B 設(shè)備通過 CTS 檢測到該信號,停止發(fā)送;一段時(shí)間后 A 設(shè)備接收緩沖有了空余,發(fā)出 RTS 信號(RTS 拉低,RTS 有效,請求發(fā)送),指示 B 設(shè)備開始發(fā)送數(shù)據(jù)。A 設(shè)備發(fā)(B 設(shè)備接收)類似。

上述功能也能在數(shù)據(jù)流中插入 Xoff(特殊字符)和 Xon(另一個(gè)特殊字符)信號來實(shí)現(xiàn)。A 設(shè)備一旦接收到 B 設(shè)備發(fā)送過來的 Xoff,立刻停止發(fā)送;反之,如接收到 B 設(shè)備發(fā)送過來的 Xon,則恢復(fù)發(fā)送數(shù)據(jù)給 B 設(shè)備。同理,B 設(shè)備也類似,從而實(shí)現(xiàn)收發(fā)雙方的速度匹配。

半雙工的方向切換:RS232 中使用 DTR(Date Terminal Ready,數(shù)據(jù)終端準(zhǔn)備)與 DSR(Data Set Ready ,數(shù)據(jù)設(shè)備準(zhǔn)備好)進(jìn)行主流控,類似上述的 RTS 與 CTS 。對半雙工的通信的 DTE(Date Terminal Equipment,數(shù)據(jù)終端設(shè)備)與 DCE(Data circuitEquipment )來說,默認(rèn)的方向是 DTE 接收,DCE 發(fā)送。如果 DTE 要發(fā)送數(shù)據(jù),必須發(fā)出 RTS 信號,請求發(fā)送數(shù)據(jù)。DCE 收到后如果空閑則發(fā)出 CTS 回應(yīng) RTS 信號,表示響應(yīng)請求,這樣通信方向就變?yōu)?DTE-》TCE,同時(shí) RTS 與 CTS 信號必須一直保持。從這里可以看出,CTS ,TRS 雖然也有點(diǎn)流控的意思(如 CTS 沒有發(fā)出,DTE 也不能發(fā)送數(shù)據(jù)),但主要是用來進(jìn)行方向切換的。

流控制在串行通訊中的作用

這里講到的“流”,當(dāng)然指的是數(shù)據(jù)流。數(shù)據(jù)在兩個(gè)串口之間傳輸時(shí),常常會出現(xiàn)丟失數(shù)據(jù)的現(xiàn)象,或者兩臺計(jì)算機(jī)的處理速度不同,如臺式機(jī)與單片機(jī)之間的通訊,接收端數(shù)據(jù)緩沖區(qū)已滿,則此時(shí)繼續(xù)發(fā)送來的數(shù)據(jù)就會丟失?,F(xiàn)在我們在網(wǎng)絡(luò)上通過 MODEM 進(jìn)行數(shù)據(jù)傳輸,這個(gè)問題就尤為突出。流控制能解決這個(gè)問題,當(dāng)接收端數(shù)據(jù)處理不過來時(shí),就發(fā)出“不再接收”的信號,發(fā)送端就停止發(fā)送,直到收到“可以繼續(xù)發(fā)送”的信號再發(fā)送數(shù)據(jù)。因此流控制可以控制數(shù)據(jù)傳輸?shù)倪M(jìn)程,防止數(shù)據(jù)的丟失。PC 機(jī)中常用的兩種流控制是硬件流控制(包括 RTS/CTS、DTR/CTS 等)和軟件流控制 XON/XOFF(繼續(xù) / 停止),下面分別說明。

硬件流控制

硬件流控制常用的有 RTS/CTS 流控制和 DTR/DSR(數(shù)據(jù)終端就緒 / 數(shù)據(jù)設(shè)置就緒)流控制。

硬件流控制必須將相應(yīng)的電纜線連上,用 RTS/CTS(請求發(fā)送 / 清除發(fā)送)流控制時(shí),應(yīng)將通訊兩端的 RTS、CTS 線對應(yīng)相連,數(shù)據(jù)終端設(shè)備(如計(jì)算機(jī))使用 RTS 來起始調(diào)制解調(diào)器或其它數(shù)據(jù)通訊設(shè)備的數(shù)據(jù)流,而數(shù)據(jù)通訊設(shè)備(如調(diào)制解調(diào)器)則用 CTS 來起動和暫停來自計(jì)算機(jī)的數(shù)據(jù)流。這種硬件握手方式的過程為:我們在編程時(shí)根據(jù)接收端緩沖區(qū)大小設(shè)置一個(gè)高位標(biāo)志(可為緩沖區(qū)大小的 75%)和一個(gè)低位標(biāo)志(可為緩沖區(qū)大小的 25%),當(dāng)緩沖區(qū)內(nèi)數(shù)據(jù)量達(dá)到高位時(shí),我們在接收端將 CTS 線置低電平(送邏輯 0),當(dāng)發(fā)送端的程序檢測到 CTS 為低后,就停止發(fā)送數(shù)據(jù),直到接收端緩沖區(qū)的數(shù)據(jù)量低于低位而將 CTS 置高電平。RTS 則用來標(biāo)明接收設(shè)備有沒有準(zhǔn)備好接收數(shù)據(jù)。

常用的流控制還有還有 DTR/DSR(數(shù)據(jù)終端就緒 / 數(shù)據(jù)設(shè)置就緒)。我們在此不再詳述。由于流控制的多樣性,我個(gè)人認(rèn)為,當(dāng)軟件里用了流控制時(shí),應(yīng)做詳細(xì)的說明,如何接線,如何應(yīng)用。

軟件流控制

由于電纜線的限制,我們在普通的控制通訊中一般不用硬件流控制,而用軟件流控制。一般通過 XON/XOFF 來實(shí)現(xiàn)軟件流控制。常用方法是:當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量超過設(shè)定的高位時(shí),就向數(shù)據(jù)發(fā)送端發(fā)出 XOFF 字符(十進(jìn)制的 19 或 Control-S,設(shè)備編程說明書應(yīng)該有詳細(xì)闡述),發(fā)送端收到 XOFF 字符后就立即停止發(fā)送數(shù)據(jù);當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量低于設(shè)定的低位時(shí),就向數(shù)據(jù)發(fā)送端發(fā)出 XON 字符(十進(jìn)制的 17 或 Control-Q),發(fā)送端收到 XON 字符后就立即開始發(fā)送數(shù)據(jù)。一般可以從設(shè)備配套源程序中找到發(fā)送的是什么字符。

應(yīng)該注意,若傳輸?shù)氖嵌M(jìn)制數(shù)據(jù),標(biāo)志字符也有可能在數(shù)據(jù)流中出現(xiàn)而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會有這個(gè)問題。

問題

1.UART 和 RS232 是什么關(guān)系?

UART(Universal Asynchronization Receviver/Transmite) 可以作為一種軟件接口協(xié)議來看,包括 RS232、RS485、RS422 等接口標(biāo)準(zhǔn)規(guī)范和總線標(biāo)準(zhǔn)規(guī)范,這些標(biāo)準(zhǔn)規(guī)定了接口的電氣特性(如電平)、傳輸速率、連接特性等,實(shí)際上屬于通信網(wǎng)絡(luò)中的物理層的概念,與通信協(xié)議沒有直接關(guān)系,通信協(xié)議一般屬于鏈路層即 link 層的概念。

那么 RS232 和 TTL 的 uart 什么關(guān)系呢?都是 uart 協(xié)議,就像上述提到的,只是電氣特性如電平不同。

2.UART 是全雙工通信,為何需要 RTS 和 CTS 來控制方向呢?

在 uart 全雙工通信中是不需要 RTS 和 CTS 的,二者只是用在半雙工通信中,如 RS485.

3. 在很多芯片手冊中,uart 支持 IrDA(紅外)和 RS485 模式,支持 RS485 模式是什么概念呢?

在 SAM4S 芯片手冊中,RS485 模式是如下這么描述的:

While operating in RS485 mode, the USART behaves as though in Async or Sync mode and configuration of all the parameters is possible 。

The difference is that the RTS pin is driven high when the transmitter is operating.

The RTS pin is controlled by TXEMPTY bit.

也就是說在 RS485 模式下,區(qū)別于正常模式在于當(dāng)處于發(fā)送情況下,RTS 腳是拉高的,一旦發(fā)送結(jié)束(TXEMPTY 置位),RTS 拉低,通知對方可以發(fā)送數(shù)據(jù),從而完成硬件自動流控。

下面圖 1 為 SAM4S 的 RS485 模式連接圖,圖 2 為 i.MX6 的的 RS485 模式連接圖。

4. 通常情況,串口起始位和停止位分別什么電平來表示?

起始位通常為低電平,用來同步;停止位為高電平,用來表示幀結(jié)束。

編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17162

    瀏覽量

    351345
  • modem
    +關(guān)注

    關(guān)注

    0

    文章

    102

    瀏覽量

    37593
  • RS232
    +關(guān)注

    關(guān)注

    13

    文章

    748

    瀏覽量

    94377
收藏 人收藏

    評論

    相關(guān)推薦

    多頻點(diǎn)焊控制器的創(chuàng)新應(yīng)用與優(yōu)勢分析

    隨著工業(yè)自動化技術(shù)的不斷進(jìn)步,焊接技術(shù)作為制造業(yè)中的重要環(huán)節(jié),也在不斷地尋求創(chuàng)新與發(fā)展。多頻點(diǎn)焊控制器作為一種新興的技術(shù),以其獨(dú)特的性能和廣泛的應(yīng)用前景,在焊接領(lǐng)域引起了廣泛關(guān)注。本文
    的頭像 發(fā)表于 12-17 11:02 ?134次閱讀
    多頻點(diǎn)焊<b class='flag-5'>控制器</b>的創(chuàng)新應(yīng)用與優(yōu)勢<b class='flag-5'>分析</b>

    UART、SPI、I2C、CAN、RS485、RS232、RS422通信協(xié)議總結(jié)

    一、UART協(xié)議 1.UART簡介 通用異步收發(fā),是一種通用的串行、異步通信總線,該總線有兩條數(shù)據(jù)線,可以實(shí)現(xiàn)全雙工的發(fā)送和接收在嵌入式系統(tǒng)中常用于主機(jī)與輔助設(shè)備之間的通信。 2.UART
    的頭像 發(fā)表于 11-16 10:09 ?2620次閱讀

    瞬態(tài)響應(yīng)與紋波——遲滯控制器中使用的紋波注入技術(shù)分析

    電子發(fā)燒友網(wǎng)站提供《瞬態(tài)響應(yīng)與紋波——遲滯控制器中使用的紋波注入技術(shù)分析.pdf》資料免費(fèi)下載
    發(fā)表于 10-09 14:34 ?0次下載
    瞬態(tài)響應(yīng)與紋波——遲滯<b class='flag-5'>控制器</b>中使用的紋波注入<b class='flag-5'>技術(shù)</b><b class='flag-5'>分析</b>

    在ESP8266中使用RTS線路時(shí)遇到的疑問求解

    我在ESP8266中使用 RTS 線路時(shí)遇到了一些問題(AT 版本:1.4.0.0,SDK 版本:2.1.0),基本上它永遠(yuǎn)不會激活。 Handhsake 已正確啟用 CTSRTS,并且
    發(fā)表于 07-16 07:53

    使用system_uart_swap函數(shù)屏蔽ESP8266上電UART0打印不成功的原因?

    ) { /********************************************************************************** * system_uart_swap()* * UART0 轉(zhuǎn)換。將 MTCK 作為
    發(fā)表于 07-11 08:18

    ESP8266是否支持RTS/CTS機(jī)制?

    不會發(fā)送 RTS 報(bào)文來請求 chennel。 8266是否支持RTS/CTS機(jī)制?如果是這樣,哪個(gè)API可以打開它?
    發(fā)表于 07-10 08:27

    如何在UART0上使用RTS/CTS和ESP8266?

    使用此連接設(shè)置時(shí),AT 命令無法到達(dá)調(diào)制解調(diào)(我們已經(jīng)驗(yàn)證了在調(diào)制解調(diào)中啟用了硬件流控制,也在 ESP 中啟用了 - uart.h) 如何在
    發(fā)表于 07-10 08:13

    ESP8266如何將uart0的txd和rxd交換到其他引腳?

    對此敏感的應(yīng)用,可以使用 UART 的內(nèi)部引腳交換功能,在初始化的時(shí)候,將 U0TXD、U0RXD 分 別與 U0RTS(MTDO),U0CTS(MTCK) 交換,間接屏蔽上電時(shí)期的打印輸出。 根據(jù)
    發(fā)表于 07-08 07:56

    啟用了硬件的流控RTS,CTS, 出現(xiàn)esp-modem: HW FIFO Overflow是什么原因?qū)е碌模?/a>

    , .flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS , .rx_flow_ctrl_thresh = 122 //UART_FIFO_LEN -8 }; MODEM_CHECK
    發(fā)表于 06-25 06:08

    如何設(shè)置rts frame的duration?

    我有一個(gè)系統(tǒng)一個(gè)ap和數(shù)個(gè)sta. STA每隔8毫秒發(fā)個(gè)udp包??梢酝ㄟ^wireshark抓包發(fā)現(xiàn),每個(gè)sta都會先發(fā)一個(gè)rts包,其中duration為156毫秒。這樣其他sta和ap在156毫秒內(nèi)就不發(fā)包了。請問如何設(shè)置這個(gè)duration值,或者直接停止發(fā)送rts
    發(fā)表于 06-24 06:48

    PID控制器與PWM控制器的區(qū)別

    在工業(yè)自動化和控制系統(tǒng)設(shè)計(jì)中,PID控制器(比例-積分-微分控制器)和PWM控制器(脈沖寬度調(diào)制控制器)是兩種常用的
    的頭像 發(fā)表于 06-05 18:25 ?3211次閱讀

    USART上對應(yīng)RTS的GPIO引腳不需要定義嗎?

    = USART_HardwareFlowControl_None; 改成下面三種即可實(shí)現(xiàn)硬件流控制。 USART_HardwareFlowControl_RTS USART_HardwareFlowControl_CTS
    發(fā)表于 04-25 08:05

    CY7C65223-24LTXI不使用流量控制功能時(shí),RTSCTS引腳是否應(yīng)處于打開狀態(tài)?

    請告訴我有關(guān) CY7C65223-24LTXI 的引腳處理的信息。 不使用流量控制功能時(shí),RTSCTS 引腳是否應(yīng)處于打開狀態(tài)?
    發(fā)表于 03-07 07:54

    CYW20719B2接收uart時(shí)意外重置是為什么?

    RTS,CTS wiced_hal_puart_select_uart_pads ( #if 1 WICED_P04,//目標(biāo) #else WICED_PUART_RXD,//evboart
    發(fā)表于 03-01 13:51

    只要CTS引腳保持高電平,CYW20706上的BTSDK PUART驅(qū)動就會阻止整個(gè)系統(tǒng),這準(zhǔn)確嗎?

    你好 我正在使用 CYBT-343026 (CYW20706) 上的 PUART 向具有 CTS/RTS 流量控制的主機(jī) MCU 發(fā)送/接收數(shù)據(jù)。 主機(jī) MCU 有時(shí)會通過長時(shí)間拉高 CYBT
    發(fā)表于 03-01 11:31