天天看點

STM32-(19):I2C通信(理論基礎)

上一篇:STM32-(18):SPI與數位管(SPI) 下一篇:STM32-(20):I2C通信(實驗:讀寫EEPROM)

I2C BUS是Philips公司推出的一種基于兩線的晶片間串行傳輸總線。I2C總線采用了器件位址的硬體設定方法,通過軟體尋址完全避免了器件的片選線尋址方法,進而使硬體系統具有最簡單而靈活的擴充方法。

I2C總線在标準模式下,資料傳輸率可達100kbps,高速模式下可達400kbps。目前 I2C 總線被廣泛應用于消費了電子産品、通信産品、儀器儀表及工業測控系統中。

在I2C總線上隻需要串行資料SDA線和串行時鐘線SCL線兩條線。

每個器件都有一個唯一的位址以供識别,并工作在主模式或者從模式下,而且各器件都可以作為一個發送器或接收器。

微控制器包含的I2C 發送/接收器都可以選擇作為主模式( Master )或從模式( Slave )工 作。但任一時刻 I2C 總線上隻允許一個微控制器工作在主模式下,作為主要器;而另一個微控制器必須工作在從模式下,作為被控器。

STM32-(19):I2C通信(理論基礎)

注:作為主模式,必須内部有時鐘,以産生波特率,任何時候隻有兩個之間進行通信。

I2C總線的特點

1.二線傳輸

2.無中心主機

3.軟體尋址

4.應答式資料傳輸過程(好處:保證傳輸過程中資料的穩定和可靠)

5.節點可帶電接入或撤出(大概是熱插拔的意思)

I2C資料傳輸

傳輸的第一個8位資料為尋址位元組,包括7位的被控器位址和1位方向位,接着被控器發出A (應答位),緊接着的是主要器與被控器之間資料傳輸和應答。在資料傳輸完成後,主要器要發出停止信号。

資料傳輸格式如圖:

STM32-(19):I2C通信(理論基礎)

分析:在總線上,SCL和SDA是開漏輸出,會接上拉電阻,是以空閑的時候是高電平(即開始信号之前),在SCL處于高電平器件,發現SDA的電平由高到低跳變,即産生開始信号;在SCL處于高電平器件,發現SDA的電平由低到高跳變,即産生停止信号;這中間,SCL電平會變化,一般來說,SCL産生上升沿,發送方發送資料,接收方接收資料,SCL産生下降沿時,發送方開始修改SDA上的資料。第9位為應答位,發送方會将SDA總線線釋放,由接收方産生應答,SDA總線預設是高電平,若接收方有應答,會強制拉低電平,表示有應答,即應答位低電平有效。

STM32的I2C子產品

介紹:

I2C總線接口連接配接微控制器和串行I2C總線。它提供多主機功能,控制所有I2C總線特定的時序、協定、仲裁和定時。支援标準和快速兩種模式,同時與SMBUS2.0相容。

I2C總線有多種用途,包括CRC碼的生成和校驗、MBus(System Management Bus)、PMBus(Power Management Bus)。

根據特定裝置的需要,可以使用DMA以減輕CPU的負擔。

特點:

1、 I2C主裝置功能

一産生時鐘

一産生起始和停止信号

2、 I2C從裝置功能

一可程式設計的丨2C位址檢測

一可響應2個從位址的雙位址能力

一停止位檢測

3、 狀态标志:

一發送器/接收器模式标志

一位元組發送結束标志

一 I2C總線忙标志

4、 錯誤标志

一主模式時的仲裁丢失

一位址/資料傳輸後的應答(ACK)錯誤

—檢測到起始和停止錯位

一禁止拉長時鐘功能後的上溢或下溢

I2C接口可以下述4種模式中的一種運作

  • 從發送器模式
  • 從接收器模式
  • 主發送器模式
  • 主接收器模式

預設模式為從模式。接口在生成起始條件後自動從從模式切換到主模式;當仲裁丢失或産生停止信号,則從主模式切換到從模式。

STM32-(19):I2C通信(理論基礎)
STM32-(19):I2C通信(理論基礎)

分析:資料往DR寄存器内丢,也可以從DR寄存器讀取,當發生一些錯誤的時候,通路狀态寄存器,根據不同的狀态在軟體中進行不同的操作。

注:DR寄存器實際上有兩個,一個用于發送,一個用于接收,實體上是分開的,不會互相幹擾。

比較重要的寄存器簡介:

I2C_SR1

STM32-(19):I2C通信(理論基礎)
STM32-(19):I2C通信(理論基礎)

位7:判斷寄存器是否為空,當寄存器為空時,才能繼續發送。若不為空,說明DR寄存器内資料還沒發完,需要繼續等待。

STM32-(19):I2C通信(理論基礎)
STM32-(19):I2C通信(理論基礎)

主模式下的發送流程:

STM32-(19):I2C通信(理論基礎)
STM32-(19):I2C通信(理論基礎)

分析:

①首先發送一個S位,起始條件。然後會出現一個事件EV5,若發送成功,SB位置1,然後讀SR1寄存器的這個位,當這個SB位為1時再将SR1寄存器的位址寫入DR寄存器就會清除因該位置1而産生的事件。

②發送一個8位的位址。一個總線上可能有多個器件,首先你得确認你要跟那個器件進行通信,若有應答,就會産生EV6事件,ADDR置1,表示位址發送成功,EV8_1事件,TxE置1,将發送寄存器清空

③發送資料Data。當獲得應答A,既然獲得應答,肯定發送成功,會産生EV8,TxE置1,清除該事件,以便發送後面新的資料。

④發送停止信号P停止位

注:各種事件的産生改變了 SR 狀态寄存器相應的位

主模式下的接收流程:

STM32-(19):I2C通信(理論基礎)

I2C庫函數

STM32-(19):I2C通信(理論基礎)
STM32-(19):I2C通信(理論基礎)
上一篇:STM32-(18):SPI與數位管(SPI) 下一篇:STM32-(20):I2C通信(實驗:讀寫EEPROM)

繼續閱讀