一、i2c簡介:
1、i2c匯流排是
philip
公司開發的,雙向二線制同步序列匯流排,它只需要兩根線即可,單主機多從機。
2、i2c兩根線分別為:序列時鐘線
scl和序列資料線
sda,
scl由主機發出。
3、每個連線到匯流排上的器件都有乙個位址,位址由器件內部硬體電路和外部位址引腳共同決定,避免了片選線的連線方法。
4、每個器件既可以作為傳送器,也可以作為接收器。
5、同步時鐘scl可以作為停止或重新啟動序列口傳送的握手訊號。
6、通訊速率可以為100kb/s,
400kb/s
,3.4mb/s
二、基本結構:
每個器件都有唯一的位址,器件兩兩之間(指主機與從機)都可以盡行資訊的傳送。圖中mcu為主機,當某個器件向匯流排上傳送資訊時,稱為傳送器,當器件接收資訊時,又成為接收器。傳送的資訊中包含目標器件的位址碼,器件的單元位址和資料3部分。
主機:一般指的是微控制器(如微控制器),主要負責初始化匯流排資料,並產生時鐘訊號scl。
從機:一般指的是不可程式設計元件(如感測器,lcd,儲存晶元),被主機定址的器件
資料:以位元組為單位。
三、i2c資訊傳送過程:
時序圖:
1、分析時序圖:
(1)由時序圖可知,開始訊號:在
scl為高電平期間,
sda由高電平向低電平跳變
結束訊號:在scl為低電平期間,
sda由低電平向高電平跳變
(2)傳送資料時,sda電平(資料)的變化,必須在
scl低電平期間,圖中第乙個箭頭所示。
(3)當傳送了八位資料(1位元組)後,必須要有乙個應答訊號,應答訊號為低電平,應答時
scl為高電平
(4)資料的真正的傳送並不是在sda上寫上0或
1,而是在
sda上資料後,
scl由低電平向高電平跳變時,才真正的傳送出去(接收進來)。
總結:在scl低電平時寫入(改變)
sda資料,之後拉高
scl,
sda上的資料就傳送出去了
2、資料傳送時一些規定:
(1)先傳送高位,後傳送低位
器件型別碼
(高4位) 片選
(3位)
讀寫操作
(1位)
器件型別碼:指的是目標器件的型別(如eprom一般為
1010)
片選:用於指定同類器件接到匯流排上的個數,最多為8個
讀寫操作:1為讀(接收從機傳送),
0為寫(向從機傳送)
(3)傳輸:主機先傳送起始訊號,緊接著傳送器件位址,來鎖定目標器件,並且根據位址的最後一位來告訴從機是讀它還是寫它,隨後傳送目標器件的單元位址,告訴從機主讀或寫的是從機的哪個單元,之後才是資料
四、i2c匯流排讀寫操作: 讀:
(1)從當前位址讀(已經知道了器件的單元位址)
start
控制碼r/w=1
ack資料1
ack資料2
ackstop
(2)從指定單元讀(一般用這種)
start
控制碼r/w=0
ack單元位址
ackstart
控制碼r/w=1
ack資料1
ack資料2
ackstop
寫:從指定單元寫:
start
控制碼r/w=0
ack單元位址
ack資料1
ack資料2
ackstop
五、如何程式設計:
1、程式設計時主要依據時序圖和上面
3個表來進行的編寫的
2、明確線與關係:當掛在匯流排上的單元中有乙個拉低了資料線
sda,則匯流排
sda呈現低電平,也就是說主從之間在資料傳輸時,若主機想釋放匯流排,則
sda=1
,此時的從機發出的資料才有效。
3、主機傳送資料時,每傳送乙個位元組,必須有應答訊號,應答訊號相對的時鐘由主器件產生,傳送器必須在這一時刻釋放資料線(
sda=1
),以便接收器在這一時刻傳送應答訊號。
4、主機接收資料時,從器件傳送資料,主器件接收到
1位元組資料後,也要傳送乙個低電平的應答訊號,從器件接收到後,繼續傳送下乙個資料,如主器件沒有傳送應答(即傳送的為高電平),則從器件結束資料的傳送,且等待主器件的結束訊號,然後結束操作。
5、程式設計時將時序圖分割成若干塊,再根據這些塊來編寫相應的函式,可以分為:
起始段,傳送乙個位元組段,應答段,接收乙個位元組段,結束段
I2C序列匯流排協議
i2c 序列匯流排協議 一 i2c 序列匯流排概述 i2c匯流排是 philips 公司推出的一種序列資訊匯流排,用於連線微控制器及外圍裝置,是具備多主系統所需的包括匯流排裁決和高低速器件同步功能的高效能序列匯流排。i2c匯流排只有兩根雙向訊號線,一根是資料線 sda,一根是時鐘線 scl。微控制器...
藍橋杯序列匯流排I2C
九層妖塔 起於壘土 二 微控制器模擬i2c匯流排通訊 兩根線 序列資料sda serial data 和序列時鐘scl serial clock 三種模式 標準模式 100kbps 快速模式 400kbps 高速模式 3.4mbps 定址方式 7位和10位 cpu發出的控制訊號分為位址碼和資料碼兩部...
i2c匯流排時序
一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...