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