一、流控,顧名思義就是流量控制的意思。目的是協調收發雙方,使資料不會丟失。
二、很多人用了串列埠很久都不知道這回事,這是因為很多場合確實沒有必要。收發雙方波特率固定,並且接受陣列足夠大,這時不會出現接收方接受陣列溢位導致資料丟失的情況,所以,以我的理解,使用流控的主要目的就是在資料量大,有可能出現接受陣列溢位的時候,採取的一種協調收發雙方的措施。可能還要其他原因,我沒有理解到位。
三、流控設計到rts和cts兩個口,收發雙方都有各自的rts和cts,如通訊雙方a,b。那麼a的rts就與b的cts相連,a的cts就與b的rts相連。
rts的作用是告訴對方我可以接受資料,是輸出口;cts的作用是根據電平高低控制傳送或不發生資料。
如:a與b通訊,現在a給b傳送資料,當b出現某種情況(可能是接受快取快要滿了)的時候,b的rts拉低(一般拉低表示有效,但也不一定),a的cts是與a的rts相連的,則a檢測到它的cts拉低,就知道b在告訴他暫時不要再發了。他就乖乖地停止傳送。等到b可以繼續接收資料的時候,b的rts拉高,這時候a的cts也拉高,a就知道可以繼續傳送資料了。如果a和b收發情況換一下也是一樣的道理。
四、上面說的是硬體的流控,接收方通過引腳的高低來告知或叫做控制傳送方的傳送。這種方式不管傳送的資料是二進位制格式還是字元格式都試用。
另外跟硬體流控相對的還要軟體流控。軟體流控就不需要rts和cts兩引腳了,當接收方不想繼續接收資料時,通過接收方的txd給傳送方傳送乙個xoff訊號,傳送方接收到這個字元就暫停傳送資料;等到接收方可以繼續接收資料時,接收方再給傳送方傳送乙個xon訊號,於是傳送方繼續傳送資料。因為xon、xoff訊號也是通過資料訊號線傳送的,所以軟體流控在傳輸二進位制資料時可能會出現錯誤,因為可能你傳送的資料裡面也有xon、xoff對應的二進位制值。但是這種情況也可以解決,比如對xon、xoff進行轉義。
UART通訊收發
在使用串列埠時,只需掌握zigbee協議棧提供的串列埠操作相關的三個函式即可。uint8 haluartopen uint8 port,haluartcfg t config uint16 haluartread uint8 port,uint8 buf,uint16 len uint16 halu...
UART串列埠通訊
先簡單說說串列埠通訊 uart 我做的這個實驗只針對rs232標準,在fpga與上位機給出的rs232口之間通過電平轉換電路 最上面圖中的max232晶元 實現ttl電平與rs232電平之間的轉換。我們只關心rs232 tx和rs232 rx兩個訊號,rs232 tx是資料傳送埠,rs232 rx是...
UART通訊 通訊基礎筆記
uart通訊 universalasynchronous receiver transmitter 通訊基礎 並行和序列 並行通訊 把資料比喻成車 通訊雙方比為a b 並行通訊就是車在一條八車道上運作 同理序列通訊 車在單車道上排隊執行 單工和雙工 a只能給b發 b不能給a發 叫做單工 a能給b發 ...