新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于CPLD的I2C總線接口設(shè)計(jì)

基于CPLD的I2C總線接口設(shè)計(jì)

作者: 時(shí)間:2011-03-21 來(lái)源:網(wǎng)絡(luò) 收藏


該設(shè)計(jì)由7個(gè)單元組成,它們分別是:用于調(diào)整數(shù)據(jù)傳輸速率的Clock單元;用于實(shí)現(xiàn)同CPU并行接口的PcPort單元:用于產(chǎn)生工作時(shí)序的Step單元;用于產(chǎn)生數(shù)據(jù)傳輸時(shí)序的BitTiming單元;用于產(chǎn)生I2C使能信號(hào)的En12C單元:用于產(chǎn)生I2C總線接口模塊工作狀態(tài)指示的Status單元:以及用于產(chǎn)生I2C接口時(shí)鐘信號(hào)SDL和數(shù)據(jù)串行輸入輸出信號(hào)SDA的I2CPORT單元。
2.1 Clock單元
整個(gè)接口模塊以CPU的系統(tǒng)時(shí)鐘作為主時(shí)鐘信號(hào),模塊傳輸數(shù)據(jù)的速率受該時(shí)鐘頻率的控制,時(shí)鐘頻率高則模塊傳輸數(shù)據(jù)的速率也高,反之亦然??紤]到各種具有I2C總線接口的芯片的工作速率差別較大(從幾十kB/s到幾MB/s),該接口模塊的工作速率必須能夠靈活調(diào)整,以適應(yīng)不同外設(shè)芯片的接口需要。
Clock單元實(shí)際上就是一個(gè)分頻器,它在輸出頻率控制碼CKSEL[7..0]的控制下產(chǎn)生對(duì)PCCLK分頻后合適的時(shí)鐘信號(hào)供I2C接口使用。
2.2 I2CStep單元
通過(guò)對(duì)圖1中I2C總線各種工作模式的分析,可知不同的工作模式都是按特定的工作流程串行輸入、輸出數(shù)據(jù)的,例如字節(jié)寫(xiě)模式的工作流程為:發(fā)送開(kāi)始信號(hào)、串行輸出被叫芯片的片選地址、發(fā)送寫(xiě)信號(hào)、等待被叫芯片響應(yīng)、串行輸出被叫芯片存儲(chǔ)單元的地址、等待被叫芯片響應(yīng)、串行輸出寫(xiě)入的數(shù)據(jù)、等待被叫芯片響應(yīng)、發(fā)送結(jié)束信號(hào)結(jié)束本次操作。
為了使接口模塊正確工作,模塊在接收到來(lái)自CPU的工作模式控制信號(hào)I2CMD[2..0]后,根據(jù)工作模式的不同產(chǎn)生接口模塊工作流程。當(dāng)前流程結(jié)束后由Status單元產(chǎn)生IncStep信號(hào),控制工作流程指向下一階段。該模塊的功能類(lèi)似一個(gè)計(jì)數(shù)器,它在I2CMD[2..0]和I2CStep的共同作用下,產(chǎn)生長(zhǎng)度不等的工作流程信號(hào)Step[6..0]。
2.3 BitTiming單元
在I2C總線工作流程的不同階段,I2C接口模塊需要按一定的時(shí)序完成不同的工作,通過(guò)對(duì)總線數(shù)據(jù)傳輸模式的分析可知,在一個(gè)數(shù)據(jù)傳輸模式的所有工作流程中,輸入、輸出8位數(shù)據(jù)的工作流程用時(shí)最長(zhǎng),需要25個(gè)工作時(shí)序周期,為了滿足所有工作流程的需要,工作時(shí)序Bit-Timing單元被設(shè)計(jì)成最長(zhǎng)可產(chǎn)生31個(gè)時(shí)鐘周期的工作時(shí)序。
該單元在IncStep=‘1’時(shí)復(fù)位工作時(shí)序;在EnTiming信號(hào)有效后的每個(gè)SysCLK的上升沿使工作時(shí)序信號(hào)EnTiming加1,用于控制I2CPORT單元按給定的時(shí)序串行輸入、輸出數(shù)據(jù)信息。
2.4 Status單元
在I2C總線工作過(guò)程中,CPU需要隨時(shí)了解I2C接口模塊的發(fā)送數(shù)據(jù)寄存器是否為空、接收數(shù)據(jù)寄存器是否準(zhǔn)備數(shù)據(jù)好、從機(jī)響應(yīng)信號(hào)是否正確、當(dāng)前工作流程是否完成等工作狀態(tài),只有在發(fā)送數(shù)據(jù)寄存器為空時(shí),CPU才可以向接口模塊寫(xiě)入待傳輸數(shù)據(jù);只有在接收數(shù)據(jù)寄存器數(shù)據(jù)準(zhǔn)備好后,CPU才可以從接口模塊讀入正確的接收數(shù)據(jù);從機(jī)響應(yīng)信號(hào)不正確時(shí),CPU應(yīng)立即發(fā)出結(jié)束信號(hào)結(jié)束本次操作;當(dāng)前工作流程未完成前不能進(jìn)行下一流程。這些狀態(tài)信號(hào)全部由Status單元產(chǎn)生。
在該單元中,共有4種輸出信號(hào),它們分別是:用于指示發(fā)送數(shù)據(jù)寄存器是否為空的TxSTS狀態(tài),該狀態(tài)在CPU寫(xiě)入數(shù)據(jù)后置‘1’,數(shù)據(jù)被發(fā)送后清‘0’;用于指示接收數(shù)據(jù)準(zhǔn)備好狀態(tài)的RxSTS信號(hào),該信號(hào)在模塊接收到完整的數(shù)據(jù)后置‘1’,數(shù)據(jù)被CPU讀走后清‘0’;用于指示模塊工作狀態(tài)的ACKSTS信號(hào),該信號(hào)在模塊工作正常(接收到從機(jī)響應(yīng)信號(hào))時(shí)自動(dòng)置‘1’,工作不正常時(shí)自動(dòng)清‘0’;用于使工作流程指向下一階段的IncStep信號(hào),該信號(hào)在當(dāng)前工作流程完成后由模塊自動(dòng)產(chǎn)生,用于使模塊的工作流程指向下一階段。
2.5 EnI2C單元
在I2C總線接口模塊中,BitTiming單元何時(shí)開(kāi)始產(chǎn)生工作時(shí)序,需要時(shí)序信號(hào)控制,I2CPORT單元何時(shí)向I2C總線輸出信息、何時(shí)從I2C總線上讀入信息也需要時(shí)序信號(hào)控制。這些控制時(shí)序的產(chǎn)生由EnI2C單元完成。
EnI2C單元在I2CMD[2..0]、Step[6..0]、TxSTS、RxSTS等信號(hào)的控制下,從預(yù)先存儲(chǔ)于單元內(nèi)部的一組I2C工作時(shí)序信息中讀出當(dāng)前的時(shí)序信息輸出,控制BitTiming和I2CPORT單元工作。
模塊中,預(yù)先存儲(chǔ)的I2C工作時(shí)序信息實(shí)現(xiàn)如下:



關(guān)鍵詞: CPLD I2C 總線 接口設(shè)計(jì)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉