準確的讀法應該是I的平方C,即I^2C。以后就簡寫成I2C模塊。
I2C模塊通過I2C總線為DSP和其他符合PHILIPS半導體內(nèi)部集成電路總線規(guī)格(PHILIPS半導體I2C總線規(guī)范)的設備提供了接口。I2C總線是一種兩線制串行總線,與其相連的外部器件可以發(fā)送1~8位數(shù)據(jù)到DSP,或者從DSP接收1~8位數(shù)據(jù)。通過I2C模塊傳輸或接收到的一個單位的數(shù)據(jù)可以少于8位。
I2C模塊支持任何主/從I2C兼容設備,多個I2C模塊連接在總線上實現(xiàn)多個器件間的數(shù)據(jù)雙向傳輸。
一.I2C模塊的主要特征
1.與PHILIPS半導體I2C總線規(guī)范兼容(2.1版)
支持8位格式數(shù)據(jù)傳送;
7位和10位尋址模式,分別最多可以帶128個和1024個設備;
支持多個主發(fā)送器和多個從接收器;
支持多個從發(fā)送器和多個主接收器;
具有主發(fā)送/接收和主接收/發(fā)送模式;
數(shù)據(jù)傳輸速率可從10Kbit/s到400Kbit/s
*支持通用呼叫功能;
*支持啟動字節(jié)(START)模式
2.一個16位接收FIFO和一個16位發(fā)送FIFO
3.一個可以隨時被CPU使用的中斷
4.在FIFO模式下可被CPU使用的附加中斷
5.有自有數(shù)據(jù)格式模式
6.不支持以下功能:
高速模式
CBUS-兼容模式
二.I2C模塊的性能與功能
I2C是多主控總線,所以任何一個設備都能像主控器一樣工作,并控制總線??偩€上每一個設備都有一個獨一無二的地址,根據(jù)設備它們自己的能力,它們可以作為發(fā)射器或接收器工作。I2C模塊允許一個或多個支持I2C總線功能的器件連接在同一條總線上。
對于數(shù)據(jù)通信,I2C模塊有一個串行數(shù)據(jù)引腳SDA和一個串行時鐘引腳SCL。這兩個引腳在280x器件和連接到I2C總線上的其他器件之間傳送信息。SDA和SCL兩個引腳均是雙向的。它們必須通過上拉電阻接到正電壓。當總線空閑時,兩個引腳均為高電平。
(1)兩種主要的傳輸模式
標準模式:發(fā)送n個數(shù)值,n是在I2C模塊寄存器中所設置的傳輸數(shù)據(jù)個數(shù)。
重復模式:一直發(fā)送數(shù)據(jù),直到軟件產(chǎn)生一個停止條件或一個新的開始條件。
(2)I2C模塊的主要組成
I2C模塊結構框圖如上圖,主要包含:
一個SDA串行數(shù)據(jù)引腳和一個SCL串行時鐘引腳;
數(shù)據(jù)寄存器和FIFO:暫時保存SDA引腳和CPU之間傳遞的接收數(shù)據(jù)和發(fā)送數(shù)據(jù);
*控制和狀態(tài)寄存器;
外圍總線接口:用于CPU訪問I2C模塊寄存器和FIFO;
時鐘同步器:用來使I2C輸入時鐘(由DSP時鐘源產(chǎn)生)和SCL引腳的時鐘同步,并且使數(shù)據(jù)發(fā)送器與不同的主機時鐘速度同步;
*預定標器:將輸入到I2C模塊的時鐘進行分頻;
噪聲濾波器:SDA和SCL引腳的;
*總線仲裁器:用來處理I2C模塊和其它主器件的仲裁問題;
中斷產(chǎn)生邏輯I2CINT:向CPU發(fā)送中斷信號;
FIFO中斷產(chǎn)生邏輯:以便在I2C模塊中接收數(shù)據(jù)或發(fā)送數(shù)據(jù)時能夠同步訪問FIFO。(FIFO模式)
上圖也給出了非FIFO模式下數(shù)據(jù)發(fā)送和接收的操作方式。CPU將需要發(fā)送的數(shù)據(jù)寫入到I2CDXR,并從I2CDRR中讀取接收到的數(shù)據(jù)。當I2C模塊配置成發(fā)送器時,寫入到I2CDXR的數(shù)據(jù)被復制到I2CXSR中,并逐位地移出到SDA引腳上;當I2C模塊配置成接收器時,接收到的數(shù)據(jù)先移入到I2CRSR,再復制到I2CDRR中。
三.時鐘產(chǎn)生源
如圖所示:
DSP時鐘產(chǎn)生器從外部時鐘源接收信號,產(chǎn)生一個頻率可編程的I2C輸入時鐘。I2C輸入時鐘為CPU時鐘,在I2C內(nèi)部經(jīng)過兩倍以上分頻后產(chǎn)生I2C模塊時鐘和主機時鐘。
模塊時鐘決定了I2C模塊以什么頻率工作。I2C模塊的可編程分頻器通過對輸入時鐘分頻得到模塊時鐘。配置分頻器寄存器的IPSC位可確定分頻器的值。模塊時鐘頻率的計算公式如下:
主時鐘頻率=模塊時鐘頻率 X [(ICCL+d)+(ICCH+d)]
為了與所有I2C協(xié)議時鐘頻率匹配,模塊時鐘必須配置在7~12MHz之間,分頻器必須在I2C模塊被復位時(即I2CMDR的IR=0)配置。當IRS由0變成1時所分頻的頻率才有效,當IRS=1時改變IPSC的值不起作用。
當I2C總線的I2C模塊被配置成主器件時,在SCL引腳出現(xiàn)主時鐘。該時鐘控制I2C模塊同其他從器件之間通信的時序。I2CCLKL的ICCL位和I2CCLKH的ICCH位的值分別表示分頻值的低字節(jié)部分和高字節(jié)部分。
四.I2C模塊操作
1.數(shù)據(jù)狀態(tài)
下圖描述了I2C總線傳送數(shù)據(jù)時數(shù)據(jù)線SDA和時鐘線SCL的電平狀態(tài)。
在時鐘為高電平時SDA引腳上的數(shù)據(jù)必須穩(wěn)定。只有在SCL上時鐘信號變低時,數(shù)據(jù)線SDA引腳的數(shù)據(jù)才可以改變。
2.操作模式
I2C模塊有四種基本操作模式用以支持數(shù)據(jù)傳送。
具體工作如下:
1)如果I2C模塊工作在主模式下,當向從模塊發(fā)送數(shù)據(jù)時,I2C模塊必須保持主發(fā)送器模式;接收從模塊的數(shù)據(jù)時,則其必須變?yōu)橹鹘邮掌髂J健?
2)如果I2C模塊是從機,通常是當其識別來自主機的從地址時發(fā)送一個應答信號。如果主機將要發(fā)送數(shù)據(jù)給I2C模塊,那么模塊必須保持從接收器模式。如果主機要求I2C模塊發(fā)送數(shù)據(jù),那么模塊必須變成從發(fā)送器模式。
五.I2C模塊的起始和停止條件
當I2C總線上的I2C模塊被配置成主機時,可以由該模塊產(chǎn)生起始(START)和停止(STOP)條件。如圖所示,當SCL為高電平時,SDA數(shù)據(jù)線產(chǎn)生由高到低跳變時,表示起始條件開始。主機通過產(chǎn)生這樣的條件來表明數(shù)據(jù)傳送開始;當SCL為高電平,SDA數(shù)據(jù)線產(chǎn)生由低到高跳變時,表明停止條件產(chǎn)生。主機通過產(chǎn)生該條件表明數(shù)據(jù)傳送停止結束。
起始條件開始后且停止條件產(chǎn)生之前,認為此時的I2C總線是處于忙狀態(tài)的,此時I2CSTR的總線忙位BB=1;在停止條件產(chǎn)生后與下個起始條件產(chǎn)生前,這段期間認為I2C總線是處于空閑的,此時BB=0.。
為了使I2C模塊使用起始條件開始數(shù)據(jù)傳送,I2CMDR的主機模式位(MST)和起始條件位(STT)都必須為1.為了使I2C模塊使用停止條件終止數(shù)據(jù)的傳送,則停止條件位(STP)必須置1。當RM位和STT位都置1時,產(chǎn)生重復的起始條件。
六.串行數(shù)據(jù)格式
上圖是傳輸8位數(shù)據(jù)。SDA數(shù)據(jù)線上每一位的維持時間相當于SCL一個脈沖。傳輸數(shù)據(jù)時,總是高有效位字節(jié)(MSB)開始傳送。發(fā)送和接收數(shù)據(jù)的個數(shù)沒有限制。
1)7位地址格式
要使用7位地址格式,需向I2CMDR的擴展地址使能位(XA)寫0,并且要確保自由數(shù)據(jù)格式關閉(即I2CMDR的FDF=0)
起始位后第一個字節(jié)包括7位的從機地址和1位讀寫選擇位。決定數(shù)據(jù)傳送的方向,當=0,代表主機向所尋址的從機寫數(shù)據(jù);當=1,主機讀來自從機的數(shù)據(jù)。
每個字節(jié)傳輸完成后,必須插入一個額外的時鐘周期應答位(ACK)。如果在主機傳送第一個字節(jié)后,從機產(chǎn)生應答位,則發(fā)送器就會發(fā)送n位數(shù)據(jù)。n是由I2CMDR的BC位來確定的1~8位數(shù)。當數(shù)據(jù)傳送完成后,接收器產(chǎn)生一個應答位ACK。
2)10位地址格式
要使用10位地址格式,需向I2CMDR的擴展地址使能位(XA)寫1,并且要確保自由數(shù)據(jù)格式關閉(即I2CMDR的FDF=0)
起始位后第一個字節(jié)包括11110和從機地址的2個最高位MSBs以及一個讀寫選擇位,第二個字節(jié)為剩下的8位地址。主機一旦向從機發(fā)送了第二個字節(jié),就可以寫數(shù)據(jù),或者通過重復使用開始位(START)來改變數(shù)據(jù)傳送方向。
七.I2C協(xié)議總線信號時序分析
1.總線空閑狀態(tài)
SDA和SCL兩條信號線都處于高電平,即總線上器件都處于釋放狀態(tài)。
2.應答信號ACK
I2C總線的數(shù)據(jù)都是以8位進行傳送,發(fā)送器每發(fā)送一個字節(jié)后,在SCL第9個時鐘脈沖期間釋放數(shù)據(jù)總線,由接收器發(fā)送一個ACK(把數(shù)據(jù)總線電平拉低)來表示數(shù)據(jù)成功接收。
3.無應答信號NACK
在SCL第9個時鐘脈沖期間釋放數(shù)據(jù)總線,接收器不拉低數(shù)據(jù)總線表示一個NACK,NACK有兩種用途:
a.表示接收器未成功接收數(shù)據(jù)字節(jié);
b.當接收器是主控器時,它收到最后一個字節(jié)后,應發(fā)送一個NACK信號,以通知被控發(fā)送器結束數(shù)據(jù)發(fā)送,并釋放總線,以便主控接收器發(fā)送一個停止信號STOP。
八.寫通訊過程(便于加深理解)
主控在檢測到總線空閑的狀況下,首先發(fā)送一個START信號掌管總線;
發(fā)送一個地址字節(jié),包括7位地址碼和一位=0;
當被控器件檢測到主控發(fā)送的地址與自己的地址相同時發(fā)送一個應答信號ACK;
主控收到ACK信號后,開始發(fā)送第一個數(shù)據(jù)字節(jié);
被控器件收到數(shù)據(jù)字節(jié)后發(fā)送一個ACK表示繼續(xù)傳送數(shù)據(jù),,發(fā)送NACK表示數(shù)據(jù)傳送結束;
主控發(fā)送完全部數(shù)據(jù)后,發(fā)送一個停止信號STOP,結束整個通訊并釋放總線。
九.讀通訊過程
主控在檢測到總線空閑的狀況下,首先發(fā)送一個START信號掌管總線;
發(fā)送一個地址字節(jié),包括7位地址碼和一位=1;
當被控器件檢測到主控發(fā)送的地址與自己的地址相同時發(fā)送一個應答信號ACK;
主控收到ACK信號后釋放數(shù)據(jù)總線,開始接收第一個數(shù)據(jù)字節(jié);
主控器件收到數(shù)據(jù)字節(jié)后發(fā)送一個ACK表示繼續(xù)傳送數(shù)據(jù),,發(fā)送NACK表示數(shù)據(jù)傳送結束;
主控接收完全部數(shù)據(jù)后,發(fā)送一個停止信號STOP,結束整個通訊并釋放總線。
十.I2C協(xié)議尋址約定
地址的分配方法有兩種:
1.含CPU的智能器件,地址由軟件初始化時定義,但不能與其它器件有沖突;
2.不含CPU的非智能硬件,由廠家在器件內(nèi)固化,不可改變。
高7位為地址碼,其分為兩部分:
1.高4位屬于固定地址不可改變,由廠家固化的統(tǒng)一地址;
2.第三位為引腳設定地址,可以由外部引腳來設定(并非所有器件都可以設定,也并非所有器件都是引腳設定)。
*****************************************************************************************************************這部分內(nèi)容比較多,全是理論為主,以上只是講了一些經(jīng)常用到的知識點,還有一些沒有在此寫出來,如果有需要可以查閱開發(fā)板產(chǎn)品中關于【I2C模塊部分手冊】。
好啦,這部分暫時沒有軟件實驗部分,這一講結束。