前言
在硬件傳輸過程中少不了各模塊的通信,就近來學習到的知識做一個簡單的梳理與總結
通信的基本概念
通信的方式分為多種,按照數據傳送方式可以分為串行通信與并行通信,按照通信的數據同步方式,可以分為異步通信與同步通信,按照數據的傳輸方向可以分為單工,半雙工和全雙工通信。
串行通信與并行通信
串行通信
使用一條數據線,一位一位進行傳輸,適合于遠距離通信
傳輸特點:傳輸線少,長距離傳送成本低,
并行通信
將數據字節的各位用多條數據線同時進行傳送,通常是8位,16位,32等數據一起傳輸
特點:控制簡單,傳輸速度快,長距離傳輸成本高,抗干擾ability差。
異步通信與同步通信
異步通信
發送與接收設備使用各自的時鐘控制數據的發送與接收過程,異步通信以字符為單位進行傳輸
特點:不要求收發雙方時鐘嚴格一致,傳輸效率不高
同步通信
要建立發送方對于接收方時鐘的直接控制,使得雙方能夠達到完全同步,保持位同步關系,也保持字符同步關系,實現方式有兩種:外同步與自同步
單工,半雙工與全工
單工通信
是指數據傳輸只能沿一個方向,不能反傳輸,只能由發送向接收傳輸
半雙工是指數據傳輸可以沿兩個方向,但需要分時進行
全雙工通信
數據可以同時進行雙向傳輸
串口通信(RS232)
全雙工點對點通信
RS232C通信協議 通常遵循96-N-8-1格式
“96”表示通信波特率為9600,通常使用的是異步串口通信,沒有時鐘線,
“N”表示無校驗位,用于校驗數據防止出現偏差,
“0”表示數據位數為8位
“1”表示1位停止位,可由0.5,1,1.5,或2個邏輯1的數據位表示
串口相關寄存器
(1) 串口控制寄存器SCON
SM0與SM1為工作方式選擇位:
SM2:多機通信控制位,主要用于方式 2 和方式 3。當 SM2=1 時可以利用收到的 RB8 來控制是否激活 RI(RB8=0 時不激活 RI,收到的信息丟棄;RB8=1 時收到的數據進入 SBUF,并激活 RI,進而在中斷服務中將數據從 SBUF 讀走)。當SM2=0 時,不論收到的 RB8 為 0 和1,均可以使收到的數據進入 SBUF,并激活 RI(即此時 RB8 不具有控制 RI 激活的功能)通過控制 SM2,可以實現多機通信。
REN:允許串行接收位。由軟件置 REN=1,則啟動串行口接收數據;若軟件置REN=0,則禁止接收。
TB8:在方式 2 或方式 3 中,是發送數據的第 9 位,可以用軟件規定其作用。
可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位。
在方式 0 和方式 1 中,該位未用到。
RB8:在方式 2 或方式 3 中,是接收到數據的第 9 位,作為奇偶校驗位或地址幀/數據幀的標志位。在方式 1 時,若 SM2=0,則 RB8 是接收到的停止位。
TI:發送中斷標志位。在方式 0 時,當串行發送第 8 位數據結束時,或在其它方式,串行發送停止位的開始時,由內部硬件使 TI 置 1,向 CPU 發中斷申請。在中斷服務程序中,必須用軟件將其清 0,取消此中斷申請。
RI:接收中斷標志位。在方式 0 時,當串行接收第 8 位數據結束時,或在其它方式,串行接收停止位的中間時,由內部硬件使 RI 置 1,向 CPU 發中斷申請。也必須在中斷服務程序中,用軟件將其清 0,取消此中斷申請
(2)電源控制寄存器 PCON
SMOD:波特率倍增位。在串口方式 1、方式 2、方式 3 時,波特率與 SMOD 有關,當SMOD=1 時,波特率提高一倍。復位時,SMOD=0。
串口工作方式
(1)方式0
串行口為同步移位寄存器的輸入輸出方式,主要用于擴展并行輸入或輸出口。
(2)方式1
為10位異步通信口,1位起始位,8位數據位,1位停止位。
(3)方式2和方式3
11位數據的異步通信口,TXD為數據發送引腳,RXD為數據接收引腳,
串口的使用方法
1,計算波特率
方式0=fosc/12
方式2=(2SMOD/64)*fosc
方式 1 的波特率 =(2SMOD/32)·(T1 溢出率)
方式 3 的波特率 =(2SMOD/32)·(T1 溢出率)
其中 T1 溢出率 = fosc /{12×[256 -(TH1)]}
2,串口初始化的步驟:
確定T1的工作方式(TMOD 寄存器)
確定串口的工作方式(SCON寄存器)
計算T1的初值(設定波特率),裝載TH1,TL1;
啟動T1(TCON中的TR1位)
如果使用中斷,需開啟串口中斷控制位(IE寄存器)
RS485通信
為半雙工通信,兩線制,可以一對多點進行組網
RS485通信特點:
(1)接口電平低,不易損壞芯片。RS485 的電氣特性:邏輯“1”以兩線間的電壓差為+(2~6)V 表示;邏輯“0”以兩線間的電壓差為(2~6)V 表示。接口信號電平比 RS232 降低了,不易損壞接口電路的芯片,且該電平與 TTL 電平兼容,可方便與 TTL 電路連接。
(2)傳輸速率高。10 米時,RS485 的數據最高傳輸速率可達 35Mbps,在1200m 時,傳輸速度可達 100Kbps。
(3)抗干擾能力強。RS485 接口是采用平衡驅動器和差分接收器的組合,抗共模干擾能力增強,即抗噪聲干擾性好。
(4)傳輸距離遠,支持節點多。RS485 總線最長可以傳輸 1200m 以上(速率≤100Kbps)一般最大支持 32 個節點,如果使用特制的 485 芯片,可以達到128 個或者 256 個節點,最大的可以支持到 400 個節點
i2c通信
I2C(Inter-Integrated Circuit)總線是由 PHILIPS 公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。是微電子通信控制領域廣泛采用的
一種總線標準。它是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優點。I2C 總線只有兩根雙向信號線。一根是數據線 SDA,另一根是時鐘線 SCL。由于其管腳少,硬件實現簡單,可擴展性強等特點,因此被廣泛的使用在各大集成芯片內。
I2c物理層
物理層特點:
(1)支持多設備總線,支持多個通訊主機及通訊從機
(2)只使用兩條總線線路,一條雙向串行數據線(SDA).一條串行時鐘線(SCL) 數據線用來表示數據,時鐘線用于數據收發同步
(3)每個連接到總線的設備都有一個獨立的地址,主機可以利用這個地址進行不同設備之間的訪問。
(4)總線通過上拉電阻接到電源,當I2C設備空閑時,會輸出高阻態,當所有設備都空閑輸出高阻態,上拉電阻把總線拉成高電平
(5)當多個主機使用總線時,防止數據沖突,會利用仲裁的方式決定哪個設備占用總線
(6)具有三種傳輸模式,標準模式傳輸速率為 100kbit/s,快速模式為400kbit/s,高速模式下可達 3.4Mbit/s,但目前大多 I2C 設備尚不支持高速模式
(7)連接到相同總線的 數量收到最大電容400pf的限制
常用的一些術語:
主機:啟動數據傳送并產生時鐘信號的設備
從機:被主機尋址的器件
多主機:同時有多于一個主機嘗試控制總線但不破壞傳輸,
主模式:用 I2CNDAT 支持自動字節計數的模式; 位 I2CRM,I2CSTT,I2CSTP控制數據的接收和發送
從模式:發送與接收操作都是由I2C模塊自動控制的
仲裁:是一個在有多個主機同時嘗試控制總線但只允許其中一個控制總線并使傳輸不被破壞的過程
同步:兩個或多個器件同步時鐘信號的過程;
發送器:發送數據到總線的器件
接收器:從總線接收數據的器件
I2C協議層
定義了通信的起始和停止信號,數據有效性,響應,仲裁,時鐘同步和地址廣播等環節
(1)數據有效性
I2C總線在進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平期間,數據線上的高電平與低電平狀態才允許變化
數據傳輸以字節為單位,傳輸字節數不受限制
(2)起始和停止信號
SCL線為高電平期間,SDA由高電平向低電平的變化表示為起始信號,SCL線為高電平期間,SDA線由低電平向高電平的變化表示為終止信號
(3)應答響應
在發送器件傳輸完一個字節的數據后,后邊必須跟一個校驗位,校驗位是接收端通過控制SDA(數據線)來實現,以提醒發送端數據我這邊已經
接收完成,數據傳送可以繼續進行。這個校驗位其實就是數據或地址傳輸過程中
的響應。響應包括“應答(ACK)”和“非應答(NACK)”兩種信號。作為數據接收端時,當設備(無論主從機)接收到 I2C 傳輸的一個字節數據或地址后,若希望對方繼續發送數據,則需要向對方發送“應答(ACK)”信號即特定的低電平脈沖,發送方會繼續發送下一個數據;若接收端希望結束數據傳輸,則向對方發送“非應答(NACK)”信號即特定的高電平脈沖,發送方接收到該信號后會產生一個停止信號,結束信號傳輸。
每一個字節必須保證是 8 位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節后面都必須跟隨一位應答位(即一幀共有 9 位)。
這些信號中,起始信號是必須的,結束語應答信號可以不要
總線的尋址方式
7位尋址與10位尋址
10 位尋址和 7 位尋址兼容,而且可以結合使用。10 位尋址不會影響已有的 7 位尋址,有 7 位和 10 位地址的器件可以連接到相同的 I2C 總線。以 7 位尋址為例進行介紹。
當主機發送了一個地址后,總線上的每個器件都將頭 7 位與它自己的地址比較,如果一樣,器件會判定它被主機尋址,其他地址不同的器件將被忽略后面的數據信號。至于是從機接收器還是從機發送器,都由 R/W 位決定的。從機的地址由固定部分和可編程部分組成。在一個系統中可能希望接入多個相同的從機,從機地址中可編程部分決定了可接入總線該類器件的最大數目。如一個從機的 7 位尋址位有 4 位是固定位,3 位是可編程位,這時僅能尋址 8 個同樣的器件,即可以有 8 個同樣的器件接入到該 I2C 總線系統中。
SPI通信
SPI是串行外設接口,是 Motorola 公司推出的一種同步串行接口技術,是一種高速的,全雙工,同步的通信總線。
SPI優點:支持全雙工通信 通信簡單 數據傳輸速率快
缺點:沒有指定的流控制,沒有應答機制確認是否接受到數據,所以與IIC總線協議比較在數據可靠性上有一定的缺陷
特點:
(1):高速,同步,全雙工 非差分,總線式
(2):主從式通信模式(一個SPI通訊系統需要包含一個(只有一個)主設備,一個或多個從設備,SPI的接口讀寫操作,都是由主設備發起,當存在多個從設備時,通過各自的片選信號進行管理)
SPI的物理層
以主從方式工作,通常有一個主設備和一個或多個從設備,需要至少四根線,MISO,MOSI,SCLK,CS
SPI通信模式
SPI的四種通信模式,不同從設備在出廠時就配置為某種模式,只能改變主設備的SPI并進行配置,通過CPOL(時鐘極性)和CPHA(時鐘相位)來控制我們主設備的通信模式
時鐘極性CPOL用來配置SCLK的電平處于何種狀態(空閑態還是有效態),時鐘相位CPHA用來配置數據采樣是在第幾個邊沿;
CPOL=0,表示當SCLK=0時處于空閑態,所以有效狀態就是SCLK處于高電平時;
CPOL=1,表示當SCLK=1時處于空閑態,所以有效狀態就是SCLK處于低電平時;
CPHA=0,表示數據采樣是在第1個邊沿,數據發送在第2個邊沿;
CPHA=1,表示數據采樣是在第2個邊沿,數據發送在第1個邊沿。
在高電平有效狀態時,第一邊沿為上升沿,第二邊沿為下降沿;在低電平有效狀態時,第一邊沿為下降沿,第二邊為上升沿
上一篇:51單片機—使用PWM對直流電機調速
下一篇:51單片機串口通信(UART)
推薦閱讀
史海拾趣
1992年,ELECTRONICON成立了卷繞電容器部門,并專注于該領域的研發與生產。該部門擁有238名員工,致力于為客戶提供高品質的照明、電機和電力電容器產品。隨著部門的不斷發展壯大,ELECTRONICON在電容器領域的市場份額也得到了進一步提升。
Denyo Europa Gmbh公司在電子行業中嶄露頭角,始于一次技術創新的突破。公司研發團隊經過數年的努力,成功開發出一種新型高效能電池技術,這種電池不僅容量大,而且充電速度快,安全性能高。這一技術的推出,迅速贏得了市場的認可,也為公司帶來了可觀的收益。公司因此逐漸在電子行業中建立了自己的技術領先地位。
隨著公司實力的不斷增強,雅特力開始將目光投向全球市場。公司積極參與國際電子展會和論壇,與全球各地的客戶和合作伙伴建立了廣泛的聯系。同時,雅特力還通過設立海外分支機構、開展跨國合作等方式,進一步拓展其全球市場。這些舉措不僅提升了雅特力的品牌知名度和影響力,也為公司的長遠發展奠定了堅實的基礎。
隨著全球環保意識的不斷提高,電子行業對環保材料的需求也日益增長。CUI公司敏銳地抓住了這一市場機遇,積極投入研發,成功開發出了一種綠色環保型的碘化亞銅生產工藝。這種工藝不僅降低了生產過程中的能耗和排放,而且提高了產品的純度和質量。通過推廣這一工藝,CUI公司不僅贏得了客戶的青睞,也為行業的綠色發展做出了積極貢獻。
我想編一段產生如上圖波形的程序,程序如下:運行后PORTB.0上的燈沒有反應。不知錯在哪里?請指教。謝謝。 #include <mega16.h> #include<delay.h> unsigned int a=3,b=5,c=8, i; void main(void) { PORTB ...… 查看全部問答∨ |
在信息化程度越來越高的今天,擔當信息處理與交換重任的機房是整個信息網絡工程的數據傳輸中心、數據處理中心和數據交換中心。為保證機房設備正常運行及工作人員有一個良好的工作環境,對機房溫濕度的監測是必不可少的,合理正常的溫濕度環境是機 ...… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:35 編輯 聽說NEC公司送了芯片,可是為什么有的學校拿到了,有的學校沒拿到呢? … 查看全部問答∨ |
|
HELLO.C(5): 警告 C206: \'uart_Init\': missing function-prototype HELLO.C(10): 警告 C206: \'DELAY\': missing function-prototype HELLO.C(10): 錯誤 C267: \'DELAY\': requires ANSI-style prototype 這是用Keil編譯程序時出現的錯誤,應 ...… 查看全部問答∨ |
如果需要測量皮膚某處的溫度,用什么溫度傳感器比較好呢?紅外的?還是其他什么? 如果是用接觸的,測量結果會不會因為身體皮膚出汗或者其他什么受到影響?如果用紅外的,精度怎么樣?我的測量距離大概也就1厘米!測某一點或者直徑為1厘米的區域都可以!我需 ...… 查看全部問答∨ |
請教WinCE6.0開發中關于Emulator的問題(如何自制SDK,Emulator) 我剛剛接觸WinCE,我需要做的事情是在一般WinCE設備上開發應用程序,我打算自己在PB6.0上導出一個一般的WinCE6.0的SDK并安裝,然后在VS2005上寫代碼,通過WinCE6.0仿真器看到代碼的效果。 現在我按照網上的文章“WinCE6.0安裝順序”依次安裝了下列 ...… 查看全部問答∨ |
我剛開始接觸藍牙開發,現在在學習Bluelab 3.6.2提供的Demo code,有做過相關藍牙開發的嗎,提供一下學習方法,適合入門,謝謝!… 查看全部問答∨ |
各位高手,幫幫小弟吧!怎么才能實現占空比可變的PWM信號五分頻。單片機輸出的最低頻率是3.9KHz,現在需要降低到500Hz左右,怎么樣才能實現呢?不勝感激…… [ 本帖最后由 daijianguo28 于 2011-7-10 12:23 編輯 ]… 查看全部問答∨ |