I2C協議簡介併發
I2C通訊協議(Inter-Integrated Circuit)是由Phiilps公司開發的,它引腳少,硬件實現簡單,可擴展性強,不須要USART、CAN等通訊協議的外部收發設備,被普遍的應用在系統內多個集成電路(IC)間通信。框架
它是一個多設備總線,即總線能夠掛載多個I2C通訊設備,支持多個通信主機及多個通訊從機。I2C總線只使用兩條總線線路,一條雙向串行數據線(SDA),一條串行時鐘線(SCL)。ui
每條鏈接到總線的設備都有一個獨立的地址(7位地址或者10位地址),主機能夠利用這個地址進行不相同設備之間的訪問。3d
I2C物理層blog
在電路中有三種狀態圖片
①高電平表示邏輯 1開發
②低電平表示邏輯 0it
③高阻態擴展
當通信設備爲高阻態時,即電阻很大,就像和總線斷開同樣配置
當通信設備想表達邏輯1的時候或者空閒時,都要設置高阻態
因此當配置I2C引腳時不能配置成推輓輸出,而是要配置成開漏輸出(通常用在總線上輸出高阻態)
總線數目受到電容限制
I2C協議層
主機寫數據到從機
主機先廣播從機的地址,在地址後面的這一位表示讀寫位,0表示寫,當有這個地址的從機時,從機會回覆一個應答位(ACK),而後主機向從機寫數據,每發一個字節的數據,從機會回覆一個應答位,當從機沒法接收數據時,會回覆給主機一個非應答信號,主機會發送一箇中止位
主機由從機讀數據
由從機讀數據與寫數據到從機略有不一樣,首先讀寫位不一樣,由於是讀數據因此讀寫位爲1,而後從機向主機發送數據,主機來回復應答信號,當主機不在接收數據時,主機會回覆一個非應答信號,併發送一箇中止信號,注意這裏的中止信號也是主機發送的。
複合格式
是由寫後讀複合而成
寫方向(設備地址)---寫入數據(存儲器的內部地址或寄存器)即先選擇由從機哪一個地址開始,再來讀和寫
通信的起始和中止信號
起始和中止信號都是由主機產生的
數據有效性
地址及數據方向
1個字節(8位)
7位的設備地址+1個讀寫位
舉例:
0x78 + 1 =8位設備的讀地址 = 0xF1
0x78 + 0 =8位設備的寫地址 = 0xF0
響應
當主機向從機寫數據時,主機的數據位會在應答位時主動釋放數據線SDA的控制權 ,來接收從機數據線SDA的應答信號
STM32的I2C特性及框架
在業界都瞭解,STM32片上外設的硬件協議會出現一些BUG,但對於初學者並無什麼影響
STM32的I2C硬件框架刨析
SMBA總線用的比較少
時鐘控制邏輯
由時鐘控制寄存器(I2C_CCR)控制
第15位控制I2C速度模式
0:標準模式I2C 100kbit/s
1:快速模式I2C 400kbit/s
在I2C標準模式或SMBus模式下:
Thigh = CCR ×TPCLK1(高電平時間), TPCLK1爲AHB1時鐘, CCR的值由咱們本身寫上去
Tlow = CCR ×TPCLK1(低電平時間) TPCLK1爲AHB1時鐘 同上
當想設置快速模式時,應該設置DUTY位設置佔空比
0:低電平的時間是高電平的時間的2倍
1:低電平的時間是高電平的時間的16/9倍
數據控制邏輯
地址及數據方向
I2C爲高位先行的
STM32的I2C通訊過程
一、作爲主發送器
二、作爲主接收器