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