IIC 即Inter-Integrated Circuit(集成電路總線),這種總線類型是由飛利浦半導體公司在八十年代初設計出來的一種簡單、雙向、二線制、同步串行總線,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結(jié)構(gòu)下,同時每個芯片都可以作為實時數(shù)據(jù)傳輸?shù)目刂圃?。這種方式簡化了信號傳輸總線接口。
I2C串行總線一般有兩根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有接到I2C總線設備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設備的時鐘線SCL接到總線的SCL上。
為了避免總線信號的混亂,要求各設備連接到總線的輸出端時必須是漏極開路(OD)輸出或集電極開路(OC)輸出。設備上的串行數(shù)據(jù)線SDA接口電路應該是雙向的,輸出電路用于向總線上發(fā)送數(shù)據(jù),輸入電路用于接收總線上的數(shù)據(jù)。而串行時鐘線也應是雙向的,作為控制總線數(shù)據(jù)傳送的主機,一方面要通過SCL輸出電路發(fā)送時鐘信號,另一方面還要檢測總線上的SCL電平,以決定什么時候發(fā)送下一個時鐘脈沖電平;
作為接受主機命令的從機,要按總線上的SCL信號發(fā)出或接收SDA上的信號,也可以向SCL線發(fā)出低電平信號以延長總線時鐘信號周期??偩€空閑時,因各設備都是開漏輸出,上拉電阻Rp使SDA和SCL線都保持高電平。任一設備輸出的低電平都將使相應的總線信號線變低,也就是說:各設備的SDA是“與”關系,SCL也是“與”關系。
總線對設備接口電路的制造工藝和電平都沒有特殊的要求(NMOS、CMOS都可以兼容)。在I2C總線上的數(shù)據(jù)傳送率可高達每秒十萬位,高速方式時在每秒四十萬位以上。另外,總線上允許連接的設備數(shù)以其電容量不超過400pF為限。
總線的運行(數(shù)據(jù)傳輸)由主機控制。所謂主機是指啟動數(shù)據(jù)的傳送(發(fā)出啟動信號)、發(fā)出時鐘信號以及傳送結(jié)束時發(fā)出停止信號的設備,通常主機都是微處理器。被主機尋訪的設備稱為從機。為了進行通訊,每個接到I2C總線的設備都有一個唯一的地址,以便于主機尋訪。主機和從機的數(shù)據(jù)傳送,可以由主機發(fā)送數(shù)據(jù)到從機,也可以由從機發(fā)到主機。凡是發(fā)送數(shù)據(jù)到總線的設備稱為發(fā)送器,從總線上接收數(shù)據(jù)的設備被稱為接受器。
STM32硬件IIC操作方法解析
用IO模擬的話,Keil 的優(yōu)化等級要設為 Level 0,這樣的話代碼量勢必要變大,而且也不能用中斷、DMA 等方式,操作方式單一。
在此,本人基于 STM32CubeMx 生成初始化代碼工程,參考 ST 官方列程 和 正點原子的列程 ,以及 AT24C02 的 Datasheet ,編寫本 IIC_AT24CXX 列程。
首先,說一下,HAL庫的外設驅(qū)動是比較完整和封裝比較徹底的,使用它,我們不用再寫一些如IIC讀寫過程等過程操作函數(shù),直接調(diào)用HAL庫函數(shù)即可。
下面,開始介紹 用 IIC 讀寫 AT24C02 的教程。
一、CubeMx 工程配置。
I2C總線上允許連接多個微處理器以及各種外圍設備,如存儲器、LED及LCD驅(qū)動器、A/D及D/A轉(zhuǎn)換器等。為了保證數(shù)據(jù)可靠地傳送,任一時刻總線只能由某一臺主機控制,各微處理器應該在總線空閑時發(fā)送啟動數(shù)據(jù),為了妥善解決多臺微處理器同時發(fā)送啟動數(shù)據(jù)的傳送(總線控制權(quán))沖突,以及決定由哪一臺微處理器控制總線的問題,I2C總線允許連接不同傳送速率的設備。多臺設備之間時鐘信號的同步過程稱為同步化。
評論