新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于UART的智能卡接口IP核設計

        基于UART的智能卡接口IP核設計

        作者: 時間:2012-12-16 來源:網絡 收藏

        核主要有三大模塊;發送模塊(TX)、接收模塊(RX)、寄存器模塊(REG)。與CPU連接端為Avalon總線,與外部連接端為txd和rxd其主要結構和信號連接如圖3所示。

        本文引用地址:http://www.104case.com/article/189738.htm

        h.JPG


        REG模塊通過tx_wr_strobe把數據tx_data寫到TX模塊中,TX模塊按照設定的波特率往txd串行發送數據,同時把發送寄存器和發送移位寄存器的狀態通過tx_ready和tx_shift_empty傳回REG模塊。
        RX模塊根據設定的波特率對rxd進行采樣接收,當接收到1字節有效數據時置rx_char_ready有效,REG模塊通過rx_rd_strobe讀取接收的數據。
        REG模塊中包含控制寄存器、狀態寄存器、波特率寄存器、數據寄存器,還包含Avalon總線邏輯以及各種寄存器的操作邏輯。
        2.2 結構設計,
        的引腳有電源、地、復位、時鐘、數據,其中只有復位和數據線與操作有關,因此在中只需要復位線和數據線。
        操作過程中,接收的數據和發送的指令都需要哲存在內,因此要在核上增加發送和接收緩沖。除此之外,還需要增加協議處理模塊用于操作過程中的判斷和交互,增加收發切換模塊實現異步半雙工的切換,增加發送控制模塊用于發送不同的數據。基于核的智能卡接口IP核結構如圖4所示。

        f.JPG


        圖4中,保留UART的RX和TX模塊不變,在REG模塊中增加了RX_BUF、TX_BUF、緩沖區長度寄存器,還增加了清緩沖區等功能。
        在UART核的基礎上增加協議處理模塊,它是操作智能卡的核心。協議處理模塊從RX模塊直接截取數據并處理,根據流程進行各種操作。協議處理模塊可以清除接收緩沖區中的過程數據、清除無效的發送指令,協議處理模塊還控制收發的切換、控制發送指令、控制IC卡復位。
        發送控制根據協議處理中的狀態和命令,發送不同的指令到智能卡中。
        2.3 協議處理的實現
        在圖4中,協議處理模塊是實現CPU與智能卡交互的關鍵,本文采用狀態轉換的方法來實現。根據復位操作(圖1)和指令操作(圖2)的流程,可將智能卡的操作總結為7種狀態:空閑狀態、復位狀態、接收1字節狀態、接收定長數據狀態、收到0x61狀態、收到0x6c狀態、其他狀態。狀態轉換的主要條件是接收到特定的數據或接收到特定個數的數據,輔助條件是當前的狀態和其他參數。狀態轉換圖如圖5所示。

        a.JPG


        空閑狀態:剛上電或無操作時處于空閑狀態,IP核等待CPU的命令。
        復位狀態:在空閑狀態下收到復位命令后,復位智能卡并進入復位狀態,等待接收數據。根據前2字節的回復設置接收數據長度,然后進入接收定長數據狀態。
        接收定長數據狀態:根據前一狀態的設置,等待接收固定個數的數據,當接收到設定個數的數據時,向CPU發送中斷請求并跳轉到空閑狀態。
        接收1字節狀態:在空閑狀態下當有效指令操作下發時,發送5字節命令頭,進入接收1字節狀態。在該狀態下,收到0x60則不進行任何處理;收到INS時需判斷LC,若LC不為0則發送剩余指令,若LC為0則設置接收長度進入到接收定長數據狀態;接收到0x61或0x6c則分別進入到相應狀態;接收到其他回復則設置固定接收長度為2,并進入接收定長數據狀態。
        收到0x61狀態;接收1字節數據為0x61時進入該狀態,在該狀態下等待接收1字節數據并將該數據加到00 C0 00 00后一起發送,同時回到接收1字節狀態。
        收到0x6c狀態:與收到0x61過程基本一樣,將接收到的數據加到CLA INS P1 P2后面發送。
        設計時,在非空閑狀態下設定超時計數器,計數器溢出后無條件返回到空閑狀態,同時清除接收和發送緩沖,表示本次操作失敗。另外,所有的過程字節在狀態處理時都被清除。



        關鍵詞: UART IP核 智能卡 接口

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 嘉祥县| 凤翔县| 雷山县| 图木舒克市| 花莲县| 扬中市| 光山县| 曲麻莱县| 庐江县| 延长县| 景宁| 柯坪县| 苍南县| 平远县| 芦山县| 凭祥市| 南溪县| 枣阳市| 通城县| 鸡东县| 临夏市| 岫岩| 汝城县| 德兴市| 定兴县| 观塘区| 宜黄县| 崇礼县| 广汉市| 富裕县| 库车县| 柳河县| 安康市| 阿鲁科尔沁旗| 基隆市| 浙江省| 武汉市| 丹寨县| 曲麻莱县| 关岭| 浑源县|