
為什么需要“流控”?
先舉個(gè)日常場(chǎng)景:小區(qū)快遞員(發(fā)送方)送快遞,你(接收方)在家收快遞。如果你正在忙(比如做飯),沒(méi)法及時(shí)開門收件,快遞員硬要把快遞塞進(jìn)去,很可能導(dǎo)致快遞丟失;但如果居你能提前告訴快遞員“現(xiàn)在能收”或“等下再來(lái)”,就能避免這種問(wèn)題。
UART通信里的“流控”,主要就是解決這個(gè)問(wèn)題:發(fā)送方和接收方的處理速度可能不匹配(比如發(fā)送方是高速 SoC,接收方是低速傳感器),如果發(fā)送方一股勁拼命發(fā)數(shù)據(jù),接收方緩沖區(qū)滿了處理不過(guò)來(lái),多余的數(shù)據(jù)就會(huì)丟失。流控的作用,就是讓收發(fā)雙方“互相溝通”,協(xié)調(diào)傳輸節(jié)奏。
流控分兩種:軟件流控(靠特殊字符XON/XOFF)和硬件流控(靠專用引腳RTS/CTS)。今天重點(diǎn)聊更可靠、更常用的——RTS/CTS硬件流控。
RTS和CTS 是兩個(gè)“通信信號(hào)兵”
UART基礎(chǔ)通信只需要TX(發(fā)送線)、RX(接收線)、GND(地線)三根線,而RTS/CTS硬件流控需要額外增加兩根專用引腳,這兩根線就像兩個(gè)“信號(hào)兵”,專門負(fù)責(zé)傳遞“能不能發(fā)數(shù)據(jù)”的指令。

RTS(Request To Send)——請(qǐng)求發(fā)送:由“接收方”控制,發(fā)給“發(fā)送方”的信號(hào),意思是“我(接收方)準(zhǔn)備好了,你可以發(fā)數(shù)據(jù)了”(或“我忙,別發(fā)了”); 注意:很多人會(huì)搞反控制方,記住“RTS是接收方發(fā)的請(qǐng)求”,不是發(fā)送方!
CTS(Clear To Send)——允許發(fā)送:由“發(fā)送方”控制,發(fā)給“接收方”的信號(hào)?不!錯(cuò)了!再記一遍:CTS是“對(duì)RTS的響應(yīng)”,通常和RTS交叉連接——接收方通過(guò)RTS發(fā)請(qǐng)求,發(fā)送方看到后,通過(guò)CTS回應(yīng)“我收到你的請(qǐng)求了,馬上發(fā)/停止發(fā)”;更簡(jiǎn)單的記法:RTS=接收方的“就緒信號(hào)”,CTS=發(fā)送方的“應(yīng)答信號(hào)”,兩根線交叉連接(A的RTS接B的CTS,A的CTS接B的RTS)。
補(bǔ)充:硬件上,RTS和CTS都是“低電平有效”(大部分場(chǎng)景)——比如接收方拉低RTS,就表示“我就緒了”;發(fā)送方拉低CTS,就表示“我收到指令,準(zhǔn)備發(fā)/已停止”。
總結(jié)
RTS/CTS硬件流控的一句話概括:接收方靠RTS發(fā)“就緒/暫?!毙盘?hào),發(fā)送方靠CTS響應(yīng),從硬件層面協(xié)調(diào)傳輸節(jié)奏,避免數(shù)據(jù)丟失。它不需要占用數(shù)據(jù)帶寬,可靠性高,是高速、大數(shù)據(jù)量UART通信的“必備技能”。
你在使用UART流控時(shí),有沒(méi)有遇到過(guò)接線接反、配置無(wú)效這類坑?歡迎評(píng)論區(qū)留言交流分享~
(完)
本人專注 Linux 驅(qū)動(dòng) & Linux/Android BSP 開發(fā)調(diào)試,可接外包項(xiàng)目/技術(shù)支持/問(wèn)題定位。有需求或交個(gè)朋友可加微信:【Chen_WeChat2026】。
-
嵌入式
+關(guān)注
關(guān)注
5208文章
20603瀏覽量
336489 -
uart
+關(guān)注
關(guān)注
22文章
1319瀏覽量
106931
發(fā)布評(píng)論請(qǐng)先 登錄
2025嵌入式開發(fā)教程|遠(yuǎn)航哥
什么是嵌入式應(yīng)用開發(fā)?
Renesas Starter Kit for RX72T:開啟嵌入式開發(fā)新征程
探索 RENESAS EK - RX261 v1 評(píng)估套件:開啟嵌入式系統(tǒng)設(shè)計(jì)新旅程
系統(tǒng)嵌入式的學(xué)習(xí)路線
什么是嵌入式操作系統(tǒng)?
嵌入式需要掌握哪些核心技能?
入行嵌入式應(yīng)該怎么準(zhǔn)備?
CYW20704 的 UART 4 針(TX/RX/CTS/RTS)是什么形式(推拉或漏極開路)嗎?
Tx-Rx iPAC FEM 雙頻 GSM/GPRS skyworksinc
用于雙頻 GSM / GPRS / EDGE 的 Tx-Rx 前端模塊 skyworksinc
Tx–Rx iPAC? 前端模塊 – 四頻 GSM/GPRS skyworksinc
用于雙頻 GSM / GPRS 的 Tx-Rx iPAC? 前端模塊 skyworksinc
飛凌嵌入式2025嵌入式及邊緣AI技術(shù)論壇圓滿結(jié)束
嵌入式分享#60:UART 我只會(huì) TX、RX
評(píng)論