基于I2C總線的處理器的聯(lián)網(wǎng)設計方案
發(fā)布時間:2008/8/13 0:00:00 訪問次數(shù):591
最近,我接受了一項任務:開發(fā)一種能夠方便地適用于多種應用的接口(軟/硬件),且要符合嵌入式處理器中常用的行業(yè)標準。在分析了一些典型應用之后,我們列出了一些針對該硬件接口的設計需求:常用于32位和8位處理器;能夠得到常用外設器件的支持;外設接口代碼量低于0.5kb;引腳數(shù)量少;數(shù)據(jù)帶寬可達10kbps;ram用量少;一條總線上支持多種外設;方便使用api;不需要外部接口驅動硬件。
由于要求引腳數(shù)量少,所以必須采用串行接口。目前處理器中常見的串行接口包括spi、i2c、usb和rs-232。通過從不同方面權衡比較這些接口,我最終選擇了i2c,因為它接口簡單,靈活性好,得到了大多數(shù)低成本控制器的支持。在不需要很高傳輸速度的情況下,較少的引腳數(shù)和流量控制功能還使得i2c接口相比spi接口具有更大的優(yōu)勢。
i2c的工作原理
i2c是一種雙線雙向接口,包括一個時鐘信號和一個數(shù)據(jù)信號(scl和sda)。在不增加任何其他信號的情況下,一條i2c總線就可以支持多達12個設備。i2c接口規(guī)范包括三種工作速度:100kbps、400kbps和3.4mbps。大多數(shù)常見的控制器只支持100-和400kbps兩種模式。i2c總線支持一個主設備多個從設備,或者多個主設備的配置結構。
i2c一個非常重要的特性就是它支持流量控制。如果某個從設備無法保持連續(xù)的字節(jié)傳輸,它可以將總線掛起,直到能夠跟上主設備的傳輸速度。這對于包含最小規(guī)模的i2c硬件并且必須在固件上支持部分傳輸協(xié)議的從設備來說是非常有用的。i2c總線規(guī)范支持7b和10b兩種尋址協(xié)議。我發(fā)現(xiàn)7b尋址模式在大部分應用中的效率更高。
在開始編寫代碼之前,我們需要很好地了解i2c總線的工作原理。任何情況下i2c總線至少要包含一個主設備,至少要掛有一個或多個從設備。主設備總是由主到從發(fā)起數(shù)據(jù)傳輸操作。無論有多少個外設掛接在總線上,i2c接口只有兩個信號。
兩個信號都是集電極開路的,通過大小為2.7k左右的上拉電阻接vcc電源。sda信號是雙向的,可以由主設備或從設備驅動。scl信號是由主設備驅動的,但是在一個數(shù)據(jù)字節(jié)的末尾從設備必須保持scl信號為低,以延遲總線直到從設備開始處理數(shù)據(jù)。主設備在數(shù)據(jù)字節(jié)的最后一位傳輸完之后釋放scl信號,然后檢查scl信號是否變高。如果scl沒有變高,那么主設備認為從設備正在請求主設備延遲,直到其開始處理數(shù)據(jù)。
當通過i2c總線發(fā)送數(shù)據(jù)時,只有當scl為低電平時才能進行數(shù)據(jù)變換。當scl信號為高時,任何方向的數(shù)據(jù)都應該是穩(wěn)定的.
當總線空閑時,主設備和從設備都不下拉sda和scl信號。在發(fā)起一次數(shù)據(jù)傳輸時,主設備驅動sda信號從高電平變成低電平,同時scl信號為高。一般地,當scl信號為高電平時,sda信號的狀態(tài)保持不變,但啟動或停止條件下除外。當scl信號為高并且sda信號從低變高時,是傳輸停止的情況(如圖2所示)。
i2c總線以8b為單位傳輸數(shù)據(jù)。每傳輸一個字節(jié)時,必須得到數(shù)據(jù)接收方的確認。所有的數(shù)據(jù)都是從msb(最高有效位)開始傳輸?shù)摹?/p>
最近,我接受了一項任務:開發(fā)一種能夠方便地適用于多種應用的接口(軟/硬件),且要符合嵌入式處理器中常用的行業(yè)標準。在分析了一些典型應用之后,我們列出了一些針對該硬件接口的設計需求:常用于32位和8位處理器;能夠得到常用外設器件的支持;外設接口代碼量低于0.5kb;引腳數(shù)量少;數(shù)據(jù)帶寬可達10kbps;ram用量少;一條總線上支持多種外設;方便使用api;不需要外部接口驅動硬件。
由于要求引腳數(shù)量少,所以必須采用串行接口。目前處理器中常見的串行接口包括spi、i2c、usb和rs-232。通過從不同方面權衡比較這些接口,我最終選擇了i2c,因為它接口簡單,靈活性好,得到了大多數(shù)低成本控制器的支持。在不需要很高傳輸速度的情況下,較少的引腳數(shù)和流量控制功能還使得i2c接口相比spi接口具有更大的優(yōu)勢。
i2c的工作原理
i2c是一種雙線雙向接口,包括一個時鐘信號和一個數(shù)據(jù)信號(scl和sda)。在不增加任何其他信號的情況下,一條i2c總線就可以支持多達12個設備。i2c接口規(guī)范包括三種工作速度:100kbps、400kbps和3.4mbps。大多數(shù)常見的控制器只支持100-和400kbps兩種模式。i2c總線支持一個主設備多個從設備,或者多個主設備的配置結構。
i2c一個非常重要的特性就是它支持流量控制。如果某個從設備無法保持連續(xù)的字節(jié)傳輸,它可以將總線掛起,直到能夠跟上主設備的傳輸速度。這對于包含最小規(guī)模的i2c硬件并且必須在固件上支持部分傳輸協(xié)議的從設備來說是非常有用的。i2c總線規(guī)范支持7b和10b兩種尋址協(xié)議。我發(fā)現(xiàn)7b尋址模式在大部分應用中的效率更高。
在開始編寫代碼之前,我們需要很好地了解i2c總線的工作原理。任何情況下i2c總線至少要包含一個主設備,至少要掛有一個或多個從設備。主設備總是由主到從發(fā)起數(shù)據(jù)傳輸操作。無論有多少個外設掛接在總線上,i2c接口只有兩個信號。
兩個信號都是集電極開路的,通過大小為2.7k左右的上拉電阻接vcc電源。sda信號是雙向的,可以由主設備或從設備驅動。scl信號是由主設備驅動的,但是在一個數(shù)據(jù)字節(jié)的末尾從設備必須保持scl信號為低,以延遲總線直到從設備開始處理數(shù)據(jù)。主設備在數(shù)據(jù)字節(jié)的最后一位傳輸完之后釋放scl信號,然后檢查scl信號是否變高。如果scl沒有變高,那么主設備認為從設備正在請求主設備延遲,直到其開始處理數(shù)據(jù)。
當通過i2c總線發(fā)送數(shù)據(jù)時,只有當scl為低電平時才能進行數(shù)據(jù)變換。當scl信號為高時,任何方向的數(shù)據(jù)都應該是穩(wěn)定的.
當總線空閑時,主設備和從設備都不下拉sda和scl信號。在發(fā)起一次數(shù)據(jù)傳輸時,主設備驅動sda信號從高電平變成低電平,同時scl信號為高。一般地,當scl信號為高電平時,sda信號的狀態(tài)保持不變,但啟動或停止條件下除外。當scl信號為高并且sda信號從低變高時,是傳輸停止的情況(如圖2所示)。
i2c總線以8b為單位傳輸數(shù)據(jù)。每傳輸一個字節(jié)時,必須得到數(shù)據(jù)接收方的確認。所有的數(shù)據(jù)都是從msb(最高有效位)開始傳輸?shù)摹?/p>