一、通信類型
(一)并行通信
多個比特通過并行線同時傳輸,傳輸速率快,但會大量占用芯片資源,在對資源敏感的場景下不太適用。
(二)串行通信
把數據拆成單個比特,按順序在一根總線上發送。它系統資源占用少、結構簡單,是主機間通信常用方式。像 RS232、RS485、RS422 都屬于串行通信,串口通信(Serial Port)也是串行通信的一種,且屬于異步通信。
(三)單工模式
通信時一方固定發,另一方固定收,用一根總線傳數據,只能單向傳信息,就像只能聽別人說,沒法回應。
(四)半雙工通信
數據能在兩個方向交替傳,但不能同時進行。通信雙方能發也能收,不過不能同時干這兩件事,好比和人交替說話、傾聽,你說時對方聽,對方說時你聽,常用于對話類場景。
(五)全雙工通信
數據可同時在兩個方向傳輸,雙方能同時發和收數據,實現雙向通信,類似打電話,能同時說和聽。
(六)串行的異步與同步通信
1. 異步通信
兩個字符(8 位)之間時間間隔不固定,但一個字符內各位時間間隔固定。收發雙方波特率得事先約定好。串口通信時,波特率若沒約定好,數據傳輸會亂。發送和接收方各自 “計時”,只要誤差不超 6% 左右就行,這就像打字,敲每個字母的時間自己控制,只要接收端能正確識別。
2. 同步通信
要求收發雙方同頻同相。設備間除數據線(SDA),還有時鐘線(SCL),發送方控制時鐘線變化,每發一個比特,時鐘線都按規則改變,就像合唱團靠指揮員控制節奏,大家按節奏唱歌,IIC、SPI 都用這種方式。同步和異步串行通信的區別是有無時鐘線,有就是同步,沒有就是異步。
注:同步串行通信方式與異步串行通信方式的區別:存在時鐘線的為同步串行
通信方式通信,沒有時鐘線的為異步串行通信方式。
二、串行口通信(全雙工、異步)
(一)UART 協議
UART(通用異步收發器)是常用串行通信協議,用于設備間數據傳輸,通過 TXD(發送線)和 RXD(接收線)實現異步傳輸,TXD 發數據到另一設備,RXD 從另一設備收數據到本設備。
(二)串口通信時序
以 TTL 為例,不同主機間數據格式如下:
- 空閑時:數據線為高電平。
- 起始位:發送方發一個低電平作為起始位。
- 數據位:按低位先行(第一個比特是最右邊的最低位)發送。
- 校驗位:有奇校驗、偶校驗和無校驗三種,可選擇發或不發。奇校驗要讓數據位加校驗位中 “1” 的總數為奇數;偶校驗則讓總數為偶數。
- 停止位:校驗位后發一個停止位(高電平),把兩個數據分隔開,停止位也可以是 1.5 個或 2 個。
簡單說通信邏輯就是:空閑時數據線高電平,發數據先送低電平起始位,然后按低位先行發 8 個數據位,接著可選校驗位,最后發高電平停止位。
(三)波特率
用波特率(bps)描述串口數據傳輸速率,指每秒傳輸的比特數。常見波特率有 1200、2400、4800、9600、115200 等。比如 9600bps,就是每秒傳 9600 個比特,每個比特傳輸時間約 1.041×10??秒。
三、三種串行通信的物理表現
主機間通信,導線內阻會導致電壓衰減,TTL 電平還會因主機距離出現高電平衰減和串擾。
(一)TTL
芯片引腳產生的電壓,和芯片有關,51 單片機下是 5V,2440 下是 3.3V 等。5V TTL 通信距離一般在 10 - 20 米,傳輸距離受限。邏輯 0 是 0V 低電壓,邏輯 1 由芯片供電電壓決定。
(二)RS232
為解決 TTL 傳輸距離短的問題,IEEE 頒布 RS232 標準。邏輯高電平(邏輯 1)在 - 3V 到 - 15V 之間,邏輯低電平(邏輯 0)在 + 3V 到 + 15V 之間。收發主機有收、發、地三根線,是全雙工的,理論能傳 20 - 30 米。
(三)RS485
用 A、B 兩根信號線,通過比較兩者電壓差識別信息,+7V 到 + 12V 是邏輯 1,-7V 到 - 12V 是邏輯 0。差分傳輸抗干擾強,傳輸距離可達 1200 米,適用于大范圍傳輸。因為傳輸時兩根線都得用,所以是半雙工的。
四、串行口寄存器
包括 SBUF(串行口數據緩沖寄存器)、SCON(串行口控制寄存器)、PCON(電源控制寄存器)等,這些寄存器用于配置和控制串行通信的相關參數與狀態。
五、USB 下載電路模塊相關
(一)xdata 的作用
不把內容存在芯片內部 RAM,而是存在擴展的 RAM 里,能擴展存儲容量。
(二)定時器初值計算
公式為2^8?2^smod×focs/32/bps/12。其中 smod 是 PCON 的 B7 位(0 或 1,SMOD=1 時波特率翻倍),focs 是晶振頻率(如 11.0592M),bps 是目標波特率(如 2400),2^8因用 8 位自動重裝定時器工作方式。若 2400bps 且 smod=1,計算得初值 232。
六、MODBUS 通信協議
協議通過定義數組元素內容來規定通信幀結構。如圖中主機與從機通信,幀包含起始字節、地址碼、功能碼、數據、校驗碼、結束碼等。功能碼區分功能(如點燈、數碼管、蜂鳴器、測溫等),從機到主機時功能碼最高位會進行或 1 操作。