『壹』 I2C傳輸數據是怎麼回事
要學好I2C通信,你必須了解I2C通信協議,就是實現制定的規則,時序可以自己寫,只要滿足條件就好,起始信號之後,如果寫數據,就要通過SDA線將數據發送出去,SDA上信號變化都是在SCL低電平期間變化的,在SCL高電平期間要保證SDA上的信號穩定,一般讀數據是在SCL高電平期間讀寫的。
『貳』 嵌入式基礎IC2匯流排
姓名 魏子勛
學號20009101910 竹園三號書院
【嵌牛鼻子】一種串列通信的介紹
【嵌牛正文】
1. 簡介
I2C (Inter-Integrated Circuit),是一種串列通信匯流排,用於連接微控制器及其外圍設備,實現主控制器和從器件間的主從雙向通信,是一種同步半雙工通信(兩端時鍾頻率一致,雙向通信,但不能同時進行數據收發)。
2. 原理
I2C通信屬於串列通信,具有兩根串列信號線:數據線(SDA),時鍾線(SCL)。如下圖所示,主控制器與從器件(一個或多個)都通過兩根信號線連接,信號線上主機和從機都可以扮演發送器和接收器的角色。為確保傳輸過程的指向准確性,每個接到I2C匯流排上的器件都有唯一的地址(7位從器件專用地址碼),可實現制定從機的定向傳輸與群發傳輸。
2.1 信號類型
同時,為確保傳輸穩定,所有連接在同一I2C匯流排上的設備共用一個時鍾。I2C 匯流排在傳送數據過程中共有以下幾種類型信號:
(1) 開始信號/結束信號
SCL 為高電平時,SDA 由高電平向低電平跳變,開始傳送數據。
SCL 為高電平時,SDA 由低電平向高電平跳變,結束傳送數據。
(2) 應答信號/非應答信號
IIC 匯流排協議規定,每傳送一個位元組數據後(8bit),都要有一個應答信號以確定數據傳送是否被對方收到。即一個位元組傳輸的8個時鍾過後的第9個時鍾期間,接收器必須回一個ACK應答信號給發送器,這樣才能進行數據傳輸。
應答信號由接受設備產生,在SCL為高電平期間,接受設備將SDA拉低為低電平,表示數據傳輸正確,產生應答(ACK),SDA拉高則表示數據傳輸失敗,產生非應答位(NACK)。
(3) 閑置狀態/被佔用狀態
在主機發送起始信號後,且未發送終止信號期間,匯流排處於被佔用狀態。
發送終止信號後,匯流排處於閑置狀態,SCL與SDA同時為高電平。
2.2 匯流排讀寫流程
I2C匯流排進行數據傳送時,SCL時鍾信號為高電平期間,SDA數據線上的數據必須保持穩定,只有在時鍾線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。 當一個位元組按數據位從高位到低位的順序傳輸完後,緊接著從機將拉低SDA線,回傳給主設備一個應答位ACK, 此時才認為一個位元組真正的被傳輸完成 ,如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。
I2c匯流排寫通信過程:
主機在檢測到匯流排空閑的狀況下,首先發送一個START信號掌管匯流排;
發送一個地址位元組(8 bit),其中bit0-6位為從機地址,存放從機唯一地址;bit7位為讀寫位(R/W),0表示write主機 ->從機,1表示read 從機->主機;
主機發送地址時,匯流排上每個從機都會將7位地址與自己的地址進行比較,若相同,則將匹配成功,發送應答信號(ACK),確定發送器和接收器;
主機收到ACK後開始發送第一個位元組(Command),對應從機中要寫入的寄存器;
從機接收到Command後,從機發送ACK;
主機收到ACK後開始發送第一個數據位元組:bit0-7(8bit數據,高到低),從機收到數據後,發送應答ACK;
繼續發送數據,n幀;
主控發送完全部數據後,發送一個停止位STOP,結束
整個通訊並且釋放匯流排;
I2c匯流排讀通信過程:
主機產生START信號,隨後發送從機地址(7bit)+0(Write);
*方向仍然是寫,待接收到從機發送的ACK應答後,配對成功。
主機接收到ACK後,發送8bit內存地址(Command對應從機相應寄存器地址),從機接收到後,內部定址並提取數據,返回ACK;
主機接收到ACK後,重新產生START信號,再一次發送從機內存地址,(7bit)+1(Read),從機接收到後返回ACK;
*方向設置為讀,主機設置為接收模式
主機接收到ACK後,做好接收從機信息的准備,現在即可接收1bit的數據。
*主機不向從機發送應答信號,接收完畢後直接發起終止信號。
主機接收全部數據後,產生STOP信號,終止通信,匯流排變為閑置狀態。
『叄』 I2C匯流排位元組傳送與應答時數據傳送格式是什麼
是這樣的,I2C匯流排傳送的是串列數據,數據的傳送格式為:
1)從master模塊到slave模塊(寫的工作方式)時的數據傳送格式start
slave
address
R-W
A
DA
TA
A
DA
TA
A
stop
2)從slave模塊到master模塊(讀的工作方式)時的數據傳送格式start
slave
address
R-W
A
DA
TA
A
DA
TA
A
stop
首先傳送起始狀態start,然後傳送第一個字:master所選中的slave模塊的地址slave
address,地址長為7位,這個字的第8位(L
SB)RW表示讀寫狀態,「0」表示寫操作,從master模塊到slave模塊;「1」表示讀操作,從slave模塊到master模塊。當地址被傳送後,匯流排上的每個物理設備會將自己的地址和start位後的七位地址比較,如果地址相匹配,該設備就會認為是自己的地址,然後等待第8位(讀寫位)以決定它將是從接收裝置(slave-receiver)還是從發送裝置(slave-transm
itter)。其後是slave模塊發送到master模塊的應答信號(acknow
ledgment),值得注意的是,每個字(地址和數據)被傳送後其後必須跟隨應答信號(為master控制匯流排生成的第9個時鍾),當一個正向的應答信號有效時,SCL時鍾為高電平且穩定,同時,接收裝置將SDA數據線置為低。接下來是按位元組來傳送數據,每傳送完8位數據,接收裝置會發送一個應答信號,傳送結束時由master生成stop位,表示處於結束狀態。