I2C開發(fā)實例說明_第1頁
I2C開發(fā)實例說明_第2頁
I2C開發(fā)實例說明_第3頁
I2C開發(fā)實例說明_第4頁
I2C開發(fā)實例說明_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、I2C開發(fā)實例說明開發(fā)實例說明I2C的定義o I2C(Inter IC BUS)是Philips公司開發(fā)的用于芯片之間連接的總線。 o I2C總線用兩根信號線進行數(shù)據(jù)傳輸,一根為串行數(shù)據(jù)線(SDA),另一根為串行時鐘線(SCL)。 I2C的速率o 串行8位雙向數(shù)據(jù)傳輸速率在標(biāo)準(zhǔn)模式下可達100Kbit/so 快速模式下可達400Kbit/so 高速模式下可達3.4Mbit/s I2C術(shù)語定義 I2C總線應(yīng)用舉例o 如下圖2個處理器,其他為外圍應(yīng)用設(shè)備 I2C的特(優(yōu))點o 串行總線和并行總線相比具有結(jié)構(gòu)簡單 o 占用引腳少 o 成本低等優(yōu)點 I2C傳輸數(shù)據(jù)有效性o SDA線上數(shù)據(jù)必須在時鐘高電

2、平保持穩(wěn)定o SDA高低電平只在SCL低電平時才能改變起始和停止條件o SCL為高電平時,SDA從高電平到低電平轉(zhuǎn)換,這個條件表示為起始條件o SCL為高電平時,SDA從低電平到高電平轉(zhuǎn)換,這個條件表示為停止條件傳輸字節(jié)格式o 發(fā)送到SDA線必須為8位o 每次可以傳輸?shù)淖止?jié)數(shù)量沒有限制o 每個字節(jié)后必須跟一個響應(yīng)位響應(yīng)bit說明o 低電平表示響應(yīng),高電平表示不響應(yīng)響應(yīng)bit的幾種情況7位的傳輸格式n 先發(fā)起始條件(S)n 再發(fā)從機地址,這個地址共有7位n 緊接著第8位是數(shù)據(jù)方向位(R/W,0表示發(fā)送(寫),1表示請求數(shù)據(jù)(讀)。)n 從機(不)響應(yīng)n 傳輸數(shù)據(jù)+(不)響應(yīng)(循環(huán))n 數(shù)據(jù)傳輸又

3、主機產(chǎn)生停止位(P)終止傳輸完整格式三種可能的傳輸格式第1種:主機發(fā)送器發(fā)送到從機接收器,傳輸方向不會改變?nèi)N可能的傳輸格式第2種:第一個字節(jié)后,主機立即讀從機,注意第一次的響應(yīng)時由從器件產(chǎn)生三種可能的傳輸格式第3種:注意事項:o 數(shù)據(jù)格式中的數(shù)據(jù)并沒有說明里面的數(shù)據(jù)具體的含義o 換句話說到底是地址還是數(shù)據(jù)沒有定義說明o 具體的傳輸格式意義應(yīng)該是由設(shè)計者自己決定10位尋址簡單做一說明o 如果只使用7位尋址這部分可以忽略o 10尋址和7位尋址兼容,而且可以結(jié)合使用o 10位尋址采用保留的1111XXX作為起始條件(S)或重復(fù)起始條件(Sr)的后第一個字節(jié)的頭7位o 盡管保留地址位1111XXX有

4、8個可能的組合,但是只有4個組合11110XX用于10位尋址。剩下的4個組合11111XX保留給以后增強的I2C總線頭2個字節(jié)的定義n 十位從機地址是由在起始條件(S)或重復(fù)起始條件(Sr)后的頭2個字節(jié)組成n 第一個字節(jié)頭7位是11110XX的組合n 其中最后2位XX是10位地址的2個最高位n 第一個字節(jié)的第8位決定報文方向(R/W,0為寫,1為讀)第一種10位傳輸?shù)?種10位傳輸?shù)?種10位傳輸?shù)?種10位傳輸?shù)?種10位傳輸實例開發(fā)舉例說明o 上面講了I2C的理論o 下面根據(jù)FDD的I2C設(shè)計進行詳細設(shè)計說明PIGI的I2C時序(W)PIGI的I2C時序(讀)RM-CPLD的I2C時序(

5、W)RM-CPLD的I2C時序(R)比較PIGI和RM-CPLD時序結(jié)論o 2個時序關(guān)系一致o 寫是常規(guī)的寫操作o 需要注意的是讀不是在常規(guī)寫讀位置改bit位1(讀),而是先進行一個寫操作,給出寄存器地址,再進行讀操作RM-CPLD的I2C控制器框架首先看下三態(tài)電路三態(tài)電路代碼always (posedge clk or negedge reset_n) if (!reset_n) sda_inner = 1b0 ; else if (sda_output_enable) sda_inner = sda_output; else sda_inner = 1bz ; assign I2C_SDA

6、 = sda_inner;assign sda_input = I2C_SDA ;三態(tài)電路注意事項總結(jié)o 在寫數(shù)據(jù)時方向為主從,則enable位高無效,此時SDA位輸入方向o 當(dāng)從器件響應(yīng)時,則enable為低電平此時輸出響應(yīng)位SDA為輸出方向o 默認(rèn)SDA位輸入I2C控制器的實現(xiàn)步驟說明(寫為例)o首先主器件發(fā)起始bit,從器件檢測起始bito再進行從器件地址檢測(與從器件地址比較,如果正確則響應(yīng),如果不正確則不作響應(yīng))o解析寫bitoCPLD發(fā)響應(yīng)o解析寄存器地址oCPLD發(fā)響應(yīng)o主器件發(fā)高8位oCPLD發(fā)響應(yīng)o主器件發(fā)低8位oCPLD發(fā)響應(yīng)o主器件發(fā)停止位結(jié)束檢測起始bit(首先檢測SD

7、A下降沿)再檢測SDA下降沿是否在SCL高電平下代碼實現(xiàn)/detect sda startalways (posedge clk or negedge reset_n) if (!reset_n) sda_start = 1b0 ; else if (scl_in_d2) if (sda_in_reg) sda_start = 1b1 ; else sda_start = 1b0 ; 檢測停止bit(檢測SDA上降沿)再檢測SDA上升沿是否在SCL高電平下代碼實現(xiàn)/detect sda stopalways (posedge clk or negedge reset_n) if (!reset

8、_n) sda_stop = 1b0 ; else if (scl_in_d2) if (sda_in_pos) sda_stop = 1b1 ; else sda_stop = 1b0 ; .移位寄存器(串并轉(zhuǎn)換過程)/*sda series shift to parallel*/ /sda shift to registeralways (posedge clk or negedge reset_n) if (!reset_n) sda_in_shift = 8b0 ; else if (sda_valid) if (scl_en) sda_in_shift = sda_in_shift6

9、:0,sda_input;串轉(zhuǎn)并后與本地從器件地址比較/*judge slave cpld address and read or write*/ always (posedge clk or negedge reset_n) if (!reset_n) cpld_device_address_right = 1b0 ; else if (sda_valid) if (bit_cnt_d1 = 4b0111 & byte_cnt = 8b0 & scl_in_reg) if (cpld_device_address = sda_in_shift7:1) cpld_device_

10、address_right = 1b1; else cpld_device_address_right = 1b0; else cpld_device_address_right = cpld_device_address_right ; else cpld_device_address_right = 1b0 ;o 當(dāng)完整接受到16bit后,產(chǎn)生寫使能到寫寄存器always (posedge clk or negedge reset_n) if (!reset_n) register_wr = 1b0 ; else if (sda_write_valid) if (bit_cnt_d1 =

11、4b0111 & scl_en & byte_cnt = 8b00000011) /& sda_ack register_wr = sda_write_enable; else register_wr = register_wr ; else register_wr = 1b0 ;最后需要看下響應(yīng)bit/*ack */ always (posedge clk or negedge reset_n) if (!reset_n) sda_ack = 1b0 ; else if (scl_in_reg_d1) if (cpld_device_address_right & bit_cnt_d1 = 4b0111 ) sda_ack = 1b1 ; /ack enable else if (!cpld_device_address_right | sda_stop | bit_cnt_d1 = 4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論