IIC通訊的若干問題

2021-09-12 21:58:36 字數 4292 閱讀 6360

iic 匯流排是一種序列資料匯流排,只有二根訊號線,通常我們為了方便把iic裝置分為主裝置和從裝置,基本上誰控制時鐘線(即控制scl的電平高低變換)誰就是主裝置。

為了避免匯流排訊號的混亂,要求各裝置連線到匯流排的輸出端時必須是漏極開路(od)輸出或集電極開路(oc)輸出。匯流排空閒時,因各裝置都是開漏輸出,上拉電阻rp使sda和scl線都保持高電平。任一裝置輸出的低電平都將使相應的匯流排訊號線變低,也就是說:各裝置的sda是「與」關係,scl也是「與」關係

裝置上的序列資料線sda介面電路應該是雙向的,輸出電路用於向匯流排上傳送資料,輸入電路用於接收匯流排上的資料。而序列時鐘線也應是雙向的,作為控制匯流排資料傳送的主機,一方面要通過scl輸出電路傳送時鐘訊號,另一方面還要檢測匯流排上的scl電平,以決定什麼時候傳送下乙個時鐘脈衝電平;作為接受主機命令的從機,要按匯流排上的scl訊號發出或接收sda上的訊號,也可以向scl線發出低電平訊號以延長匯流排時鐘訊號週期。

i2c 匯流排的資料傳送速率在標準工作方式下為100kbit/s,快速方式下最高傳送速率400kbit/s。

匯流排的執行(資料傳輸)由主機控制。所謂主機是指啟動資料的傳送(發出啟動訊號)、發出時鐘訊號以及傳送結束時發出停止訊號的裝置,通常主機都是微處理器。被主機尋訪的裝置稱為從機。為了進行通訊,每個接到i2c匯流排的裝置都有乙個唯一的位址,以便於主機尋訪。主機和從機的資料傳送,可以由主機傳送資料到從機,也可以由從機發到主機。凡是傳送資料到匯流排的裝置稱為傳送器,從匯流排上接收資料的裝置被稱為接受器。

在i2c匯流排傳輸過程中,將兩種特定的情況定義為開始和停止條件:

開始:當scl保持「高」時,sda由「高」變為「低」為開始條件。同時iic匯流排上的裝置檢測到這個開始訊號它就知道處理器要傳送資料了。

停止:當scl保持「高」且sda由「低」變為「高」時為停止條件。同時iic匯流排上的裝置檢測到這個停止訊號它就知道處理器已經結束了資料傳輸,我們就可以各忙各個的了,如休眠等。

開始和停止條件均由主控制器產生。使用硬體介面可以很容易地檢測到開始和停止條件。

sda線上的資料在時鐘「高」期間必須是穩定的,只有當scl線上的時鐘訊號為低時,資料線上的「高」或「低」狀態才可以改變。輸出到sda線上的每個位元組必須是8位,每次傳輸的位元組不受限制,但每個位元組必須要有乙個應答ack。iic裝置只在scl為高電平期間採集sda資料。

資料傳送具有應答是必須的。與應答對應的時鐘脈衝由主控制器產生,傳送器在應答期間必須下拉sda線。當定址的被控器件不能應答時,資料保持為高並使主控器產生停止條件而終止傳輸。簡單的講就是,主機發完8bit資料後就不再驅動匯流排了(sda引腳變輸入),而sda和scl硬體設計時都有上拉電阻,所以這時候sda變成高電平。那麼在第8個資料位,如果外接iic裝置能收到訊號的話接著在第9個週期把sda拉低,那麼處理器檢測到sda拉低就能知道外接iic裝置資料已經收到。

如果一接收器件在完成其他功能(如一內部中斷)前不能接收另一資料的完整位元組時,它可以保持時鐘線scl為低,以促使傳送器進入等待狀態;當接收器準備好接受資料的其它位元組並釋放時鐘scl後,資料傳輸繼續進行。

i2c匯流排在開始條件後的首位元組決定哪個被控器將被主控器選擇(例外的是「通用訪問」位址,它可以在所有期間定址)。當主控器輸出一位址時,系統中的每一器件都將開始條件後的前7位位址和自己的位址進行比較。如果相同,該器件即認為自己被主控器定址,而作為被控接收器或被控傳送器則取決於r/w位(0表示write,1表示read)

系統傳輸資料的過程如下:先由微控制器發出乙個啟始資料訊號,接著送出要訪問器件的7位位址資料,並等待被控器件的應答訊號。當收到應答訊號後,根據訪問要求進行相應的操作。如果是讀入資料,則資料線可一直設為輸入方式,中間不需要改變sda線的工作方式,每讀入乙個位元組均應依次檢測應答訊號;如果是輸出資料,則首先將sda設定為輸出方式,當傳送完乙個位元組後,需要改變sda線為輸入方式,此時讀入被控器件的應答訊號就完成了乙個位元組的傳送。當所有資料傳輸完畢後,應向sda發出乙個停止訊號,以結束該次資料傳輸。

ack表示i2c匯流排資料的成功傳輸。

當主裝置傳送資料時,主裝置傳送8位資料後,必須釋放sda:當從裝置確認時,從裝置將sda拉到gnd。

當主裝置讀取資料時,從裝置傳送8位資料後,釋放sda並等待主程序的ack,如果主裝置傳送ack而沒有傳送i2c停止的資訊,從裝置傳送下乙個資料。如果主裝置沒有傳送ack,則從裝置停止傳送資料並等待主裝置傳送的iic stop訊號。

每乙個時鐘脈衝傳送1位資料。該資料是在scl為高的狀態下取樣的,因此在scl為高的時間內,sda上的資料必須保持穩定。在scl為高期間,任何sda匯流排上的資料變化都將終止該次傳輸。sda上新的資料應該在scl為低的狀態下傳送。iic協議允許資料線傳送資料、指令和控制資訊。

每一次資料的傳輸都包括以下程式:開始條件、若干位元組的傳輸、結束條件。寫入sda匯流排的位元組必須是8位的,每個位元組後必須跟乙個ack訊號。

寫資料的過程,應該遵循以下步驟:

主裝置產生「start」條件

「start」條件由主裝置產生,在scl為高時,將sda從高電平拉到低電平。

主裝置傳送位址和資料方向位

主裝置發出所要操作的從裝置的位址(7位位址)和r/w資料方向位(1位)。

從裝置發出ack訊號

如果從裝置確認位址正確,那麼從裝置傳送ack訊號到sda匯流排。

主裝置傳送控制暫存器位址

主裝置向從裝置傳送所要寫入資料的控制暫存器的位址(8位)。

從裝置傳送ack訊號

主裝置寫入資料到暫存器

主裝置向被定址的暫存器傳送16位資料的高8位(最重要的位放最前面)。

從裝置傳送ack訊號

主裝置寫入資料到暫存器

主裝置向被定址的暫存器傳送16位資料的低8位。

從裝置傳送ack訊號

主裝置產生「stop」訊號

主裝置產生停止訊號,終止write cycle。

每乙個時鐘脈衝傳送1位資料。該資料是在scl為高的狀態下取樣的,因此在scl為高的時間內,sda上的資料必須保持穩定。在scl為高期間,任何sda匯流排上的資料變化都將終止該次傳輸。sda上新的資料應該在scl為低的狀態下傳送。iic協議允許資料線傳送資料、指令和控制資訊。

每一次資料的傳輸都包括以下程式:開始條件、若干位元組的傳輸、結束條件。寫入sda匯流排的位元組必須是8位的,每個位元組後必須跟乙個ack訊號。

讀資料的過程,應該遵循以下步驟:

主裝置產生「start」條件

「start」條件由主裝置產生,在scl為高時,將sda從高電平拉到低電平。

主裝置傳送位址和資料方向位

主裝置發出所要操作的從裝置的位址(7位位址)和r/w資料方向位(r/w=0)。

從裝置發出ack訊號

如果從裝置確認位址正確,那麼從裝置傳送ack訊號到sda匯流排。

主裝置傳送控制暫存器位址

主裝置向從裝置傳送所要寫入資料的控制暫存器的位址(8位)。

從裝置傳送ack訊號

主裝置動作:

方式1:主裝置傳送 「stop」訊號後緊接著發出「start」訊號;

方式2:主裝置再次發出「start」訊號,兩次連續的start訊號形成「repet start」訊號。

主裝置傳送位址和資料方向位

主裝置發出所要操作的從裝置的位址(7位位址)和r/w資料方向位(r/w=1)。

從裝置傳送ack訊號

從裝置傳送資料到匯流排

從裝置向匯流排傳送被定址的暫存器的16位資料的高8位。

主裝置傳送ack訊號

從裝置傳送資料到匯流排

從裝置向匯流排傳送被定址的暫存器的16位資料的低8位。

主裝置應答

如果主裝置發出ack應答訊號,那麼從裝置將暫存器位址加1,傳送下乙個暫存器的資料。

如果主裝置發出「stop」訊號,那麼資料讀取操作結束。

ceph若干問題

ceph health可以檢視ceph集群健康狀況 ceph df 可以檢視儲存的總使用率與各pool的使用率 ceph osd df 可以檢視各osd的使用率 ceph s 或 ceph status 可以檢視集群整體狀態 首先,我們要知道ceph的osd的位址 ceph osd tree可以檢視...

Ext grid 若干問題

1.grid.getselectionmodel getcount 獲得當前選中的行數 2.grid.getstore gettotalcount 獲得記錄總數 3.grid.getstore getcount 獲得當前分頁的記錄總數 4.5.獲得當前滑鼠單擊的單元格的value 6.new gri...

css樣式若干問題

web 技術開發的非常優秀的學習材料 1.優先順序問題 css優先順序包含四個級別 文內選擇符,id選擇符,class選擇符,元素選擇符 以及各級別出現的次數。根據這四個級別出現的次數計算得到css的優先 級。可以試試 s f 原文 2.多類選擇器 在上一節中,我們處理了 class 值中包含乙個詞...