TWI AVR Register

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

基本資料

2021年10月10日 下午 04:44

簡介
I² C(Inter-Integrated Circuit)是內部整合電路的稱呼,是一種串列通訊匯流排,由Philips公司在1980年代為
了讓主機板、手機及嵌入式系統用以連接低速周邊裝置而發展,主要應用在board-to-board,它的設計並不能
應用到長距離裝置的通訊。不過,I2C bus 可以被應用在各種控制架構上,如系統管理匯流排、電源管理匯流
排、智慧平台管理介面、顯示數據通道、先進電信運算架構

I² C的參考設計使用一個7位元長度的位址空間但保留了16個位址,所以在一組匯流排最多可和112個節點通訊。
常見的I² C匯流排依傳輸速率的不同而有不同的模式:標準模式(100 Kbit/s)、低速模式(10 Kbit/s),但時
脈頻率可被允許下降至零,這代表可以暫停通訊。而新一代的I² C匯流排可以和更多的節點(支援10位元長度的
位址空間)以更快的速率通訊:快速模式(400 Kbit/s)、高速模式(3.4 Mbit/s)。

I2C bus
##I2C 使用兩條雙向 open-drain Line:
1.SDA : Serial Data Line, holds Data or address signal
2.SCL : Serial Clock Line, holds Clock signal
3.導通時是低電位,不導通時float,所以利用電阻(pullup resistor)將電位拉高。常用電壓為 +5 V or +3.3 V。
4.IO 必須是 open drain (or open collector in TTL)
5.bus 為 wired-AND configuration
6.SDA must be stable when SCL is high, excluding Start/Stop condition

##pullup resistor :

1.要根據bus總電容及rising time來選用pullup resistor的大小

##I2C術語定義

1.Transmitter : the device which sends data to the bus


2.Receiver : the device which receives data from the bus
3.Master : the device which initiates a transfer, generates clock signals and terminates a transfer
4.Slave : the device addressed by a master

##Master & Slave 模式 :

1.Master node — 生成時鐘並啟動與從站通信的節點


2.Slave node — 接收時鐘並在Master尋址時做出響應的節點

##I2C data mode :

1.master transmit — master結點傳送資料到Slave


2.master receive — master結點從Slave接受資料
3.slave transmit — slave結點傳送資料到Master
4.slave receive — slave結點從Master接收資料

##I2C資料傳輸

1.數據傳輸啟動,SDA 被拉低而 SCL 保持高電平。


2.SDA 設置第 1 個數據位電平,同時保持 SCL 為低。
3.當第一位的 SCL 上升(綠色)時,數據被採樣(接收)。
4.這個過程重複,SCL 為"0"時 SDA 轉換,SCL 為高時讀取數據(B2,Bn)。
5.當 SDA 被拉高而 SCL 為高電平時,會發出停止位 (P) 的信號。

I2C基礎資料 第 1 頁
I2C基礎資料 第 2 頁
TWCR (TWI Control Register)
2021年10月8日 下午 07:37

Bit7 - TWINT : TWI Interrupt Flag


1.該旗標監控TWI 的當前狀態
2.TWINT 在 TWI 完成當前工作時由硬件設置
3.SCL為"0",直到TWINT被設置
4.在開始對 TWI 進行任何操作之前,必須由軟件清除 TWINT 標誌。
5.寫入1來清除

Bit6 - TWEA : TWI Enable Acknowledge Bit


1.用於生成ACK脈波
2.如果 TWEA 位寫入 1,則生成 ACK 脈衝
3.如果 TWEA 位為0,該設備可以虛擬地暫時與兩線串行總線斷開連接。
4.當基於接收到 ACK(TWEA "1")或 NOT ACK(TWEA "0")脈衝傳輸數據時,TWI 狀態值是不同的

Bit5 - TWSTA:TWI START Condition Bit


1.寫入1,變成主設備
2.他檢查總線是否可以使用,然後在總線上生成啟動
3.如果總現在忙碌,TWI會等待,直到檢測到停止,然後生成一個新的開始,並且聲稱為主設備

Bit4 - TWSTO : TWI STOP Condition Bit


1.主機寫入1,會在兩條線上傳送停止
2.當執行停止時TWSTO會自動清0

Bit3 - TWWC : TWI Write Collision Flag


1.該旗標用來預防寫入TWDR時發生衝突
2.當TWDR嘗試寫入時(TWINT為0),TWWC將會為1
3.當TWINT為1時,透過寫入TWDR來清除TWWC

Bit2 - TWEN: TWI Enable Bit


1.TWEN為1時,啟動TWI
2.TWEN為0時,關閉TWI

Bit1 - 保留腳位 , 終為零


Bit0 - TWIE: TWI Interrupt Enable
1.為1時開啟中斷
2.為0時關閉中斷

TWCR 第 3 頁
TWSR (TWI Status Register)
2021年10月9日 上午 08:55

Bit[7:3] - TWS : TWI status


1.這些旗標反應了總線的狀態(狀態表之後補
齊)

Bit2 - 保留位元,終為0
沒有用

Bit[1:0] - TWPS : TWI Prescaler Bits

TWSR 第 4 頁
TWBR (TWI Bit Rate Register)
2021年10月8日 下午 07:31

Bit [7:0] - Bit Rate


設定Rate 值

TWBR 第 5 頁
TWDR (TWI Data Register)
2021年10月9日 下午 01:39

Bit[7:0] - TWD (TWI Data)


1.TWDR包含SDA在最後一個數據
2.發送時,TWDR要包含下一個被發送的字節
3.接收時,TWDR會包含最後一個接受到的資料
4.當TWINT為1時,TWDR裡的資料會一直保留

TWDR 第 6 頁
TWAR (TWI (slave) Address Register)
2021年10月8日 下午 07:49

Bits [7:1] – TWA: TWI(slave) Address Bits


1.設定從地址
2.設備為從者時做出做出回應

Bit0 - TWGCA : TWI General call Recognition Enable Bit


1.用於開啟從機對 (0x00) 的呼叫
2.一般呼叫所有設備地址在總線上使用I2C位址 (0x00)

TWAR 第 7 頁
AVR的I2C寫流程
2021年10月9日 下午 05:34

I2C 的 寫流程
1.Master發起START

2.Master發送I2C addr(7bit)和w操作0(1bit),等待ACK

3.Slave發送ACK

4.Master發送reg addr(8bit),等待ACK //EEP

5.Slave發送ACK //EEP

6.Master發送data(8bit),即要寫入暫存器中的數據,等待ACK

7.Slave發送ACK

##第6步和第7步可以重复多次,即顺序写多个寄存器##

8.Master發起STOP

寫流程 第 8 頁
z
AVR的I2C讀流程
2021年10月10日 上午 11:59

I2C 的 讀流程

1. Master發起START

2.Master發送I2C addr(7bit)和r操作1(1bit),等待ACK

3. Slave發送ACK

4. Master發送reg addr(8bit),等待ACK //EEP

5. Slave發送ACK //EEP

8. Slave發送data(8bit),即暫存器裡的值

9.接受後發送ACK

## 第8步和第9步可以重複多次,即順序讀多個暫存器##

10. Master發送NO ACK

11.Master 發送STOP

讀流程 第 9 頁
必讀
2021年10月10日 下午 05:13

I2C 的讀寫動作

當 SCL=HIGH 時,表示 SDA 穩定,可以做讀取動作。


當 SCL=LOW 時,表示 SDA 混亂,不可以讀取;因為此時可以設定 SDA 的值,也就是做寫入動作。
master 每一次傳送八個 bit,最後 slave 會回傳一個 ack bit,表示接受是否完成。
master 每一次接受八個 bit,最後 master 要傳送一個 ack bit,表示接受已經完成。
在傳送完第八個 bit 之後,再等待 slave 接受完成後,需將 SDA 設成 HIGH,此時 slave 會將 SDA 拉回 LOW,表示接受動作
完成。如果 acknowledge=HIGH,也就是 slave 沒有拉成 LOW 則表示傳送失敗。

標準 I2C 讀寫流程 by Philips

讀取完最後一個 byte 時,記得要回傳 no acknowledge(SDA=HIGH),表示已經沒有要繼續讀取資料。


讀取完最後一個 byte 時,回傳 acknowledge(SDA=LOW),再傳送 stop signal,則會造成後續的讀寫動作失敗。

給我讀 第 10 頁
參考資料
2021年10月10日 下午 04:40

1.http://jyhshin3.blogspot.com/2009/04/ic-inter-integrated-circuit.html
2.https://blog.csdn.net/qq_30624591/article/details/85255871
3.https://embedds.com/programming-avr-i2c-interface/
4.https://www.engineersgarage.com/avr-atmega32-twi-registers/
5.https://www.exploreembedded.com/wiki/Basics_of_I2C_with_AVR
6.http://wiki.csie.ncku.edu.tw/embedded/I2C

參考資料 第 11 頁

You might also like