IIC認識和理解

2021-09-19 05:01:40 字數 2120 閱讀 7668

有關於iic硬體部分,我這裡就不多做介紹了。

首先我們要知道什麼是iic協議?

簡單的說iic就一種主從架構的序列通訊匯流排協議,其實這句話如果你能理解到位的話,那麼對iic的理解也就差不多了。既然是一種通訊協議那麼必然有他的一些規則和特性在裡面,下面我們就先來談一談他們的特性和規則。

首先是iic的特性,這裡我一一舉例並結合我的理解加以說明。

1.最直觀的我們知道iic有兩條匯流排線路,分別是:一條序列資料線 (sda )一條序列時鐘線(scl)。關於資料線大家也很明白就是用來傳輸資料的,且這條資料線是雙向傳輸的,而scl時鐘線是由主機(一般指mcu)主動發起的方波訊號,請注意下主動一詞!主動表示了資料的傳送和接收都是由主機來控制,也就是說從機是不能主動通過sda匯流排返回資料的,它總是被主機訪問,這點我相信開發過iic協議的人應該能理解。這是iic匯流排的重要特性之一。

2.iic匯流排上的器件都有唯一的器件位址。器件位址也稱為從機位址,這個位址規定為7bit長度的位址,也有的是10bit的位址。圖下圖所示,後面的第 8bit 是資料的讀寫為,具體表示為:0 表示寫,1 表示讀。

這裡有個問題為什麼要是唯一的位址?因為在iic匯流排中是支援一主多從的,如果有器件位址是一樣的,那麼相同位址的從器件就都會響應請求,如此一來sda線的資料就會發生混亂和衝突。那麼我們如何知道或者設定乙個器件的iic位址呢?

接著往下看,iic上的每個器件都有乙個位址暫存器來確定自己的位址,絕大多數的器件是通過硬體來確定位址的。具體的意思就是每個器件(這裡的器件可以是溫濕度感測器,時鐘晶元等)在出廠的時候就已經設定好了他的iic器件位址,所以我們在一些器件的datasheet中可以看到他的iic位址已經是確定的了,使用者不可更改。還有的是確定了器件的前幾位,剩下幾位由使用者自行來決定,如下圖的a0,a1,a2就是設定位址的外部引腳,可以通過將引腳置高或置低來確定器件的最後幾位的位址,。

3.如果兩個或更多主機同時初始化資料傳輸可以通過衝突檢測和仲裁防止資料被破壞。iic可以實現多主機通訊,但實際上我也沒使用過。

下面開始說說iic的規則:

開始和結束的條件:

前面說過sda 和 scl 都是雙向線路,通過電流源或者上拉電阻連線到乙個正向電壓(通常是vdd)當匯流排空閒時,兩條線都是高電平。開始和終止條件如上圖,所有的傳輸都由乙個 start(s)開始,有乙個 stop(p)終止.start 條件是當 scl 高時 sda 從高到低;stop 條件是 scl 高時 sda 從低到高。這裡我想再次強調下,開始條件和終止條件一直都是由主機產生的。在開始條件後匯流排就處於忙狀態了,而在停止條件隔上乙個固定時間後匯流排就會處於空閒狀態。但如果沒有終止條件產生,而是乙個重複產生的開始條件,那匯流排依舊是忙的狀態。

資料的有效性:

資料的有效性其實就是資料的取樣。通過上圖我們可以看出,scl是乙個乙個類似方波的訊號,當scl開始從低電平變為高電平時代表資料要開始取樣了,在scl高電平穩定時這個時候如果sda是高電平代表資料就是1,是低電平代表資料就是0,以此類推完成8個bit的傳送。所以我們經常說在時鐘為高電平期間 sda 線上的資料為什麼要保持穩定的原因。當scl從高電平變化到為低電平期間就把1bit的資料傳輸了出去,這時scl為低電平,資料線sda才可以改變高低電平狀態準備下乙個要傳輸的資料,所以每個資料位的傳輸都需要乙個時鐘的產生。

ack和nack

在我們傳送完乙個位元組過後,規定從機要給主機乙個ack訊號,這個訊號告訴主機已經成功接收資料並準備好接收下乙個資料,如下圖所示:在scl為高電平時,接受裝置將sda拉為低電平(即主機採到bit為0)表示傳輸正確,產生應答,否則為非應答。

如果從機產生了非應答,那麼就不再接受資料了,所以一般在產生nack的後面是緊跟stop訊號的。

理解和認識udev

因 為本身從事儲存行業,在工作中多次碰到使用者有這樣的要求 我的linux系統中原來有一塊scsi硬碟,系統分配的裝置檔案是 dev sda。現在新增 加了乙個外接的磁碟陣列,通過scsi卡連線。但接上這個磁碟陣列後,dev sda變成了磁碟陣列的硬碟了,原來內建的scsi硬碟變成了 dev sdb...

IIC匯流排理解與拓展

iic匯流排的基礎理解與拓展 常用序列匯流排 uart,1 wire,iic,spi uart 一條資料輸入線,一條資料輸出線,非同步序列通訊 iic 一條時鐘線,一條資料線,同步 外同步 序列通訊,spi 一條時鐘線,一條資料輸入線,一條資料輸出線 同步 外同步 序列通訊 1 wire 單線匯流排...

談談對於IIc的理解

什麼是iic iic匯流排是一種序列 半雙工匯流排通訊協議。它有兩根雙向訊號線 時鐘線scl和資料線sda 時鐘線使通訊雙方的時鐘同步,資料線用來傳輸資料。主要用於近距離低速的晶元之間的通訊,成百上千公尺遠距離的通訊不行,抗干擾能力差,它的成本低,結構簡單。傳輸資料的大概流程 1 主機傳送起始訊號啟...