一款基于FPGA的I2C總線的設(shè)計方案
0 引言
本文引用地址:http://www.ex-cimer.com/article/234978.htm由于在嵌入式系統(tǒng)開發(fā)中越來越多的應(yīng)用到FPGA,而一些嵌入式CPU,比如STM32 為了降低成本,減小封裝尺寸,沒有外接專門的CPU 讀寫總線,而只提供了一些如SPI 和I2C 的接口。而且在應(yīng)用中經(jīng)常有數(shù)據(jù)要配置到FPGA 中,如FPGA 中的應(yīng)用配置寄存器,和配置表項等,都需要CPU 配置。這些數(shù)據(jù)的數(shù)據(jù)量不大,速度也不要求很高,很適合用I2C 總線來配置。
I2C 總線是Philips 公司設(shè)計的一種控制和配置內(nèi)部IC 雙向兩線的串行總線。主要特點是接口信號線較少,但是其數(shù)據(jù)的傳送速率不是很高,其高速模式下為3.4Mb/s.應(yīng)用于配置FPGA 比較適合。在通常的應(yīng)用中嵌入式CPU 作為MASTER 模式的主器件,F(xiàn)PGA 作為SLAVE 模式的從器件。通過使用I2C 總線,減少了CPU 和FPGA 的連線,而且嵌入式CPU 一般有內(nèi)含I2C總線控制器,使得CPU 和FPGA 間的通訊硬件電路簡化。
1 I2C SLAVE 模式整體結(jié)構(gòu)的分析設(shè)計
I2C 總線要求兩條信號線,一條串行數(shù)據(jù)線 SDA,一條串行時鐘線 SCL.通過串行方式傳送數(shù)據(jù)。它是一個多主器件的總線,如果兩個或更多主器件同時傳輸數(shù)據(jù),可以沖突檢測和仲裁。為簡化設(shè)計和滿足應(yīng)用要求,該設(shè)計實現(xiàn)一個標(biāo)準(zhǔn)I2C總線的子集。完成1 字節(jié)的單次讀寫和連續(xù)讀寫功能。所以這就要求應(yīng)用中的I2C 總線上只能有一個主器件,而FPGA 邏輯則只能當(dāng)成從器件。I2C 總線的兩條信號線都是開漏的,必須外接上拉電阻,以保證總線空閑時,總線都處于高電平。I2C的讀寫時序圖如圖1.
從圖1 中可以看出,總線的起始條件為在SCL 為高電平時,SDA 拉低產(chǎn)生一個下降沿。而總線的停止條件為在SCL 為高電平時,SDA 釋放由上拉電阻產(chǎn)生一個上升沿。在快速模式下,SCL 時鐘頻率最大值為400KHz,SCL 時鐘的低電平周期最小為1.3μs,SCL 時鐘的高電平周期最小為0.6μs.在輸入端,輸入濾波器必須抑制的毛刺脈寬最大值為50ns.由于SCL是由主器件CPU 的內(nèi)置I2C 模塊產(chǎn)生的,所以SCL 的時序肯定符合要求。而FPGA 要采樣SCL 和SDA 信號,那么FPGA 的采樣時鐘頻率至少要為SCL 頻率的2 倍以上。再加上抑制的毛刺脈寬最大值為50ns.當(dāng)FPGA 的系統(tǒng)時鐘為100MHz 時,端口以100MHz 的頻率采樣信號,遠(yuǎn)遠(yuǎn)大于快速模式下SCl 的400KHz,抑制的毛刺也將在5 個時鐘周期內(nèi)處理。而且FPGA內(nèi)部邏輯一般都工作在100MHz 以上,所以I2C 模塊的系統(tǒng)時鐘可以直接使用FPGA 的系統(tǒng)時鐘,可以省去時鐘轉(zhuǎn)化模塊,簡化處理。當(dāng)I2C 總線讀FPGA 時,總線主器件在發(fā)送完第一個字節(jié),F(xiàn)PGA 回復(fù)ACK 后,緊接著就要FPGA 輸出相應(yīng)的數(shù)據(jù),所以在FPGA 邏輯發(fā)出ACK 的同時就要開始,F(xiàn)PGA 的內(nèi)部尋址和讀取相應(yīng)的數(shù)據(jù),在SCL 時鐘頻率最大值為400KHz 時,F(xiàn)PGA 的系統(tǒng)時鐘為100MHz,那么FPGA 的內(nèi)部邏輯有約250個時鐘周期的尋址時間,這個時間是完全夠用的。I2C SLAVEmode 整體結(jié)構(gòu)圖如圖2.
接口信號的說明如表1.
2 I2C SLAVE 模式控制器的設(shè)計與實現(xiàn)
2.1 I2C SLAVE 控制器的接口實現(xiàn)
I2C SLAVE 控制器的接口部分主要包括,信號異步時鐘域的轉(zhuǎn)換。輸入濾波器,用來抑制毛刺。及SDA 線的雙向轉(zhuǎn)換。由于SDA 的PIN 是雙向的,所以一定要分配在FPGA 的IO BLOCK塊中,只有IO BLOCK 中有雙向的硬件結(jié)構(gòu)。因為SDA 和SCL信號的相位相對于FPGA 邏輯的系統(tǒng)時鐘的相位關(guān)系是不確定的。所以一定要進行異步時鐘域的轉(zhuǎn)換,以防止輸入的寄存器出現(xiàn)亞穩(wěn)態(tài),它會使邏輯處在某個不確定的狀態(tài)。此外FPGA的系統(tǒng)時鐘頻率比較高,對輸入的毛刺比較敏感,故輸入端要加入濾波器。接口部分的框圖如圖3.
評論