你這個小板子和電腦通訊,做個上位機,最常用的接口是什么?我想大家閉眼說-串口!
串口是什么?
串行接口(Serial port),也稱串行接口或串行端口,串行通信接口,COM接口,簡稱串口。
就字面意思,一根線就可以傳輸,也就是說,其實傳輸的是幀數據,那不免得就要說一幀里面有什么?
我在之前的文章里面說,一個協議最重要的就是抓住01到底是怎么傳輸的,以及我們如何設計一些東西,可以找到這個幀數據的頭和尾如何把數據載荷取出來。
你看這個就是頭+尾+8bit數據,不就是一個字節,這就是包裝出來的一幀數據。
更加詳細的是這樣
當兩個設備需要通過UART協議進行通訊時,它們需要同時約定好以下內容:
每一位信號的時間長度T(波特率 = 1/T)
幀結構中每一項的具體位數
是否有校驗位,以及校驗位的機制(奇/偶/..)
有了這些約定,接收設備只需要等待起始位的到來,再對之后的波形進行固定間隔的采樣即可獲得傳輸的具體信息。以字符‘D‘的波形為例:
取樣的波形
波特率是UART協議,或者說所有異步串行協議,非常重要的一個概念,即單位時間內(1秒)可表示的bit位個數,或者也可以表述為bit位寬的倒數。例如一個波特率為115200的UART波形表示1秒可容納115200個bit位,也就是說每一位bit數據占大約8.68uS的時長。
UART等異步串行協議,為了簡化信號物理連接,降低通訊成本,一般只有一根信號線,無法同時傳輸數據和時鐘信號。
收/發設備為了正確解析波形就需要在相同的波特率設置下。而相同的波形使用不同的波特率獲取的信息可能會完全不同。對于接收設備來講,只有起始位可以作為一幀數據的同步點,其它數據都是通過波特率來確定具體的取樣位置。
波特率錯誤
空閑時持續的高電平
UART接收端會一直檢測信號線上的電平變化,開始傳輸數據時,發送端將信號線從高電平拉到低電平結束空閑狀態,并保持一個bit位的時長。
而我們現代的協議其實是分層的
我們關心的是具體數據的意思,但是物理層走的確實高高低低的電平。物理層就是數據手冊里面的東西,這個電平范圍什么的,IO的速度什么的,因為一翻轉就是一個01出來了。然后這么多的01,交給協議層,就是01如何分配,把里面的頭尾校驗這些都分離出來。然后把我們感興趣的數據再傳一層,擁有著實際意義的應用層。
為什么我這一次說了這個協議分層?因為串口的物理層有點多。
針對不同的通訊需求,便可以使用不同的物理層實現。例如簡單的板內通訊,或者常見的設備調試場景,使用簡單的LVTTL/TTL電平即可在兩個設備間進行UART協議通訊。
夢源的圖
通用的串口則使用的是RS232電平,可以增加傳輸距離,并且抵抗一定程度的信號干擾。 付出的成本則是在物理層需要對應的電平轉換芯片來實現,發送端需要將內部的高低電平信號轉換成電壓更高的+/-電壓信號,接收端需要將+/-電壓信號轉換成內部的高低電平信號。
這里使用這個芯片,就好像是一個外置的RF芯片,01還是哪個01,但是物理層做了一些更改。
電壓大了,這個傳輸的時候,其實能量也強了
在工業通訊的場景下,為了進一步提高傳輸距離,以及增強信號的可靠性,一般會采用RS485的電平標準。 在發送端將普通的高低電平信號轉換成一對差分信號,在接收端將差分信號再轉換成普通的高低電平信號。另外,RS485允許總線上連接多達128收發器,而TTL或者RS232則是點對點的連接。
也就是說,工業設備要追求抗干擾和穩定,一個節點數據量不大,但是又需要通訊,那這個RS485就大顯身手了。
可以看到,就是AB兩個線就可以傳輸了
甩來甩去
我們使用的最多的是TTL電平
還是夢源的圖
我們看這些MCU的特性里面一定會有,這個支持的模式
同步通訊是有時鐘的,大家在一個線上面采集。
也就是要三個線
高級功能
還可以設置時鐘
串口同步通信:在約定的通信速率下,發送端和接收端的時鐘信號頻率和相位始終保持同步,以保證通信雙方在發送和接收數據時具有完全一樣的定時關系。
串口異步通信:也稱為起止式異步通信,是以字符為單位進行傳輸的,字符之間沒有固定的時間間隔要求,每個字符中的各位則以固定的時間傳送。
后者也叫字符同步,大家一般都是選這個的多。 上面就是咱們的基礎知識了,來看看具體在MCU,SOC里面的樣子
我這里選了英偉達 Jetson Nano:
可以看到,直接給了3個串口
不愧是說SOC,性能就是好,時鐘200M,還有FIFO
三組
可以看到,再牛逼也得用串口調試
那其實我們的電腦只有USB和Type-C接口了,根本沒有串口!!!那咋辦?
所以就需要一個USB轉串口的芯片!
CP2102,明星產品,也是貴族了
中規中矩的異步串口功能
這里
虛擬串口,全平臺適配
框圖也簡單,如果異步通訊的話,就TX和RX就行了
這也簡單,電源就是濾波,然后USB就是保護,RST是上拉
還有一個2104
1. CP2104更便宜。
2. CP2104體積更小,占地面積不同。CP2104是QFN24(4x4mm); CP2102是QFN28(5x5mm)。
會小一點
3. CP2104具有 I/O 電源引腳,可通過外部電阻承受VDD至5V的電壓。
4. CP2104支持RS-485; CP2102沒有。
5. CP2104具有GPIO引腳; CP2102沒有。
6. CP2104具有一次性可編程存儲器(OTP); 只能自定義一次CP2104。CP2102具有可重新編程的閃存; 可以多次自定義CP2102。
一模一樣,無所謂
還有咱們的WCH
就是它的封裝不好看,有點大
微小型的 10 腳貼片-MSOP-10,這個好
這個是什么畫的?PADS?
就和我不出油的筆有一拼。
還有下載電路,數據手冊里面介紹了不少應用例子,不錯
反正就是這三個吧!
MCU還是要說一下:
CW32還有個好玩的,就是TX和RX互換功能,再也不怕連錯了
在CR2這個寄存器這里改
這個也值得一看,別的MCU也可以用的上
除了MCU有串口,需要一個USB橋以外,還有自己帶MCU USB IP的。
哈哈哈哈,沒想到吧?每次買東西湊單的貨,有這種好玩的東西。也就是說可以不使用額外的芯片,就直接一個USB線就可以通訊了。
直接這樣就ok
推薦這本書
STM32F103 自帶的 USB 符合 USB2.0 規范,不過 STM32F103 的 USB 都只能用來做設備,而不能用作主機。 標準 USB 共四根線組成,除 VCC/GND 外,另外為 D+,D-; 這兩根數據線采用的是差分電壓的方式進行數據傳輸的。 在 USB 主機上,D-和 D+都是接了 15K 的電阻到低的,所以在沒有設備接入的時候,D+、D-均是低電平。而在 USB 設備中,如果是高速設備,則會在 D+上接一個 1.5K 的電阻到 VCC,而如果是低速設備,則會在 D-上接一個 1.5K 的電阻到 VCC。這樣當設備接入主機的時候,主機就可以判斷是否有設備接入,并能判斷設備是高速設備還是低速設備。 STM32F103 的 MCU 自帶 USB 從控制器,符合 USB 規范的通信連接;PC 主機和微控制器之間的數據傳輸是通過共享一專用的數據緩沖區來完成的,該數據緩沖區能被 USB 外設直接訪問。 這塊專用數據緩沖區的大小由所使用的端點數目和每個端點最大的數據分組大小所決定,每個端點最大可使用 512 字節緩沖區(專用的 512 字節,和 CAN 共用),最多可用于 16 個單向或 8 個雙向端點。USB 模塊同 PC 主機通信,根據 USB 規范實現令牌分組的檢測,數據發送/接收的處理,和握手分組的處理。整個傳輸的格式由硬件完成,其中包括 CRC 的生成和校驗。
這個是設置頁面
Speed:Full Speed 12MBit/s(固定為全速)
Low Power:默認 Disabled(在任何不需要使用usb模塊的時候,通過寫控制寄存器總可以使USB模塊置于低功耗模式(low power mode ,suspend模式)。在這種模式下,不產生任何靜態電流消耗,同時USB時鐘也會減慢或停止。通過對USB線上數據傳輸的檢測,可以在低功耗模式下喚醒USB模塊。也可以將一特定的中斷輸入源直接連接到喚醒引腳上,以使系統能立即恢復正常的時鐘系統,并支持直接啟動或停止時鐘系統。)
USB 的 DP 引腳必須上拉 1.5K 歐的電阻,電腦才能檢測到 USB,否則檢測不到。
如果USB端口出現感嘆號設備無法啟動的問題,可適當將堆改大,如0x400。
就是這么多了。
IIC支持熱拔插嗎?(附有詳細CW32 IIC協議解讀)
SPI協議,這篇就夠了!
夢源邏輯分析儀分析IIC,SPI協議
這樣看就低速協議全面了。
https://blog.csdn.net/qq_36347513/article/details/127404464https://blog.csdn.net/qq_36347513/article/details/127404464https://dreamsourcelab.cn/logic-analyzer/uart/https://zh.wikipedia.org/wiki/%E4%B8%B2%E8%A1%8C%E7%AB%AF%E5%8F%A3https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf
-
mcu
+關注
關注
146文章
17197瀏覽量
351888 -
電腦
+關注
關注
15文章
1718瀏覽量
68999 -
串口
+關注
關注
14文章
1557瀏覽量
76719
原文標題:細嗦MCU與電腦的通訊方式-串口
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論