一、概念
1. 485:485(一般稱作 RS485/EIA-485)是隸屬于 OSI 模型物理層的電氣特性規(guī)定為 2 線,半雙工,多點(diǎn)通信的標(biāo)準(zhǔn)。它的電氣特性和 RS-232 大不一樣。用纜線兩端的電壓差值來(lái)表示傳遞信號(hào)。
2. CAN:CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是一種多主方式的串行通訊總線,是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。
3. 單總線:?jiǎn)慰偩€是美國(guó)DALLAS公司推出的外圍串行擴(kuò)展總線技術(shù)。與SPI、I2C串行數(shù)據(jù)通信方式不同.它采用單根信號(hào)線,既傳輸時(shí)鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,具有節(jié)省I/O口線、資源結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于總線擴(kuò)展和維護(hù)等諸多優(yōu)點(diǎn)。
4. SPI:全名串行外設(shè)接口(Serial Peripheral Interface),是一種同步外設(shè)接口,它可以使單片機(jī)與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。外圍設(shè)備包括Flash RAM,網(wǎng)絡(luò)控制器、LCD顯示驅(qū)動(dòng)器、A/D轉(zhuǎn)換器和MCU等。
5. I2C:I2C總線是由Philips公司開(kāi)發(fā)的一種簡(jiǎn)單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。
二、特點(diǎn)
1. 485:
(1)接口電平低,不易損壞芯片
RS485 的電氣特性:邏輯“1”以兩線間的電壓差為+(2~ 6)V表示;邏輯“0”以兩線間的電壓差為-(2~6)V 表示。接口信號(hào)電平比 RS232 降低了,不易損壞接口電路的芯片,且該電平與 TTL 電平兼容,可方便與 TTL 電路連接。
(2)傳輸速率高
10 米時(shí),RS485 的數(shù)據(jù)最高傳輸速率可達(dá) 35Mbps,在 1200m 時(shí),傳輸速度可達(dá) 100Kbps
(3)抗干擾能力強(qiáng)
RS485 接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗共模干擾能力增強(qiáng),即抗噪聲干擾性好。
(4)傳輸距離遠(yuǎn),支持節(jié)點(diǎn)多
RS485 總線最長(zhǎng)可以傳輸 1200m 以上(速率≤100Kbps)一般最大支持 32 個(gè)節(jié)點(diǎn),如果使用特制的 485 芯片,可以達(dá)到 128 個(gè)或者 256 個(gè)節(jié)點(diǎn),最大的可以支持到 400 個(gè)節(jié)點(diǎn)。
2. CAN:
(1)多主控制(I2C有主從機(jī)之分,CAN無(wú)所謂主機(jī)從機(jī))
在總線空閑時(shí),所有的單元都可開(kāi)始發(fā)送消息(多主控制)
“最先”訪問(wèn)總線的單元可獲得發(fā)送權(quán)(不管后面消息的優(yōu)先級(jí)是否比自身的高)
多個(gè)單元“同時(shí)”開(kāi)始發(fā)送時(shí),發(fā)送高優(yōu)先級(jí) ID 消息的單元可獲得發(fā)送權(quán)(只在同時(shí)發(fā)送時(shí)起作用)
(2)消息的發(fā)送(對(duì)比I2C是根據(jù)地址進(jìn)行訪問(wèn),這里ID非地址,而是一種表征優(yōu)先級(jí)的標(biāo)識(shí)符)
在 CAN 協(xié)議中,所有的消息都以固定的格式發(fā)送。當(dāng)兩個(gè)以上的單元同時(shí)開(kāi)始發(fā)送消息時(shí),根據(jù)ID (標(biāo)識(shí)符) 決定優(yōu)先級(jí),對(duì)各消息 ID 的每個(gè)位進(jìn)行逐個(gè)仲裁比較。仲裁獲勝(被判定為優(yōu)先級(jí)最高)的單元可繼續(xù)發(fā)送消息,仲裁失利的單元?jiǎng)t立刻停止發(fā)送而進(jìn)行接收工作,此處這里ID非地址,而是一種表征優(yōu)先級(jí)的標(biāo)識(shí)符
(3)系統(tǒng)的柔軟性(對(duì)比I2C總線上的每個(gè)單元都有一個(gè)獨(dú)立的地址)
與總線相連的單元沒(méi)有類似于“地址”的信息。因此在總線上增加單元時(shí),連接在總線上的其它單元的都不需要改變。
(4) 通信速度(波特率)
由CAN的物理層就可以看出,CAN是一種異步通信方式,所以通信前必須統(tǒng)一好同一網(wǎng)絡(luò)上每個(gè)單元的波特率,即使有一個(gè)單元的通信速度與其它的不一樣,此單元也會(huì)輸出錯(cuò)誤信號(hào),妨礙整個(gè)網(wǎng)絡(luò)的通信。不同網(wǎng)絡(luò)間則可以有不同的通信速度。
(5) 遠(yuǎn)程數(shù)據(jù)請(qǐng)求
可通過(guò)發(fā)送“遙控幀” 請(qǐng)求其他單元發(fā)送數(shù)據(jù)。
(6)錯(cuò)誤檢測(cè)功能·錯(cuò)誤通知功能·錯(cuò)誤恢復(fù)功能
所有的單元都可以檢測(cè)錯(cuò)誤(錯(cuò)誤檢測(cè)功能)
檢測(cè)出錯(cuò)誤的單元會(huì)立即同時(shí)通知其他所有單元(錯(cuò)誤通知功能)
正在發(fā)送消息的單元一旦檢測(cè)出錯(cuò)誤,會(huì)強(qiáng)制結(jié)束當(dāng)前的發(fā)送。強(qiáng)制結(jié)束發(fā)送的單元會(huì)不斷反復(fù)地重新發(fā)送此消息直到成功發(fā)送為止(錯(cuò)誤恢復(fù)功能)
(7)故障封閉
CAN 可以判斷出錯(cuò)誤的類型是總線上暫時(shí)的數(shù)據(jù)錯(cuò)誤(如外部噪聲等)還是持續(xù)的數(shù)據(jù)錯(cuò)誤(如單元內(nèi)部故障、驅(qū)動(dòng)器故障、斷線等)。由此功能,當(dāng)總線上發(fā)生持續(xù)數(shù)據(jù)錯(cuò)誤時(shí),可將引起此故障的單元從總線上隔離出去。
(8)連接
CAN 總線可連接的單元總數(shù)理論上是沒(méi)有限制的。但實(shí)際上可連接的單元數(shù)受總線上的時(shí)間延遲及電氣負(fù)載的限制。
3. 單總線:節(jié)省I/O資源,結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于總線擴(kuò)展維護(hù)。
4. SPI:可以當(dāng)作主機(jī)或從機(jī)工作、提供頻率可編程時(shí)鐘、發(fā)送結(jié)束中斷標(biāo)志、寫沖突保護(hù)、總線競(jìng)爭(zhēng)保護(hù)。
5. I2C:
(1)在硬件上,二線制的 I2C 串行總線使得各 IC 只需最簡(jiǎn)單的連接,而且總線接口都集成在 IC 中,不需另加總線接口電路。電路的簡(jiǎn)化省去了電路板上的大量走線,減少了電路板的
面積,提高了可靠性,降低了成本。在 I2C 總線上,各 IC 除了個(gè)別中斷引線外,相互之間沒(méi)有其他連線,用戶常用的 IC 基本上與系統(tǒng)電路無(wú)關(guān),故極易形成用戶自己的標(biāo)準(zhǔn)化、模塊化設(shè)計(jì)。
(2)I2C 總線還支持多主控( multi-mastering ),如果兩個(gè)或更多主機(jī)同時(shí)初始化數(shù)據(jù)傳輸,可以通過(guò)沖突檢測(cè)和仲裁防止數(shù)據(jù)被破壞。其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為
主機(jī)。一個(gè)主機(jī)能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然在任何時(shí)間點(diǎn)上只能有一個(gè)主機(jī)。
( 3)串行的 8 位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá) 100kbps ( S08AW系列的 I2C 模塊只
支持標(biāo)準(zhǔn)模式) ,快速模式下可達(dá) 400kbps ,高速模式下可達(dá) 3.4Mbps。
( 4)連接到相同總線的 IC 數(shù)量只受到總線最大電容( 400pf )的限制。但如果在總線中加上
82B715 總線遠(yuǎn)程驅(qū)動(dòng)器可以把總線電容限制擴(kuò)展十倍,傳輸距離可增加到 15m。
三、協(xié)議
1. 485:
RS485 僅僅規(guī)定了接受端和發(fā)送端的電氣特性,它沒(méi)有規(guī)定或推薦任何數(shù)據(jù)協(xié)議
2. CAN:
CAN 協(xié)議經(jīng) ISO 標(biāo)準(zhǔn)化后有 ISO11898 標(biāo)準(zhǔn)和 ISO11519-2 標(biāo)準(zhǔn)兩種。 ISO11898 和 ISO11519-2 標(biāo)準(zhǔn)對(duì)于數(shù)據(jù) 鏈路層的定義相同,但物理層不同。
(1) 關(guān)于 ISO11898
? ? ? ? ISO11898 是通信速度為 125kbps-1Mbps 的 CAN 高速通信標(biāo)準(zhǔn)。 目前,ISO11898 追加新規(guī)約后,成為 ISO11898-1 新標(biāo)準(zhǔn)。
(2) 關(guān)于 ISO11519
? ? ? ? ISO11519 是通信速度為 125kbps 以下的 CAN 低速通信標(biāo)準(zhǔn)。ISO11519-2 是 ISO11519-1 追加新規(guī)約后的版本。
3. 單總線:
1.定義:主機(jī)和從機(jī)通過(guò)1根線進(jìn)行通信,在一條總線上可掛接的從器件數(shù)量幾乎不受限制。
2.特點(diǎn):這是由達(dá)拉斯半導(dǎo)體公司推出的一項(xiàng)通信技術(shù)。它采用單根信號(hào)線,既可傳輸時(shí)鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的。
3.優(yōu)點(diǎn):?jiǎn)慰偩€技術(shù)具有線路簡(jiǎn)單,硬件開(kāi)銷少,成本低廉,便于總線擴(kuò)展和維護(hù)等。
4. SPI:
1.起始信號(hào)和終止信號(hào)
起始信號(hào):CS片選信號(hào)高電平變?yōu)榈碗娖?,?dāng)從機(jī)檢測(cè)到自己的片選拉低后,開(kāi)始與主機(jī)進(jìn)行通信。
終止信號(hào):CS信號(hào)由低電平變?yōu)楦唠娖?,結(jié)束和主機(jī)之間的通訊,本次數(shù)據(jù)交互結(jié)束。
2.數(shù)據(jù)的有效性
數(shù)據(jù)借助MOSI和MISO進(jìn)行傳輸,通過(guò)SCK時(shí)鐘線進(jìn)行數(shù)據(jù)的同步傳輸,數(shù)據(jù)在每一個(gè)SCK時(shí)鐘周期傳輸一位數(shù)據(jù)。數(shù)據(jù)的輸入和輸出是同時(shí)進(jìn)行的,發(fā)送一個(gè)數(shù)據(jù)也就會(huì)接受一個(gè)數(shù)據(jù)。在進(jìn)行雙向通信的時(shí)候,一邊采用的是“MSB先行”。
3.時(shí)鐘的相位和極性
SPI_CR寄存器的時(shí)鐘和極性,出現(xiàn)了四種組合形式。
時(shí)鐘極性【CPOL】:控制的是設(shè)備在空閑狀態(tài)下的電平狀態(tài)
CPOL為1:空閑狀態(tài)為高電平 ? ? ? ? ? CPOL為0:空閑狀態(tài)為低電平
時(shí)鐘相位【CPHA】:控制采樣信號(hào)的邊沿
CPHA = 1:在SCK時(shí)鐘的第二個(gè)邊沿進(jìn)行采樣,同時(shí)數(shù)據(jù)要保持穩(wěn)定,與此同時(shí),則在第一個(gè)邊沿進(jìn)行數(shù)據(jù)的轉(zhuǎn)換,準(zhǔn)備下一次的數(shù)據(jù)傳輸。
CPHA = 0:在SCK時(shí)鐘的第一個(gè)邊沿進(jìn)行采樣,同時(shí)數(shù)據(jù)要保持穩(wěn)定,與此同時(shí),則在第二個(gè)邊沿進(jìn)行數(shù)據(jù)的轉(zhuǎn)換,準(zhǔn)備下一次的數(shù)據(jù)傳輸。
5. I2C:
?I2C通信屬于串行通信,具有兩根串行信號(hào)線:數(shù)據(jù)線(SDA),時(shí)鐘線(SCL)。如下圖所示,主控制器與從器件(一個(gè)或多個(gè))都通過(guò)兩根信號(hào)線連接,信號(hào)線上主機(jī)和從機(jī)都可以扮演發(fā)送器和接收器的角色。為確保傳輸過(guò)程的指向準(zhǔn)確性,每個(gè)接到I2C總線上的器件都有唯一的地址(7位從器件專用地址碼),可實(shí)現(xiàn)制定從機(jī)的定向傳輸與群發(fā)傳輸。
四、使用方法
1. 485:
RS485 推薦使用在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)中,線型,總線型,不能是星型,環(huán)型網(wǎng)絡(luò)。
理想情況下 RS485需要 2 個(gè)匹配電阻,其阻值要求等于傳輸電纜的特性阻抗(一般 120Ω)
沒(méi)有特性阻抗的話,當(dāng)所有的設(shè)備都靜止或者沒(méi)有能量的時(shí)候就會(huì)產(chǎn)生噪聲,而且線移需要雙端的電壓差
沒(méi)有終接電阻的話,會(huì)使得較快速的發(fā)送端產(chǎn)生多個(gè)數(shù)據(jù)信號(hào)的邊緣,導(dǎo)致數(shù)據(jù)傳輸出錯(cuò)
2. CAN:
Linux Socket can使用方法_jirryzhang的博客-CSDN博客
3. 單總線:
1.單總線命令序列包括
(1)第一步:初始化
1)初始化包括主機(jī)發(fā)送復(fù)位脈沖和從機(jī)發(fā)送應(yīng)答脈沖兩部分組成;
2)主機(jī) 發(fā)送復(fù)位脈沖時(shí)拉低總線至少480us;
3)從機(jī)響應(yīng)應(yīng)答脈沖時(shí),檢測(cè)到總線被釋放,并由5k上拉電阻拉高,從機(jī)檢測(cè)到上升沿15-60us,拉低60-240us產(chǎn)生響應(yīng)脈沖;
(2)第二步:ROM命令(跟隨需要交換的數(shù)據(jù))
(3)第三步:功能命令(跟隨需要交換的數(shù)據(jù))
2.主機(jī)每次訪問(wèn)單總線設(shè)備,嚴(yán)格按照此命令序列,當(dāng)執(zhí)行搜索ROM命令()和報(bào)警搜索命令時(shí),第三步不能再執(zhí)行,需要回到第一步。
3.單總線寫數(shù)據(jù)包括向單總線器件寫‘0’和寫‘1’;
(1)寫‘0’,主機(jī)在拉低總線后,保持低電平至少60us即可;
(2)寫’1’,主機(jī)在拉低總線后,在15us內(nèi)釋放總線,由上拉電阻拉高電平;
4.單總線讀數(shù)據(jù)
(1)主機(jī)發(fā)送讀數(shù)據(jù)命令后,發(fā)送讀請(qǐng)求(拉低總線至少1us,然后釋放),總線被上拉電阻拉高,從機(jī)此時(shí)發(fā)送1,則保持總線為高電平,若發(fā)送0,則拉低總線;
(2)注意:讀取的每一個(gè)0 或者1,都是在主機(jī)發(fā)送讀請(qǐng)求(拉低總線至少1us,然后釋放)之后,上拉電阻拉高總線,15us內(nèi),從機(jī)改變總線狀態(tài),拉低為0,拉高為1,自主機(jī)發(fā)送讀請(qǐng)求開(kāi)始計(jì)時(shí)15us內(nèi)從機(jī)把0或者1放到總線上,15us后釋放總線。每讀一個(gè)0或者1,至少需要60us;
4. SPI:
SPI 是英語(yǔ) Serial Peripheral interface 的縮寫,顧名思義就是串行外圍設(shè)備接口。
SPI接口一般使用 4 條線通信:
MISO 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。
MOSI 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。
SCLK 時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。
CS 從設(shè)備片選信號(hào),由主設(shè)備控制。
核心:主機(jī)內(nèi)容與從機(jī)內(nèi)容互換
CPOL:時(shí)鐘極性選擇,為0時(shí)SPI總線空閑為低電平,為1時(shí)SPI總線空閑為高電平
CPHA:時(shí)鐘相位選擇,為0時(shí)在SCK第一個(gè)跳變沿采樣,為1時(shí)在SCK第二個(gè)跳變沿采樣
SPI 總線四種工作方式 SPI 模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串
行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒(méi)有重大的影響。如果
CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果 CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電
平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果
CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果 CPHA=1,在串
行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI 主模塊和與之通信的外設(shè)備時(shí)鐘
相位和極性應(yīng)該一致。
一般使用低電平上升沿(CPOL=0,CPHA=0)或者高電平上升沿(CPOL=1,CPHA=1)讀取數(shù)據(jù)。
5. I2C:
I2C總線包括SCL,SDA 兩根信號(hào)線,其中SCL是時(shí)鐘線,SDA是數(shù)據(jù)線。
對(duì)于I2C總線的操作,主要有以下幾個(gè)命令:
-
開(kāi)始命令:
I2C總線開(kāi)始的操作過(guò)程是通過(guò)SCL為高的時(shí)候SDA有個(gè)下降沿的過(guò)程; -
停止命令:
I2C停止的的操作過(guò)程是通過(guò)SCL為高的時(shí)候SDA有個(gè)上升沿的過(guò)程; -
讀寫數(shù)據(jù)
I2C讀寫每一位數(shù)據(jù)都是在SCL為高的時(shí)候完成的,讀寫每一位數(shù)據(jù)的時(shí)候SCL都有一個(gè)高脈沖的過(guò)程,也就是說(shuō),在SCL為高的時(shí)候我們讀寫SDA的值,這意味著在SCL拉高之前,SDA必須為一穩(wěn)定的值,不然讀寫就不準(zhǔn)確; -
寫完從器件之后等待從器件的應(yīng)答:
在主器件完成對(duì)從器件的寫操作時(shí)候(每次會(huì)有一個(gè)字節(jié)的數(shù)據(jù)),主器件會(huì)等待從器件發(fā)送指示信號(hào),這個(gè)指示信號(hào)是說(shuō)從器件已經(jīng)接受到了主器件的數(shù)據(jù),這個(gè)回應(yīng)ACK是個(gè)低電平脈沖。并且這是由從器件的硬件來(lái)完成的,不需要主器件來(lái)軟件操作,只需要等待;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-693254.html -
主器件讀完數(shù)據(jù)后向從器件發(fā)送應(yīng)答信號(hào):
這其實(shí)包括兩種情況,一種是主器件讀完后還要繼續(xù)讀就要發(fā)送一個(gè)繼續(xù)讀的信號(hào)(其實(shí)就是發(fā)送0),另一種就是不再繼續(xù)讀了,就要發(fā)送停止讀信號(hào)(其實(shí)就是發(fā)送1)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-693254.html
五、通信方式
1. 485:半雙工,多點(diǎn)通信
2. CAN:CAN總線為一種多主總線,即總線上的每一個(gè)節(jié)點(diǎn)設(shè)備均可充當(dāng)為主機(jī),而且每一個(gè)節(jié)點(diǎn)設(shè)備之間也都可以互相進(jìn)行通信。
3. 單總線:采用單根信號(hào)線,既傳輸時(shí)鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的
4. SPI:全雙工,同步的通信總線
5. I2C:全雙工,需要兩根線即可在連接于總線上的器件之間傳送信息。
到了這里,關(guān)于485、CAN、單總線、SPI、I2C的概念,特點(diǎn),協(xié)議,使用方法及通信方式,還有它們之間的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!