I2C 學習

更新於 發佈於 閱讀時間約 2 分鐘

簡介

  I2C (Inter - Intertraed circuit)內部整合電路,顧名思義就是主要控制短距離的內部裝置,而不適用於長距離的傳輸,I2C有不同的速度模式通常都是雙向傳輸,如標準模式100 Kbit/s、低速模式 10 Kbit/s、快速模式400Kbit/s、高速模式3.4Mbit/s。但還是有單向輸出的超快速模式5Mbit/s。
  其bus的傳輸主要是SDA、SCL兩條線傳輸,以open drain 的方式,決定0、1準位,同時也代表有wire-AND的情況。
  • SDA:序列資料,傳輸資料(data)、位址(address)。
  • SCL:序列時脈,傳輸時脈(clock)訊號。

資料傳輸規則

  I2C有master-slave的概念,所以在討論傳輸的方式時,應該要先釐清此點,每一個裝置都有獨立的位址(address),master、slave可發送也可以接收。
  • Master:主動與slave溝通,並且可以控制SCL。
  • Slave:當被master定址時,做出回應。
 以SDA、SCL的變化為主體,傳輸時主要有四種模式:(1:高準位、0:低準位)
  1. START:當SCL為1時,SDA由1->0。
  2. SDA資料變化:SCL為0時。(SDA不一定要變化)
  3. 傳送/接收資料:SCL為1時。
  4. STOP:當SCL為1時,SDA由0->1。
  當SCL在低準位的時候,SDA可以變換傳輸資料;當SCL在高準位的時候,SDA需要保持在穩定的狀態。
寫入write(是由左到右序列輸入,並非同時)
寫入示意圖
  一開始會SDA、SCL都會是1,此時master傳送,SDA由1到0變換,對slave表示傳送開始,之後,便開始傳送位址(address),用以定址要接收資料的裝置,共有7 bits,再來是確定write/read(write為0,read為1) 1 bit,然後要確認資料是否有誤,會由slave傳送資料(ACK是用來確認master到slave的傳輸是否有誤,正常的話會由slave傳回0,應用到open drain的 wire-AND原理),最後才開始傳送資料(data),傳送完一樣需要確認ACK,只要不傳送STOP就會不斷的傳送,或著資料太多slave裝不下,slave就會傳送NACK停止。
讀入read(是由左到右序列輸入,並非同時)
讀入示意圖
  前面基本上跟write一致,主要從W/R開始變化,當slave傳送ok的訊息後(ACK = 0),資料會由slave傳給master,最後ACK會由master傳送1表示正常,如果要不斷的繼續寫則由master傳送資料的ACK要等於1,只有傳送STOP時,ACK才會是0。

   
avatar-img
1會員
2內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
題目要求計算兩個二進位字串的相加,並以字串的形式輸出。 字串內容只包含'0'或'1'字元。 複雜度分析 時間複雜度為O(m+n),空間複雜度為O(m+n)。
Thumbnail
數位IC裡我們關注的都是0或1, 大家都知道電腦是0101在做二進位的運算, 在晶片裡又是怎麼做到的? 實際上我們在設計晶片時,會給他一個VDD跟GND, VDD-GND給的是預期的Driving volatge, 像是5V或9V 以5V為例 0或1物理上就是目前的電壓靠近0V或5
IC設計流程大致如下 每個步驟都是必經過程,走完整個過程後輸出一版real chip |-----------------------| | 定SPEC | --- 決定 Function/clk period/製程liberary .
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
本文介紹了抽水馬達和繼電器的工作原理,以及如何與Arduino搭配使用。繼電器的定義、結構、和工作原理,以及抽水馬達的定義、結構、和工作原理都有詳細說明。此外,還介紹了串聯和並聯的關係,並提供了抽水馬達模組的程式碼。
使用ADC時必須注意 MCU上會有Vref腳位,這兩個腳位必須接上VDD及GND。 這兩個腳位是專門給ADC使用的,ADC在轉換時會需要參考電壓來轉換成digital。公式如下 ​digital = (Vin / Vref) * 2^12 digital:是電腦讀取到的數值。 Vin:輸
Boot0 與 Boot1 是搭配使用。兩者都是MCU上的腳位,視情況輸入HIGH or LOW,會有不同功能 Boot0 = LOW 時,直接進入主程式,也就是會直接運行燒入MCU的程式碼。(boot1= 0 or 1都一樣)。 Boot0 = HIGH且Boot1=1,會進入bootload
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
題目要求計算兩個二進位字串的相加,並以字串的形式輸出。 字串內容只包含'0'或'1'字元。 複雜度分析 時間複雜度為O(m+n),空間複雜度為O(m+n)。
Thumbnail
數位IC裡我們關注的都是0或1, 大家都知道電腦是0101在做二進位的運算, 在晶片裡又是怎麼做到的? 實際上我們在設計晶片時,會給他一個VDD跟GND, VDD-GND給的是預期的Driving volatge, 像是5V或9V 以5V為例 0或1物理上就是目前的電壓靠近0V或5
IC設計流程大致如下 每個步驟都是必經過程,走完整個過程後輸出一版real chip |-----------------------| | 定SPEC | --- 決定 Function/clk period/製程liberary .
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
本文介紹了抽水馬達和繼電器的工作原理,以及如何與Arduino搭配使用。繼電器的定義、結構、和工作原理,以及抽水馬達的定義、結構、和工作原理都有詳細說明。此外,還介紹了串聯和並聯的關係,並提供了抽水馬達模組的程式碼。
使用ADC時必須注意 MCU上會有Vref腳位,這兩個腳位必須接上VDD及GND。 這兩個腳位是專門給ADC使用的,ADC在轉換時會需要參考電壓來轉換成digital。公式如下 ​digital = (Vin / Vref) * 2^12 digital:是電腦讀取到的數值。 Vin:輸
Boot0 與 Boot1 是搭配使用。兩者都是MCU上的腳位,視情況輸入HIGH or LOW,會有不同功能 Boot0 = LOW 時,直接進入主程式,也就是會直接運行燒入MCU的程式碼。(boot1= 0 or 1都一樣)。 Boot0 = HIGH且Boot1=1,會進入bootload