新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于CPLD的I2C總線接口設計

        基于CPLD的I2C總線接口設計

        作者: 時間:2011-03-21 來源:網絡 收藏


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



        關鍵詞: CPLD I2C 總線 接口設計

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南溪县| 颍上县| 侯马市| 托里县| 徐州市| 苍山县| 克什克腾旗| 金湖县| 德州市| 江源县| 醴陵市| 措美县| 蛟河市| 沛县| 东乡县| 南江县| 小金县| 田东县| 邢台市| 石景山区| 武乡县| 河北省| 新竹县| 安塞县| 察隅县| 宜阳县| 朝阳区| 罗平县| 乳山市| 临江市| 通河县| 萨嘎县| 锡林浩特市| 米脂县| 延吉市| 越西县| 津南区| 淳安县| 布拖县| 秦安县| 图们市|