欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

淺談I2C總線

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月16日   【字體:

I2C總線概述

I2C(InterIntegrated Circuit)總線是一種由PHILIPS公司在80年代開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線最主要的優(yōu)點(diǎn)是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。總線的長度可高達(dá)25英尺,并且能夠以10Kbps的最大傳輸速率支持40個(gè)組件。I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控(multimastering),其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然,在任何時(shí)間點(diǎn)上只能有一個(gè)主控。

I2C總線的構(gòu)成及信號(hào)類型
I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在ICIC之間進(jìn)行雙向傳送,最高傳送速率100kbps。對(duì)于并聯(lián)在一條總線上的每個(gè)IC都有唯一的地址。
I2C總線有兩根信號(hào)線,一根為SDA(數(shù)據(jù)線),一根為SCL(時(shí)鐘線)時(shí)鐘信號(hào)是由主控器件產(chǎn)生。I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào),它們分別是:開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。
開始信號(hào):SCL為高電平時(shí),SDA由高電平轉(zhuǎn)變?yōu)榈碗娖教儯硎鹃_始通信。
結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平轉(zhuǎn)變?yōu)楦唠娖教儯Y(jié)束結(jié)束通信。
  應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到一個(gè)字節(jié)數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。
  開始和結(jié)束信號(hào)都是由主機(jī)發(fā)出的,應(yīng)答信號(hào)是由從機(jī)發(fā)出的,開始和結(jié)束通信過程的時(shí)序如圖1所示。
 


1
  這些信號(hào)中,起始信號(hào)是必需的,結(jié)束信號(hào)和應(yīng)答信號(hào),都可以不要。

I2C總線操作時(shí)序
I2C總線必須由主機(jī)(通常為微控制器)控制,主機(jī)產(chǎn)生串行時(shí)鐘(SCL)控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來表示起始和停止條件。
控制字節(jié)
  在通信開始信號(hào)之后,發(fā)送的必須是器件的控制字節(jié),其中高四位為器件類型識(shí)別符,接著三位為片選,最后一位為讀寫位,當(dāng)為1時(shí)為讀操作,為0時(shí)為寫操作。該字節(jié)前七位表示器件的地址。


2
(注:SCL線上1~7位為7位接收器件地址,第8位為讀寫位,第9位為ACK應(yīng)答位,緊接著的為第一個(gè)數(shù)據(jù)字節(jié),然后是一位應(yīng)答位,后面繼續(xù)第2個(gè)數(shù)據(jù)字節(jié)。)

I2C總線的數(shù)據(jù)傳送
A、主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過程中不變。
 


有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。
A表示應(yīng)答,/A表示非應(yīng)答(高電平)。S表示起始信號(hào),P表示終止信號(hào)。
B、主機(jī)在第一個(gè)字節(jié)(尋址字節(jié))后,立即由從機(jī)讀數(shù)據(jù)。


在從機(jī)產(chǎn)生響應(yīng)時(shí),主機(jī)從發(fā)送變成接收,從機(jī)從接收變成發(fā)送。之后,數(shù)據(jù)由從機(jī)發(fā)送,主機(jī)接收,每個(gè)應(yīng)答由主機(jī)產(chǎn)生,時(shí)鐘信號(hào)仍由主機(jī)產(chǎn)生。若主機(jī)要終止本次傳輸,則發(fā)送一個(gè)非應(yīng)答信號(hào)
(A),接著主機(jī)產(chǎn)生停止條件。
C、在傳送過程中,當(dāng)需要改變傳送方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反相
 


I2C
總線仲裁與時(shí)鐘發(fā)生
在多主的通信系統(tǒng)中。總線上有多個(gè)節(jié)點(diǎn),它們都有自己的尋址地址,可以作為從節(jié)點(diǎn)被別的節(jié)點(diǎn)訪問,同時(shí)它們都可以作為主節(jié)點(diǎn)向其它的節(jié)點(diǎn)發(fā)送控制字節(jié)和傳送數(shù)據(jù)。但是如果有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)都向總線上發(fā)送啟動(dòng)信號(hào)并開始傳送數(shù)據(jù),這樣就形成了沖突。要解決這種沖突,就要進(jìn)行仲裁的判決,這就是I2C總線上的仲裁。
I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁。
A、SCL線的同步(時(shí)鐘同步)
SCL同步是由于總線具有線“與”的邏輯功能,即只要有一個(gè)節(jié)點(diǎn)發(fā)送低電平時(shí),總線上就表現(xiàn)為低電平。當(dāng)所有的節(jié)點(diǎn)都發(fā)送高電平時(shí),總線才能表現(xiàn)為高電平。
 


3

由于線“與”邏輯功能的原理,當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送時(shí)鐘信號(hào)時(shí),在總線上表現(xiàn)的是統(tǒng)一的時(shí)鐘信號(hào)。這就是SCL的同步原理。
B、SDA仲裁
SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。
節(jié)點(diǎn)在發(fā)送1位數(shù)據(jù)后,比較總線上所呈現(xiàn)的數(shù)據(jù)與自己發(fā)送的是否一致。是,繼續(xù)發(fā)送;否則,退出競爭。
SDA線的仲裁可以保證I2C總線系統(tǒng)在多個(gè)主節(jié)點(diǎn)同時(shí)企圖控制總線時(shí)通信正常進(jìn)行并且數(shù)據(jù)不丟失。總線系統(tǒng)通過仲裁只允許一個(gè)主節(jié)點(diǎn)可以繼續(xù)占據(jù)總線。
C、仲裁過程
 


4

DATA1DATA2分別是主節(jié)點(diǎn)向總線所發(fā)送的數(shù)據(jù)信號(hào);
SDA為總線上所呈現(xiàn)的數(shù)據(jù)信號(hào),SCL是總線上所呈現(xiàn)的時(shí)鐘信號(hào)。
當(dāng)主節(jié)點(diǎn)12同時(shí)發(fā)送起始信號(hào)時(shí),兩個(gè)主節(jié)點(diǎn)都發(fā)送了高電平信號(hào)。這時(shí)總線上呈現(xiàn)的信號(hào)為高電平,兩個(gè)主節(jié)點(diǎn)都檢測到總線上的信號(hào)與自己發(fā)送的信號(hào)相同,繼續(xù)發(fā)送數(shù)據(jù)。
2個(gè)時(shí)鐘周期,2個(gè)主節(jié)點(diǎn)都發(fā)送低電平信號(hào),在總線上呈現(xiàn)的信號(hào)為低電平,仍繼續(xù)發(fā)送數(shù)據(jù)。
在第3個(gè)時(shí)鐘周期,主節(jié)點(diǎn)1發(fā)送高電平信號(hào),而主節(jié)點(diǎn)2發(fā)送低電平信號(hào)。根據(jù)總線的線“與”的邏輯功能,總線上的信號(hào)為低電平,這時(shí)主節(jié)點(diǎn)1檢測到總線上的數(shù)據(jù)和自己所發(fā)送的數(shù)據(jù)不一樣,就斷開數(shù)據(jù)的輸出級(jí),轉(zhuǎn)為從機(jī)接收狀態(tài)。
這樣主節(jié)點(diǎn)2就贏得了總線,而且數(shù)據(jù)沒有丟失,即總線的數(shù)據(jù)與主節(jié)點(diǎn)2所發(fā)送的數(shù)據(jù)一樣,而主節(jié)點(diǎn)1在轉(zhuǎn)為從節(jié)點(diǎn)后繼續(xù)接收數(shù)據(jù),同樣也沒有丟掉SDA線上的數(shù)據(jù)。因此在仲裁過程中數(shù)據(jù)沒有丟失。

I2C總線注意點(diǎn)
1.進(jìn)行數(shù)據(jù)傳送時(shí),在SCL為高電平期間,SDA線上電平必須保持穩(wěn)定,只有SCL為低時(shí),才允許SDA線上電平改變狀態(tài)。并且每個(gè)字節(jié)傳送時(shí)都是高位在前。
2.對(duì)于應(yīng)答信號(hào),ACK=0時(shí)為有效應(yīng)答位,說明從機(jī)已經(jīng)成功接收到該字節(jié),若為1則說明接受不成功。
3.如果從機(jī)需要延遲下一個(gè)數(shù)據(jù)字節(jié)開始傳送的時(shí)間,可以通過把SCL電平拉低并保持來強(qiáng)制主機(jī)進(jìn)入等待狀態(tài)。
4.機(jī)完成一次通信后還想繼續(xù)占用總線在進(jìn)行一次通信,而又不釋放總線,就要利用重啟動(dòng)信號(hào)Sr。它既作為前一次數(shù)據(jù)傳輸?shù)慕Y(jié)束,又作為后一次傳輸?shù)拈_始。
5.總線沖突時(shí),按“低電平優(yōu)先”的仲裁原則,把總線判給在數(shù)據(jù)線上先發(fā)送低電平的主器件。
6.在特殊情況下,若需禁止所有發(fā)生在I2C總線上的通信,可采用封鎖或關(guān)閉總線,具體操作為在總線上的任一器件將SCL鎖定在低電平即可。
7.SDA仲裁和SCL時(shí)鐘同步處理過程沒有先后關(guān)系,而是同時(shí)進(jìn)行的。
關(guān)閉窗口