新四季網

一種實現多卡槽訪問的方法和裝置的製作方法

2023-07-19 09:38:06 2

專利名稱:一種實現多卡槽訪問的方法和裝置的製作方法
技術領域:
本發明涉及數據通訊領域,特別涉及一種實現多卡槽訪問的方法和裝置。
背景技術:
CCID (USB Chip/Smart Card Interface Devices-USB,晶片智慧卡接口設備)標 準是由幾大國際級IT企業共同制定的一個標準,它提供了一種智慧卡讀寫設備與主機或 其他嵌入式主機之間實現相互通訊的可能。CCID標準規定了 CCID設備是一種晶片/智 能卡接口設備,設備通過USB接口與主機或其他嵌入式主機連接,進行符合CCID標準的 數據通信,同時設備通過符合7816標準協議的接口與智慧卡進行通訊。微軟公司在其 WIND0WS2000及以上的作業系統上提供並支持CCID驅動,使設備生產廠商可以輕鬆的開發 使用符合CCID接口標準的設備。同時,CCID接口標準支持PC (Personal Computer個人計 算機)/SC(Smart Card智慧卡)接口調用,使廣大開發者可以方便的對智能密鑰設備進行 開發操作。在其他開源作業系統如LINUX的眾多版本上,也有許多開源的CCID驅動可供開 發者和使用者使用。 在實現本發明的過程中,發明人發現現有技術至少存在以下缺點 CCID協議是一個單通道協議,支持多卡槽的訪問,但微軟的CCID驅動在對讀卡器
操作時,僅可以對一個卡槽進行訪問。

發明內容
為了實現CCID協議下的多卡槽訪問,本發明實施例提供了 一種實現多卡座訪問 的方法和裝置。所述技術方案如下 —種實現多卡槽訪問的方法,其特徵在於,所述方法包括 多卡槽的CCID設備與主機建立連接,將至少一對用來實現應答管道和命令管道 的IN/OUT端點聲明為BULK-IN和BULK-OUT端點,將至少一個用來實現事件通知管道的IN 端點聲明為中斷端點,並向所述主機聲明其自身是符合CCID接口標準的設備以及自身支 持的卡槽數; 主機對所述多卡槽的CCID設備進行訪問; 所述多卡槽的CCID設備接收BULK-OUT數據包,並根據所述BULK-OUT數據包判斷 所述主機下發的CCID命令的類型; 當所述CCID命令類型是通道擴展命令時,則判斷所述通道擴展命令是否是通道 切換命令;如果所述通道擴展命令是通道切換命令時,則解析所述通道切換命令,並激活所 述主機欲訪問的相應卡槽;如果所述通道擴展命令不是通道切換命令時,則根據所述通道 擴展命令的命令類型進行相應的處理; 當所述CCID命令的類型不是通道擴展命令,則根據所述CCID命令類型進行相應 的處理。 向所述主機聲明其自身支持的卡槽數,具體包括
所述CCID設備向所述主機發送卡槽描述符,所述卡槽描述符中使用一個字節表 示CCID設備自身支持的卡槽數。 根據所述BULK-OUT數據包判斷所述主機下發的CCID命令的類型,具體包括
所述CCID設備解析符合CCID標準的命令流,拆分所述命令流的包頭中的第一個 其中,當所述第一個字節為6B時,表示通道擴展命令。
判斷所述通道擴展命令是否是通道切換命令,具體包括 所述CCID設備解析所述通道擴展命令,根據所述通道擴展命令中的標識符欄位
得到該命令的的命令類型; 其中,所述標識符是自定義標識符。 解析所述通道切換命令,並激活所述主機欲訪問的相應卡槽,具體包括
所述CCID設備中的固件程序拆分所述通道切換命令的包頭; 通過計算所述通道切換命令包頭中的數據長度標誌,獲知數據包的長度及所述數 據包在所述CCID設備收發緩衝中的位置,得到所述通道切換命令數據包中的標識符,所述 標識符用於標識所述通道切換命令的具體用途; 如果所述標識符表示該通道切換命令是用於卡槽切換的,則查看所述通道切換命 令的第13個字節,得到本條通道切換命令所要訪問的卡槽序號; 通過所述CCID設備的電路控制程序單元將所述卡槽序號所對應的卡槽激活。
所述方法還包括判斷被激活卡槽中是否有智慧卡插拔事件信息; 如果有,則向所述主機返回符合CCID標準的智慧卡插拔事件信息; 如果沒有,則繼續執行所述多卡槽的CCID設備接收BULK-OUT數據包的步驟。 所述判斷是否有智慧卡插拔事件信息,具體包括 判斷所述CCID設備的收發緩衝中是否有所述智慧卡插拔事件信息,所述智慧卡 插拔事件信息由所述CCID設備在接收到有智慧卡插入或拔出的中斷信號時寫入到所述收 發緩衝中。 —種多卡槽的CCID設備,所述設備包括接口模塊、主控模塊、判斷模塊和卡槽切 換電路模塊; 所述接口模塊,分別與主機和所述主控模塊相連接,用於實現所述主機與所述主 控模塊之間的信息交互; 所述主控模塊,分別與所述接口模塊和所述判斷模塊相連接,用於控制所述接口 模塊接收主機下發的命令流,控制所述判斷模塊接收智慧卡發送的應答,控制所述判斷模 塊發送命令流中的數據包到所述智慧卡,控制所述接口模塊發送符合CCID標準的應答數 據包到所述主機; 所述判斷模塊,分別與所述主控模塊和所述卡槽切換電路模塊相連接,用於判斷 CCID設備中是否有智慧卡插拔事件信息,並將所述智慧卡插拔事件信息通過所述主控模塊 返回給所述主機, 所述卡槽切換電路模塊,分別與所述判斷模塊和卡槽相連接,用於接收所述主控 模塊發送的命令流;如果接收到所述主控模塊發送的通道切換命令,則根據卡槽序列號激 活相應的卡槽;如果接收到所述主控模塊發送的其他命令,則將所述其他命令發送給所述智慧卡,並將所述智慧卡的應答數據包發送給所述判斷模塊。
所述接口模塊具體包括描述符設置單元和端點設置單元; 所述描述符設置單元,用於設置符合CCID標準中規定的設備類型描述符及卡槽 描述符;所述CCID設備通過所述設備類型描述符向主機聲明自身是CCID設備,通過所述卡 槽描述符向主機聲明自身支持的卡槽數; 所述端點設置單元,用於將至少一對用來實現應答管道和命令管道的IN/OUT端 點設置為BULK-IN和BULK-OUT端點,將至少一個用來實現事件通知管道的IN端點聲明為 中斷端點。 所述主控模塊具體包括 接收單元,用於接收所述主機通過所述接口模塊發送的命令流,及接收智慧卡通 過所述判斷模塊返回的應答; 解析單元,用於解析所述接收單元接收到的所述命令流; 拆分單元,用於拆分所述解析單元解析出來的命令流的包頭中的第一個字節,得
到該命令流的命令類型,其中,當第一個字節為6B時,表示通道擴展命令; 計算單元,用於根據所述接收單元接收到的命令流中的數據長度標誌,確定命令
流中的數據包長度和所述數據包在所述CCID設備收發緩衝中的位置; 應答組成單元,用於將應答組成符合CCID標準的應答數據包; 第一判斷單元,用於根據所述接收模塊接收到的BULK-OUT數據包判斷主機下發
的CCID命令的類型; 第二判斷單元,用於當所述第一判斷單元的判斷結果為通道擴展命令時,判斷所 述通道擴展命令是否是通道切換命令; 第一處理單元,用於如果所述第一判斷單元的判斷結果為不是通道擴展命令時, 根據所述CCID命令類型進行相應的處理; 第二處理單元,用於如果所述第二判斷單元的判斷結果為通道擴展命令不是通道 切換命令時,根據所述通道擴展命令的命令類型進行相應的處理; 發送單元,用於發送所述主機下發的命令流給所述智慧卡,及發送智慧卡返回的 應答給所述主機。 所述第二判斷單元具體包括 拆分子單元,用於拆分通道切換命令的包頭; 第一獲得子單元,用於通過計算通道切換命令包頭中的數據長度標誌,獲知數據 包的長度及所述數據包在CCID設備收發緩衝中的位置,得到通道切換命令數據包中的標 識符,所述標識符用於標識通道切換命令的具體用途; 第二獲得子單元,用於當所述第一獲得單元獲得的標識符表示該通道切換命令是 用於卡槽切換時,查看通道切換命令的第13個字節,得到本條通道切換命令所要訪問的卡
槽序號。
所述判斷模塊具體用於 判斷CCID設備的收發緩衝中是否有智慧卡插拔事件信息,智慧卡插拔事件信息 由CCID設備在接收到有智慧卡插入或拔出的中斷信號時寫入到收發緩衝中。
本發明實施例提供的技術方案帶來的有益效果是
實現微軟windows下的讀卡器驅動能夠支持多卡槽訪問,並且還支持li皿x下的 讀卡器驅動的多卡槽訪問。


圖1是本發明實施例1中提供的
圖2是本發明實施例2中提供的
圖3是本發明實施例3中提供的
圖4是本發明實施例4中提供的
種以查詢方式實現多卡槽訪問的方法流程圖 種以查詢方式實現多卡槽訪問的方法流程圖 種以中斷方式實現多卡槽訪問的方法流程圖 種實現多卡槽訪問的裝置結構示意圖。
具體實施例方式
為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方 式作進一步地詳細描述。 在描述本發明具體實施例之前,這裡需要說明的是,根據CCID協議,符合CCID接 口標準的設備,其端點需要包括如下特徵至少一對IN/OUT端點聲明為BULK-IN、BULK-OUT 端點,用來實現應答和命令管道;至少一個IN端點聲明為中斷端點,用來實現事件通知管 道。符合CCID接口標準的設備,其描述符需要包括如下特徵在接口描述符中,字節O是 描述符的字節長度,值為09h,字節1是固定終端,值為04h,字節4代表其所支持的終端號 (除了終端0),值為02h或03h,字節5是類代碼,值為0Bh,字節6為子類代碼,值為00h,字 節7是協議代碼,值為00h ;在類型描述符中,字節0是描述符的字節長度,值為36h,字節2 是CCID規範的版本號,它是用二進位代碼表示的小數,值為OlOOh,字節52是PIN碼支持, 值為00h-03h。符合CCID接口標準的設備的其它描述符中的字節,如設備描述符、配置描述 符中的字節以及上述接口描述符和類型描述符中其它字節仍按照USB協議中的規定設置。
實施例1 本發明實施例1提供了一種實現多卡槽訪問的方法,本實施例以多卡槽讀卡器這 種常見的CCID設備為例,並假設與該多卡槽讀卡器連接的主機中安裝有微軟的CCID協議 的讀卡器驅動,多卡槽讀卡器通過自定義通道切換命令、並配合卡槽切換電路實現了多卡 槽讀卡器中的多個卡槽共享一條USB總線與主機進行通信。其中需要說明的是,主機與 CCID設備之間可以通過兩條通信管道進行通信,一條為批量傳輸管道,用於進行數據的傳 輸,如上電、下電指令、執行APDU(A卯lication Protocol Data Unit應用協議數據單元)、 主機與CCID設備按照一應一答的方式通過批量傳輸管道進行數據的交互;一條為中斷傳 輸管道,用於傳輸異步事件,如插卡、拔卡及卡短路等,CCID設備就會通過中斷傳輸管道向 主機發送信號。參見圖l,該方法包括 步驟101 :CCID設備與主機建立連接,進行初始化; 在本實施例中,該CCID設備通過USB接口與主機建立連接。 具體的,CCID設備的初始化過程可以包括初始化中斷向量、初始化1/0信號等。 其中的中斷可以包括USB中斷、插拔卡事件中斷等。 步驟102 :初始化完成後,CCID設備設置至少一對用來實現應答和命令管道的IN/ OUT端點聲明為BULK-IN和BULK-OUT端點,設置至少一個用來實現事件通知管道的IN端 點,並聲明為中斷端點,並向主機聲明其自身是符合CCID接口標準的設備;
其中,可以採用設備類型描述符的形式實現聲明其自身是CCID設備,具體包括 CCID設備向與其建立連接的主機發送CCID類型的設備描述符,主機接收到該CCID類型的 設備描述符後,根據該CCID類型的設備描述符識別該建立連接的設備為CCID設備。
步驟103 :CCID設備向主機聲明自身支持的卡槽數; 其中,可以採用設備卡槽描述符的形式實現聲明其自身支持的卡槽數,具體包括 CCID設備向與其建立連接的主機發送卡槽描述符,卡槽描述符中用一個字節表示CCID設 備自身支持的卡槽數,例如,當卡槽描述符為"OO"時,表示CCID設備支持一個卡槽;當卡槽 描述符為"01"時,表示CCID設備支持兩個卡槽,當卡槽描述符為"02"時,表示CCID設備 支持三個卡槽,等等。 主機接收到卡槽描述符後,主機加載的讀卡器驅動即為讀卡器的卡槽創建物理設 備對象。其中,如果主機加載的是微軟的CCID協議的讀卡器驅動,則主機在接收到卡槽描 述符時,為多卡槽讀卡器創建一個物理設備對象,即為默認的卡槽創建物理設備對象,與默 認卡槽(如1號卡槽)相對應;如果主機加載Li皿x下的CCID協議的讀卡器驅動,則主機 在接收到卡槽描述符時,根據卡槽描述符攜帶的卡槽數,創建相應數目的物理設備對象,分 別與讀卡器的各個卡槽相對應。 步驟104 :CCID設備檢查USB標誌,判斷USB標誌是否為接收到BULK-OUT包的標 志; 如果是,則執行步驟105 ;
如果否,則執行步驟113 ; 其中,USB標誌是由CCID設備中的硬體電路設置或清除的。USB標誌包括數據包 長度標誌、數據包類型標誌和接收到的數據包標誌等。例如,接收到的USB標誌是SETUP包 的標誌、IN包的標誌、BULK-OUT包的標誌、BULK-OUT包長度標誌等。 步驟105 :CCID設備接收BULK-OUT包,並判斷是否正確接收到BULK-OUT數據包;
如果是,執行步驟106;
如果否,執行步驟104; 其中,判斷是否正確接收到BULK-OUT數據包的過程可以為根據接收到的數據包 長度標誌及數據包的發送長度標誌進行判斷,如果接收到的數據包長度與數據包的發送長 度標誌一致,則認為是正確接收到了 BULK-OUT數據包。 步驟106 :CCID設備解析BULK-OUT數據包的內容,並判斷是何種類型的CCID命 令; 如果是通道擴展命令,則執行步驟108 ;
如果不是通道擴展命令,則執行步驟107。 其中,判斷數據包中的內容是何種類型的CCID命令的過程可以為CCID設備解析 符合CCID標準的命令流,拆分命令流的包頭中的第一個字節,得到該命令流的命令類型。 例如,第一個字節為6B,表示通道擴展命令;第一個字節為62,表示上電命令;第一個字節 為61,表示設置參數命令;等等。 其中,通道擴展命令是CCID協議標準留給生產廠家自己定義的擴展命令,通過該 擴展命令可以對CCID設備進行區別於其他CCID協議標準的操作,生成廠家可以修改該通 道擴展命令的第11、12位元組(即標識符欄位)的內容,用於實現一些自定義的命令功能,如用於通道切換、對傳輸通道上的數據進行加解密操作等。 步驟107 :CCID設備根據CCID命令類型進行相應的處理,並將處理結果組裝成符 合CCID接口標準的數據包,且並將所述數據包保存至CCID設備緩衝區中,執行步驟111 ;
其中,根據CCID命令類型進行相應的處理可以包括當CCID命令類型為對智慧卡 進行上電或下電,則CCID設備對其卡槽中的智慧卡進行上電或下電處理;當CCID命令類型 為對智慧卡進行PPS (Protocol and Parameter Select變頻協商),則CCID設備對其卡槽 中的智慧卡進行變頻協商;當CCID命令類型為對智慧卡中的數據進行讀寫等操作,則CCID 設備對智慧卡中的數據進行讀寫等操作。 還需要知道的是,CCID命令中的第6個字節(即命令中的Slot欄位)表示的是 該智慧卡操作命令所對應的多卡槽CCID設備卡槽的編號; 另外,還需要知道的是如果主機加載微軟的CCID協議的讀卡器驅動,則CCID命 令中的第6個字節(即命令中的Slot欄位)是固定的00 ; 如果主機加載Li皿x下的CCID協議讀卡器驅動,則CCID命令中的第6個字節(即
命令中的Slot欄位)表示的是該智慧卡操作命令對應的多卡槽CCID設備卡槽的編號,如6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 表示1號卡座的取隨機數指令,第6位字節00表示1號卡槽 62 00 00 00 00 01 21 01 00 00 表示2號卡座的上電指令,第6位字節01表示2號卡槽 當多卡槽CCID設備接收到符合CCID標準的命令後,根據上述卡槽號對相應的卡 槽進行操作。 優選的,本實施例中主機中安裝的是微軟的CCID協議的讀卡器驅動。
步驟108 :CCID設備判斷通道擴展命令是否是通道切換命令;
如果是通道切換命令,則執行步驟110 ;
如果是其他通道擴展命令,則執行步驟109 ; 本步驟中所涉及到的判斷,具體過程為CCID設備中的固件程序拆分接收到的通
道擴展命令的包頭,並通過計算該命令包頭中的數據長度標誌,獲知數據包的長度及其在
CCID設備緩衝區中的位置,得到該命令流數據包中的標識符(命令中的第11、12個字節),
該標識符是CCID可以是生產廠家自己定製的,可以通過該標識符獲知該通道切換命令的
具體用途。如0x5aa5表示該通道擴展命令是通道切換命令,用於多卡槽CCID設備卡槽切
換,當然該標識符也可以是0xa55a等,取決於生產廠家的定義。 步驟109 :執行其他通道擴展命令相應的操作後,執行步驟111 ; 例如,該通道擴展命令是用於對傳輸通道上的數據進行加解密操作、讀flash或
寫flash操作等,則CCID設備執行相應的操作即可。具體的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示對CCID設備進行flash讀操作,第11、 12位字節6066是自定義的,表示讀 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示對CCID設備進行flash寫操作,第11、12為字節6660是自定義的,表示寫 flash
步驟110 :CCID設備中的固件程序對接收到的通道切換命令進行解析,得到該條 命令對應的卡槽,通過卡槽切換電路激活命令中指定的卡槽; CCID設備中的固件程序查看該通道切換命令的第13個字節,可以得到本條命令 所要激活的卡槽序號,然後通過CCID設備的電路控制程序單元將卡槽序號所對應的卡槽 激活。 具體在本實施例中,以使用的是微軟的CCID協議的讀卡器驅動為例,符合CCID標 準的通道切換命令中的Slot欄位(第6個字節)是固定的00。
假設CCID設備接收到的通道切換命令具體為 [O川]6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 該通道切換命令表示1號卡槽的隨機數指令,該條指令的第13個字節00表示1 號卡槽;6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff 該通道切換命令表示2號卡槽的隨機數指令,該條指令的第13個字節01表示2 號卡槽。 具體的,CCID設備通過電路控制程序單元將卡槽序號所對應的卡槽激活,具體實 現過程可以如下 —種優選的方式為,CCID設備的卡槽切換電路包括CPU(Central Processing Unit,中央處理單元)、一個CPU接口、多路選擇開關和電路控制程序單元;多路選擇開關分 別與CCID設備中的各個卡槽(例如卡槽1、卡槽2、卡槽3等)相連接;當CCID設備分析 得到卡槽的序號後,電路控制程序單元控制多路選擇開關將相應的卡槽之間的電路進行連 通。 另一種優選的方式,CCID設備卡槽切換電路包括CPU、多個CPU接口和電路控制程 序單元;多個CPU接口分別與CCID設備中的各個卡槽(例如卡槽1、卡槽2、卡槽3等)相 連接,當CCID設備分析得到卡槽的編號後,電路控制程序單元將CPU接口與相應的卡槽之 間的電路進行連通。 步驟111 :CCID設備檢測緩衝區中是否有智慧卡插拔事件信息;
如果有,則執行步驟112 ;
如果否,則返回步驟104 ; 其中,智慧卡插拔事件信息在CCID設備判斷到有智慧卡插入或拔出時寫入到緩 衝區中。 在本發明實施例中的卡槽有兩種情況,包括有卡和無卡;如果卡槽中沒有卡片插 入或者卡片從卡槽中拔出,卡槽就處於無卡狀態,產生無卡的中斷信號;如果卡片插入卡 槽,就處於有卡未上電狀態,產生有卡的中斷信號;主機下發上電指令,智慧卡響應並成功 返回ATR(Answer To Reset,復位應答)後,卡槽的狀態變為有卡已上電;主機下發下電指 令,智慧卡的卡槽狀態變為有卡未上電狀態。 當某一卡槽為激活的卡槽時,如果卡槽中有智慧卡的插入,則會產生有卡的中斷 信號0x5003 ;如果卡槽中有智慧卡的拔出,則會產生無卡的中斷信號0x5002 ;當某一卡槽 為未激活的卡槽時,發生插拔事件不會產生中斷信號。 需要說明的是,如果主機加載微軟的CCID協議的讀卡器驅動,則多卡槽CCID設備中卡槽中有卡的插拔動作時都將會產生相同的插拔卡中斷信息,例如 1號卡槽插入卡 0x5003 2號卡槽插入卡 0x5003 3號卡槽插入卡 0x5003 1號卡槽拔卡 0x5002 2號卡槽拔卡 0x5002 3號卡槽拔卡 0x5002 如果主機中加載Li皿x下的CCID協議的讀卡器驅動,則多卡槽CCID設備中卡槽
中有卡的插拔動作時,不同的卡槽將產生不同的插拔卡中斷信息,例如 1號卡槽插入卡 0x5003 2號卡槽插入卡 0x500c 3號卡槽插入卡 0x5030 1號卡槽拔卡 0x5002 2號卡槽拔卡 0x5008 3號卡槽拔卡 0x5020 步驟112 :CCID設備將智慧卡插入或拔出事件信息組裝成符合CCID接口標準的數 據包返回給主機,並執行步驟104 ; 步驟113 :CCID設備進行其他操作,並返回步驟104。 本發明實施例提供了一種實現多卡槽訪問的方法,實現微軟windows下的讀卡器
驅動能夠支持多卡槽訪問,並且還支持li皿x下的讀卡器驅動的多卡槽訪問。
實施例2 本發明實施例2提供了一種實現多卡槽訪問的方法,本實施例以多卡槽讀卡器這
種常見的CCID設備為例,並假設與該多卡槽讀卡器連接的主機中安裝有微軟的CCID協議
的讀卡器驅動,多卡槽讀卡器通過自定義通道切換命令、並配合卡槽切換電路實現了多卡
槽讀卡器中的多個卡槽共享一條USB總線與主機進行通信。其中需要說明的是,主機與
CCID設備之間可以通過兩條通信管道進行通信,一條為批量傳輸管道,用於進行數據的傳
輸,如上電、下電指令、執行APDU、主機與CCID設備按照一應一答的方式通過批量傳輸管道
進行數據的交互;一條為中斷傳輸管道,用於傳輸異步事件,如插卡、拔卡及卡短路等,CCID
設備就會通過中斷傳輸管道向主機發送信號。參見圖2,該方法包括 步驟201 :CCID設備與主機建立連接,進行初始化; 在本實施例中,該CCID設備通過USB接口與主機建立連接。 具體的,CCID設備的初始化過程可以包括初始化中斷向量、初始化1/0信號等。 其中的中斷可以包括USB中斷、插拔卡事件中斷等。 步驟202 :初始化完成後,CCID設備設置至少一對用來實現應答和命令管道的IN/ OUT端點聲明為BULK-IN和BULK-0UT端點,設置至少一個用來實現事件通知管道的IN端點 聲明為中斷端點,並向主機聲明其自身是符合CCID接口標準的設備; 其中,可以採用設備類型描述符的形式實現聲明其自身是CCID設備,具體包括 CCID設備向與其建立連接的主機發送CCID類型的設備描述符,主機接收到該CCID類型的 設備描述符後,根據該CCID類型的設備描述符識別該建立連接的設備為CCID設備。
步驟203 :CCID設備向主機聲明自身支持的卡槽數; 其中,可以採用設備卡槽描述符的形式實現聲明其自身支持的卡槽數,具體包括 CCID設備向與其建立連接的主機發送卡槽描述符,卡槽描述符中用一個字節表示CCID設 備自身支持的卡槽數,例如,當卡槽描述符為"OO"時,表示CCID設備支持一個卡槽;當卡槽 描述符為"01"時,表示CCID設備支持兩個卡槽。 主機接收到卡槽描述符後,主機加載的讀卡器驅動即為讀卡器的卡槽創建物理設 備對象。其中,如果主機加載的是微軟的CCID協議的讀卡器驅動,則主機在接收到卡槽描 述符時,為多卡槽讀卡器創建一個物理設備對象,即為默認的卡槽創建物理設備對象,與默 認卡槽(如1號卡槽)相對應;如果主機加載的Li皿x下的CCID協議的讀卡器驅動,則主 機在接收到卡槽描述符時,根據卡槽描述符攜帶的卡槽數,創建相應數目的物理設備對象, 分別與讀卡器的各個卡槽相對應。 步驟204 :CCID設備檢測緩衝區中是否有智慧卡插拔事件信息;
如果是,執行步驟205;
如果否,執行步驟206; 其中,智慧卡插拔事件信息在CCID設備判斷到有智慧卡插入或拔出時寫入到緩 衝區中。 在本發明實施例中的卡槽有兩種情況,包括有卡和無卡;如果卡槽中沒有卡片插 入或者卡片從卡槽中拔出,卡槽就處於無卡狀態,產生無卡的中斷信號;如果卡片插入卡 槽,就處於有卡未上電狀態,產生有卡的中斷信號;主機下發上電指令,智慧卡響應並成功 返回ATR(Answer To Reset,復位應答)後,卡槽的狀態變為有卡已上電;主機下發下電指 令,智慧卡的卡槽狀態變為有卡未上電狀態。 當某一卡槽為激活的卡槽時,如果卡槽中有智慧卡的插入,則會產生有卡的中斷 信號0x5003 ;如果卡槽中有智慧卡的拔出,則會產生無卡的中斷信號0x5002 ;當某一卡槽 為未激活的卡槽時,發生插拔事件不會產生中斷信號。 需要說明的是,如果主機加載微軟的CCID協議的讀卡器驅動,則多卡槽CCID設備
中卡槽中有卡的插拔動作時都將會產生相同的插拔卡中斷信息,例如 1號卡槽插入卡 0x5003 2號卡槽插入卡 0x5003 3號卡槽插入卡 0x5003 1號卡槽拔卡 0x5002 2號卡槽拔卡 0x5002 3號卡槽拔卡 0x5002 如果主機中加載Li皿x下的CCID協議的讀卡器驅動,則多卡槽CCID設備中卡槽
中有卡的插拔動作時,不同的卡槽將產生不同的插拔卡中斷信息,例如 1號卡槽插入卡 0x5003 2號卡槽插入卡 0x500c 3號卡槽插入卡 0x5030 1號卡槽拔卡 0x5002 2號卡槽拔卡 0x5008
3號卡槽拔卡 0x5020 步驟205 :CCID設備將智慧卡插入或拔出事件信息組裝成符合CCID接口標準的數 據包返回給主機,並執行步驟204 ; 步驟206 :CCID設備檢查USB標誌,判斷USB標誌是否為接收到BULK-OUT包的標 志; 如果是,則執行步驟207 ;
如果否,則執行步驟213。 其中,USB標誌是由CCID設備中的硬體電路設置或清除的。USB標誌包括長度標 志、數據包類型標誌和接收到的數據包標誌等。例如,接收到的USB標誌是SETUP包的標誌、 IN包的標誌、BULK-OUT包的標誌、BULK-OUT包長度標誌等。 步驟207 :CCID設備接收BULK-OUT包,並判斷是否正確接收到BULK-OUT數據包;
如果是,執行步驟208;
如果否,執行步驟204; 其中,判斷是否正確接收到BULK-OUT數據包的過程可以為根據接收到的數據包 長度標誌及數據包的發送長度標誌進行判斷,如果接收到的數據包長度與數據包的發送長 度標誌一致,則認為是正確接收到了 BULK-OUT數據包。 其中,通道擴展命令是CCID協議標準留給生產廠家自己定義的擴展命令,通過該 擴展命令可以對CCID設備進行區別於其他CCID協議標準的操作,生成廠家可以修改該通 道擴展命令的第11、12位元組的內容,用於實現一些自定義的命令功能,如用於通道切換、對 傳輸通道上的數據進行加解密操作等。 步驟208 :CCID設備解析BULK-OUT數據包的內容,並判斷是何種類型的CCID命 令; 如果是通道擴展命令,則執行步驟210 ;
如果不是通道擴展命令,則執行步驟209 ; 其中,判斷數據包中的內容是何種類型的CCID命令的過程可以為CCID設備解析 符合CCID標準的命令流,拆分命令流的包頭中的第一個字節,得到該命令流的命令類型。 例如,第一個字節為6B,表示通道擴展命令;第一個字節為62,表示上電命令;第一個字節
為61,表示設置參數命令;等等。 步驟209 :CCID設備根據CCID命令類型進行相應的處理,並將處理結果組裝成符 合CCID接口標準的數據包,且並將所述數據包保存至CCID設備緩衝區,執行步驟204 ;
其中,根據CCID命令類型進行相應的處理可以包括當CCID命令類型為對智慧卡 進行上電或下電,則CCID設備對其卡槽中的智慧卡進行上電或下電處理;當CCID命令類型 為對智慧卡進行變頻協商,則CCID設備對其卡槽中的智慧卡進行變頻協商;當CCID命令類 型為對智慧卡中的數據進行讀寫等操作,則CCID設備對智慧卡中的數據進行讀寫等操作。
還需要知道的是,CCID命令中的第6個字節(即命令中的Slot欄位)表示的是 該智慧卡操作命令所對應的多卡槽CCID設備卡槽的編號; 另外,還需要知道的是如果主機加載微軟的CCID協議的讀卡器驅動,則CCID命 令中的第6個字節(即命令中的Slot欄位)是固定的00 ; 如果主機加載Li皿x下的CCID協議讀卡器驅動,則CCID命令中的第6個字節(即命令中的Slot欄位)顯示的是該智慧卡操作命令對應的多卡槽CCID設備卡槽的編號,如6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 表示1號卡座的取隨機數指令,第6位字節00表示1號卡槽 62 00 00 00 00 01 21 01 00 00 表示2號卡座的上電指令,第6位字節01表示2號卡槽 當多卡槽CCID設備接收到上述命令後,根據上述卡槽號對相應的卡槽進行操作。
優選的,本實施例中主機中安裝的是微軟的CCID協議的讀卡器驅動。
步驟210 :CCID設備判斷通道擴展命令是否是通道切換命令;
如果是通道切換命令,則執行步驟212 ;
如果其他通道擴展命令,則執行步驟211 ; 本步驟中所涉及到的判斷具體過程為CCID設備中的固件程序拆分接收到的通
道切換命令的包頭,並通過計算該命令包頭中的數據長度標誌,獲知數據包的長度及其在
CCID設備緩衝區中的位置,得到該命令流數據包中的標識符(命令中的第11、12個字節),
該標識符是CCID可以是生產廠家自己定製的,可以通過該標識符獲知該通道切換命令的
具體用途。如0x5aa5表示該通道擴展命令是通道切換命令,用於多卡槽CCID設備卡槽切
換,當然該標識符也可以是Oxa55a等,取決於生產廠家的定義。 步驟211 :執行其他通道擴展命令相應的操作,並返回步驟204 ; 例如,該通道擴展命令是用於對傳輸通道上的數據進行加解密操作、讀flash或
寫flash操作等,則CCID設備執行相應的操作即可。具體的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示對CCID設備進行flash讀操作,第11、 12位字節6066是自定義的,表示讀 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示對CCID設備進行flash寫操作,第11、12為字節6660是自定義的,表示寫 flash 步驟212 :CCID設備中的固件程序對接收到的通道切換命令進行解析,得到該條 命令對應的卡槽,通過卡槽切換電路激活命令中指定的卡槽,返回步驟204 ;
其中,CCID設備中的固件程序拆分接收到的通道切換命令的包頭,並通過計算該 命令包頭中的數據長度標誌,獲知數據包的長度及其在CCID設備緩衝區中的位置,得到該 命令流數據包中的標識符,該標識符是CCID可以是生產廠家自己定製的,可以通過該標 識符獲知該通道切換命令的具體用途。如果該標識符表示該通道切換命令是用於卡槽切 換的,通過查看該命令的第13個字節,可以得到本條命令所要激活的卡槽序號,然後通過 CCID設備的電路控制程序單元將卡槽序號所對應的卡槽激活。 具體在本實施例中,以使用的是微軟的CCID協議的讀卡器驅動為例,符合CCID標 準的通道切換命令中的Slot欄位(第6個字節)是固定的00。
假設CCID設備接收到的通道切換命令具體為
6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 該通道切換命令表示1號卡槽的隨機數指令,該條指令的第13個字節00表示1 號卡槽;
6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff 該通道切換命令表示2號卡槽的隨機數指令,該條指令的第13個字節01表示2 號卡槽。 具體的,CCID設備通過電路控制程序單元將卡槽序號所對應的卡槽(例如卡槽1、 卡槽2、卡槽3)激活,具體實現過程可以如下 —種優選的方式為,CCID設備的卡槽切換電路包括CPU、一個CPU接口、多路選擇 開關和電路控制程序單元;多路選擇開關分別與CCID設備中的各個卡槽相連接;當CCID 設備分析得到卡槽的序號後,電路控制程序單元控制多路選擇開關將相應的卡槽之間的電 路進行連通。 另一種優選的方式,CCID設備卡槽切換電路包括CPU、多個CPU接口和電路控制程 序單元;多個CPU接口分別與CCID設備中的各個卡槽相連接,當CCID設備分析得到卡槽的 編號後,電路控制程序單元將CPU接口與相應的卡槽之間的電路進行連通。
步驟213 :CCID設備進行其他操作,並返回步驟204。 本發明實施例提供了一種實現多卡槽訪問的方法,實現微軟windows下的讀卡器
驅動能夠支持多卡槽訪問,並且還支持li皿x下的讀卡器驅動的多卡槽訪問。
實施例3 本發明實施例3提供了一種實現多卡槽訪問的方法,本實施例以多卡槽讀卡器這
種常見的CCID設備為例,並假設與該多卡槽讀卡器連接的主機中安裝有微軟的CCID協議
的讀卡器驅動,多卡槽讀卡器通過自定義通道切換命令、並配合卡槽切換電路實現了多卡
槽讀卡器中的多個卡槽共享一條USB總線與主機進行通信。其中需要說明的是,主機與
CCID設備之間可以通過兩條通信管道進行通信,一條為批量傳輸管道,用於進行數據的傳
輸,如上電、下電指令、執行APDU、主機與CCID設備按照一應一答的方式通過批量傳輸管道
進行數據的交互;一條為中斷傳輸管道,用於傳輸異步事件,如插卡、拔卡及卡短路等,CCID
設備就會通過中斷傳輸管道向主機發送信號。參見圖3,該方法包括 步驟301 :CCID設備與主機建立連接,進行初始化; 在本實施例中,該CCID設備通過USB接口與主機建立連接。 具體的,CCID設備的初始化過程可以包括初始化中斷向量、初始化1/0信號等。 其中的中斷可以包括USB中斷、插拔卡事件中斷等。 步驟302 :初始化完成後,CCID設備設置至少一對用來實現應答和命令管道的IN/ OUT端點聲明為BULK-IN和BULK-OUT端點,設置至少一個用來實現事件通知管道的IN端點 聲明為中斷端點,並向主機聲明其自身是符合CCID接口標準的設備; 其中,可以採用設備類型描述符的形式實現聲明其自身是CCID設備,具體包括 CCID設備向與其建立連接的主機發送CCID類型的設備描述符,主機接收到該CCID類型的 設備描述符後,根據該CCID類型的設備描述符識別該建立連接的設備為CCID設備。
步驟303 :CCID設備向主機聲明自身支持的卡槽數; 其中,可以採用設備卡槽描述符的形式實現聲明其自身支持的卡槽數,具體包括 CCID設備向與其建立連接的主機發送卡槽描述符,卡槽描述符中用一個字節表示CCID設 備自身支持的卡槽數,例如,當卡槽描述符為"OO"時,表示CCID設備支持一個卡槽;當卡槽 描述符為"01"時,表示CCID設備支持兩個卡槽。 16
主機接收到卡槽描述符後,主機加載的讀卡器驅動即為讀卡器的卡槽創建物理設 備對象。其中,如果主機加載的是微軟的CCID協議的讀卡器驅動,則主機在接收到卡槽描 述符時,為多卡槽讀卡器創建一個物理設備對象,即為默認的卡槽創建物理設備對象,與默 認卡槽(如1號卡槽)相對應;如果主機加載的Li皿x下的CCID協議的讀卡器驅動,則主 機在接收到卡槽描述符時,根據卡槽描述符攜帶的卡槽數,創建相應數目的物理設備對象, 分別與讀卡器的各個卡槽相對應。
步驟304 :CCID設備等待中斷; 如果有中斷出現,則執行步驟305(即,CCID設備進入中斷服務);
如果沒有中斷出現,則繼續等待; 其中,優選的,USB中斷或者插拔卡事件中斷均採用一個中斷入口進入中斷服務; 或者,USB中斷和插拔卡事件中斷採用不同的中斷入口 ,則USB中斷使得CCID設備進入USB 中斷服務;插拔卡事件中斷使得CCID設備進入插拔卡事件中斷服務。
步驟305 :CCID設備進入中斷服務; 步驟306 :CCID設備判斷出現的中斷是否為BULK-OUT中斷;
如果是,則執行步驟307 ;
如果否,則執行步驟313 ; 步驟307 :CCID設備接收BULK-OUT包,並判斷是否正確接收到BULK-OUT數據包;
如果是,執行步驟308;
如果否,執行步驟316; 步驟308 :CCID設備解析BULK-OUT數據包的內容,並判斷是何種類型的CCID命 令; 如果是通道擴展命令,則執行步驟310 ;
如果不是通道擴展命令,則執行步驟309。 其中,通道擴展命令是CCID協議標準留給生產廠家自己定義的擴展命令,通過該 擴展命令可以對CCID設備進行區別於其他CCID協議標準的操作,生成廠家可以修改該通 道擴展命令的第11、12位元組的內容,用於實現一些自定義的命令功能,如用於通道切換、對 傳輸通道上的數據進行加解密操作等。 步驟309 :CCID設備根據CCID命令類型進行相應的處理,程序的其他模塊將處理 結果組裝成符合CCID接口標準的數據包,並將數據包保存至緩衝區,執行步驟316 ;
其中,根據CCID命令類型進行相應的處理可以包括當CCID命令類型為對智慧卡 進行上電或下電,則CCID設備對其卡槽中的智慧卡進行上電或下電處理;當CCID命令類型 為對智慧卡進行變頻協商,則CCID設備對其卡槽中的智慧卡進行變頻協商;當CCID命令類 型為對智慧卡中的數據進行讀寫等操作,則CCID設備對智慧卡中的數據進行讀寫等操作。
還需要知道的是,CCID命令中的第6個字節(即命令中的Slot欄位)表示的是 該智慧卡操作命令所對應的多卡槽CCID設備卡槽的編號; 另外,還需要知道的是如果主機加載微軟的CCID協議的讀卡器驅動,則CCID命 令中的第6個字節(即命令中的Slot欄位)是固定的00 ; 如果主機加載Li皿x下的CCID協議讀卡器驅動,則CCID命令中的第6個字節(即 命令中的Slot欄位)顯示的是該智慧卡操作命令對應的多卡槽CCID設備卡槽的編號,如
6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 表示1號卡座的取隨機數指令,第6位字節00表示1號卡槽 62 00 00 00 00 01 21 01 00 00 表示2號卡座的上電指令,第6位字節01表示2號卡槽 當多卡槽CCID設備接收到上述命令後,根據上述卡槽號對相應的卡槽進行操作。
優選的,本實施例中主機中安裝的是微軟的CCID協議的讀卡器驅動。
步驟310 :CCID設備判斷通道擴展命令是否是通道切換命令;
如果是通道切換命令,則執行步驟312 ;
如果其他通道擴展命令,則執行步驟311 ; 本步驟中所涉及到的判斷具體過程為CCID設備中的固件程序拆分接收到的通
道切換命令的包頭,並通過計算該命令包頭中的數據長度標誌,獲知數據包的長度及其在
CCID設備緩衝區中的位置,得到該命令流數據包中的標識符(命令中的第11、12個字節),
該標識符是CCID可以是生產廠家自己定製的,可以通過該標識符獲知該通道切換命令的
具體用途。如0x5aa5表示該通道擴展命令是通道切換命令,用於多卡槽CCID設備卡槽切
換,當然該標識符也可以是Oxa55a等,取決於生產廠家的定義。 步驟311 :執行其他通道擴展命令相應的操作,執行步驟316 ; 例如,該通道擴展命令是用於對傳輸通道上的數據進行加解密操作、讀flash或
寫flash操作等,則CCID設備執行相應的操作即可。具體的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示對CCID設備進行flash讀操作,第11、 12位字節6066是自定義的,表示讀 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示對CCID設備進行flash寫操作,第11、12為字節6660是自定義的,表示寫 flash 步驟312 :CCID設備中的固件程序對接收到的通道切換命令進行解析,得到該條 命令對應的卡槽,通過卡槽切換電路激活命令中指定的卡槽,執行步驟316 ;
其中,CCID設備中的固件程序拆分接收到的通道切換命令的包頭,並通過計算該 命令包頭中的數據長度標誌,獲知數據包的長度及其在CCID設備緩衝區中的位置,得到該 命令流數據包中的標識符,該標識符是CCID可以是生產廠家自己定製的,可以通過該標 識符獲知該通道切換命令的具體用途。如果該標識符表示該通道切換命令是用於卡槽切 換的,通過查看該命令的第13個字節,可以得到本條命令所要激活的卡槽序號,然後通過 CCID設備的電路控制程序單元將卡槽序號所對應的卡槽激活。 具體在本實施例中,以使用的是微軟的CCID協議的讀卡器驅動為例,符合CCID標 準的通道切換命令中的Slot欄位(第6個字節)是固定的00。
假設CCID設備接收到的通道切換命令具體為
6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 該通道切換命令表示1號卡槽的隨機數指令,該條指令的第13個字節00表示1 號卡槽; 6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff
該通道切換命令表示2號卡槽的隨機數指令,該條指令的第13個字節01表示2 號卡槽。 具體的,CCID設備通過電路控制程序單元將卡槽序號所對應的卡槽激活,具體實 現過程可以如下 —種優選的方式為,CCID設備的卡槽切換電路包括CPU、一個CPU接口 、多路選擇 開關和電路控制程序單元;多路選擇開關分別與CCID設備中的各個卡槽相連接;當CCID 設備分析得到卡槽的序號後,電路控制程序單元控制多路選擇開關將相應的卡槽之間的電 路進行連通。 另一種優選的方式,CCID設備卡槽切換電路包括CPU、多個CPU接口和電路控制程 序單元;多個CPU接口分別與CCID設備中的各個卡槽相連接,當CCID設備分析得到卡槽的 編號後,電路控制程序單元將CPU接口與相應的卡槽之間的電路進行連通。
步驟313 :CCID設備判斷該中斷是否是插拔卡中斷;
如果是,執行步驟314;
如果否,執行步驟315; 步驟314:CCID設備將智慧卡插入或拔出事件信息組裝成符合CCID接口標準的數 據包返回給主機,返回步驟316 ; 在本發明實施例中的卡槽有兩種情況,包括有卡和無卡;如果卡槽中沒有卡片插 入或者卡片從卡槽中拔出,卡槽就處於無卡狀態,產生無卡的中斷信號;如果卡片插入卡 槽,就處於有卡未上電狀態,產生有卡的中斷信號;主機下發上電指令,智慧卡響應並成功 返回ATR(Answer To Reset,復位應答)後,卡槽的狀態變為有卡已上電;主機下發下電指 令,智慧卡的卡槽狀態變為有卡未上電狀態。 當某一卡槽為激活的卡槽時,如果卡槽中有智慧卡的插入,則會產生有卡的中斷 信號0x5003 ;如果卡槽中有智慧卡的拔出,則會產生無卡的中斷信號0x5002 ;當某一卡槽 為未激活的卡槽時,發生插拔事件不會產生中斷信號。
步驟315 :CCID設備執行其他操作,執行步驟316 ;
步驟316:中斷返回。 對於本實施例需要說明的是,上述步驟301至步驟314是當USB中斷或者插拔卡 事件中斷均採用一個中斷入口進入中斷服務程序時的處理方法;當USB中斷和插拔卡事件 中斷採用不同的中斷入口時,步驟305至步驟314還可以使用如下步驟代替
步驟305':當接收到的中斷為USB中斷時,CCID設備進入USB中斷服務;
步驟306' :CCID設備判斷出現的中斷是否為BULK-OUT中斷;
如果是,則執行步驟307';
如果否,則執行步驟313'; 步驟307' :CCID設備接收BULK-OUT包,並判斷是否正確接收到BULK-OUT數據包; 如果是,執行步驟308'; 如果否,執行相應的操作,執行步驟313'。 步驟308' :CCID設備解析BULK-OUT數據包的內容,並判斷是何種類型的CCID命 令; 如果是通道擴展命令,則執行步驟310';
如果不是通道擴展命令,則執行步驟309'。 步驟309' :CCID設備根據CCID命令類型進行相應的處理,並將處理結果組裝成符
合CCID接口標準的數據包,並將數據包保存至緩衝區; 步驟310' :CCID設備判斷通道擴展命令是否是通道切換命令; 如果是通道切換命令,則執行步驟312'; 如果其他通道擴展命令,則執行步驟311'; 本步驟中所涉及到的判斷具體過程為CCID設備中的固件程序拆分接收到的通
道切換命令的包頭,並通過計算該命令包頭中的數據長度標誌,獲知數據包的長度及其在
CCID設備緩衝區中的位置,得到該命令流數據包中的標識符(命令中的第11、12個字節),
該標識符是CCID可以是生產廠家自己定製的,可以通過該標識符獲知該通道切換命令的
具體用途。如0x5aa5表示該通道擴展命令是通道切換命令,用於多卡槽CCID設備卡槽切
換,當然該標識符也可以是Oxa55a等,取決於生產廠家的定義。 步驟311':執行其他通道擴展命令相應的操作,執行步驟313'; 例如,該通道擴展命令是用於對傳輸通道上的數據進行加解密操作、讀flash或
寫flash操作等,則CCID設備執行相應的操作即可。具體的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示對CCID設備進行flash讀操作,第11、 12位字節6066是自定義的,表示讀 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示對CCID設備進行flash寫操作,第11、12為字節6660是自定義的,表示寫 flash 步驟312' :CCID設備中的固件程序對接收到的通道切換命令進行解析,得到該條 命令對應的卡槽,通過卡槽切換電路激活命令中指定的卡槽,執行步驟313';
其中,CCID設備中的固件程序拆分接收到的通道切換命令的包頭,並通過計算該 命令包頭中的數據長度標誌,獲知數據包的長度及其在CCID設備收發緩衝中的位置,得到 該命令流數據包中的標識符,該標識符是CCID可以是生產廠家自己定製的,可以通過該標 識符獲知該通道切換命令的具體用途。如果該標識符表示該通道切換命令是用於卡槽切 換的,通過查看該命令的第13個字節,可以得到本條命令所要激活的卡槽序號,然後通過 CCID設備的電路控制程序單元將卡槽序號所對應的卡槽激活。 具體在本實施例中,以使用的是微軟的CCID協議的讀卡器驅動為例,符合CCID標 準的通道切換命令中的Slot欄位(第6個字節)是固定的00。
假設CCID設備接收到的通道切換命令具體為
6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 該通道切換命令表示1號卡槽的隨機數指令,該條指令的第13個字節00表示1 號卡槽; 6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff 該通道切換命令表示2號卡槽的隨機數指令,該條指令的第13個字節01表示2 號卡槽。 具體的,CCID設備通過電路控制程序單元將卡槽序號所對應的卡槽激活,具體實現過程可以如下 —種優選的方式為,CCID設備的卡槽切換電路包括CPU、一個CPU接口、多路選擇 開關和電路控制程序單元;多路選擇開關分別與CCID設備中的各個卡槽相連接;當CCID 設備分析得到卡槽的序號後,電路控制程序單元控制多路選擇開關將相應的卡槽之間的電 路進行連通。 另一種優選的方式,CCID設備卡槽切換電路包括CPU、多個CPU接口和電路控制程 序單元;多個CPU接口分別與CCID設備中的各個卡槽相連接,當CCID設備分析得到卡槽的 編號後,電路控制程序單元將CPU接口與相應的卡槽之間的電路進行連通。
步驟313':中斷返回。 對於本實施例需要說明的是,當USB中斷和插拔卡事件中斷採用不同的中斷入口 時,步驟305至步驟314還可以使用如下步驟代替 步驟305":當接收到的中斷為插拔卡事件中斷時,CCID進入插拔卡事件中斷服 務; 步驟306" :CCID設備將智慧卡插入或拔出事件信息組裝成符合CCID接口標準的
數據包返回給主機; 步驟307":中斷返回。 本發明實施例提供了一種實現多卡槽訪問的方法,實現微軟windows下的讀卡器
驅動能夠支持多卡槽訪問,並且還支持li皿x下的讀卡器驅動的多卡槽訪問。
實施例4 本發明實施例提供了一種多卡槽的CCID設備,該設備的具體工作方法可以參見 實施例1至3中的具體描述,此處不做詳述。參見圖4,該設備包括 接口模塊401,分別與主機和主控模塊402相連接,用於實現主機與主控模塊402 之間進行信息交互,本實施例中接口模塊401具體可以是USB接口模塊;
主控模塊402,分別與接口模塊401和判斷模塊403相連接,用於控制接口模塊 401接收主機下發的命令流,控制判斷模塊403接收通過卡槽切換電路模塊404上傳的智能 卡發送的應答,控制判斷模塊403發送命令流中的數據包經過卡槽切換電路模塊404到智 能卡,控制接口模塊401發送符合CCID標準的應答數據包到主機; 判斷模塊403,分別與主控模塊403和卡槽切換電路模塊404相連接,用於判斷 CCID設備中是否有智慧卡插拔事件信息,並將智慧卡插拔事件信息通過主控模塊402返回 給主機, 卡槽切換電路模塊404,分別與判斷模塊403和卡槽相連接,用於接收主控模塊 402發送的命令流,如果接收到主控模塊402發送的通道切換命令,根據卡槽序列號激活相 應的卡槽,如果接收到主控模塊402發送的其他命令,則將所述命令發送給智慧卡,並將智 能卡的應答發送給判斷模塊403。 其中,卡槽切換電路模塊404與卡槽1 、卡槽2、……、卡槽n相連接,而卡槽1 、卡 槽2、……、卡槽n可以分別與智慧卡l、智慧卡2、……、智慧卡n相連接。
例如,卡槽切換電路模塊404分別與多卡槽CCID設備中的卡槽1、卡槽2、卡槽3 相連接,當主控模塊402獲得通道切換命令中所要訪問的卡槽序列號時,卡槽切換電路模 塊404將卡槽序列號對應的卡槽切換連通,進行激活,例如,當主控模塊402獲知通道切換命令的卡槽序列號是"0x00"時,卡槽切換電路模塊404則將與其相連接的卡槽1激活,當 主控模塊402獲知通道切換命令的卡槽序列號是"0x02"時,卡槽切換電路模塊404則將與 其相連接的卡槽3激活等。
其中,接口模塊401還具體包括描述符設置單元和端點設置單元; 描述符設置單元,用於設置符合CCID標準中規定的描述符及其對應的值,本實施
例中具體包括設備類型描述符及卡槽描述符; 本實施例中,CCID設備通過設備類型描述符向主機聲明自身是CCID設備,通過卡 槽描述符向主機聲明自身支持的卡槽數; 端點設置單元,用於將至少一對用來實現應答和命令管道的IN/OUT端點設置為 BULK-IN和BULK-OUT端點,將至少一個用來實現事件通知管道的IN端點聲明為中斷端點。
其中,主控模塊402還具體包括接收單元、解析單元、拆分單元、計算單元、應答 組成單元、第一判斷單元、第二判斷單元、第一處理單元、第二處理單元、發送單元;
接收單元,用於接收主機通過接口模塊401發送的命令流,及接收智慧卡返回的
應答; 解析單元,用於解析接收到的命令流的含義; 拆分單元,用於拆分解析單元解析出來的命令流的包頭中的第一個字節,得到該 命令流的命令類型;其中,第一個字節為6B時,表示通道擴展命令; 計算單元,用於根據接收到的命令流中的數據長度標誌,確定命令流中的數據包 長度和其在CCID設備收發緩衝中的位置; 應答組成單元,用於將應答組成符合CCID標準的應答數據包; 第一判斷單元,用於根據接收模塊接收到的BULK-OUT數據包判斷主機下發的
CCID命令的類型; 第二判斷單元,用於當第一判斷單元的判斷結果為CCID命令類型是通道擴展命 令時,判斷通道擴展命令是否是通道切換命令; 第一處理單元,用於如果第一判斷單元的判斷結果為CCID命令的類型不是通道 擴展命令,根據CCID命令類型進行相應的處理。 第二處理單元,用於如果第二判斷單元的判斷結果為通道擴展命令不是通道切換 命令時,根據通道擴展命令的命令類型進行相應的處理; 發送單元,用於發送主機下發的命令流給智慧卡,及發送智慧卡返回的應答給主 機; 其中,第二判斷單元還具體包括 拆分子單元,用於拆分通道切換命令的包頭; 第一獲得子單元,用於通過計算通道切換命令包頭中的數據長度標誌,獲知數據 包的長度及其在CCID設備收發緩衝中的位置,得到通道切換命令數據包中的標識符,標識 符用於標識通道切換命令的具體用途; 第二獲得子單元,用於如果第一獲得單元獲得的標識符表示該通道切換命令是用 於卡槽切換的,查看通道切換命令的第13個字節,得到本條通道切換命令所要訪問的卡槽序號。 本發明實施例提供了一種實現多卡槽防CCID設備,實現微軟windows下的讀卡器驅動能夠支持多卡槽訪問,並且還支持li皿x下的讀卡器驅動的多卡槽訪問。 以上僅為本發明的較佳實施例,並不用以限制本發明,凡在本發明的精神和原則
之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。
權利要求
一種實現多卡槽訪問的方法,其特徵在於,所述方法包括多卡槽的CCID設備與主機建立連接,將至少一對用來實現應答管道和命令管道的IN/OUT端點聲明為BULK-IN和BULK-OUT端點,將至少一個用來實現事件通知管道的IN端點聲明為中斷端點,並向所述主機聲明其自身是符合CCID接口標準的設備以及自身支持的卡槽數;主機對所述多卡槽的CCID設備進行訪問;所述多卡槽的CCID設備接收BULK-OUT數據包,並根據所述BULK-OUT數據包判斷所述主機下發的CCID命令的類型;當所述CCID命令類型是通道擴展命令時,則判斷所述通道擴展命令是否是通道切換命令;如果所述通道擴展命令是通道切換命令時,則解析所述通道切換命令,並激活所述主機欲訪問的相應卡槽;如果所述通道擴展命令不是通道切換命令時,則根據所述通道擴展命令的命令類型進行相應的處理;當所述CCID命令的類型不是通道擴展命令,則根據所述CCID命令類型進行相應的處理。
2. 如權利要求1所述的實現多卡槽訪問的方法,其特徵在於,向所述主機聲明其自身支持的卡槽數,具體包括所述CCID設備向所述主機發送卡槽描述符,所述卡槽描述符中使用一個字節表示 CCID設備自身支持的卡槽數。
3. 如權利要求1所述的實現多卡槽訪問的方法,其特徵在於,根據所述BULK-OUT數據 包判斷所述主機下發的CCID命令的類型,具體包括所述CCID設備解析符合CCID標準的命令流,拆分所述命令流的包頭中的第一個字節, 得到該命令流的命令類型;其中,當所述第一個字節為6B時,表示通道擴展命令。
4. 如權利要求1所述的實現多卡槽訪問的方法,其特徵在於,判斷所述通道擴展命令 是否是通道切換命令,具體包括所述CCID設備解析所述通道擴展命令,根據所述通道擴展命令中的標識符欄位得到 該命令的的命令類型;其中,所述標識符是自定義標識符。
5. 如權利要求1所述的實現多卡槽訪問的方法,其特徵在於,解析所述通道切換命令, 並激活所述主機欲訪問的相應卡槽,具體包括所述CCID設備中的固件程序拆分所述通道切換命令的包頭;通過計算所述通道切換命令包頭中的數據長度標誌,獲知數據包的長度及所述數據包 在所述CCID設備收發緩衝中的位置,得到所述通道切換命令數據包中的標識符,所述標識 符用於標識所述通道切換命令的具體用途;如果所述標識符表示該通道切換命令是用於卡槽切換的,則查看所述通道切換命令的 第13個字節,得到本條通道切換命令所要訪問的卡槽序號;通過所述CCID設備的電路控制程序單元將所述卡槽序號所對應的卡槽激活。
6. 如權利要求1所述的實現多卡槽訪問的方法,其特徵在於,所述方法還包括判斷被 激活卡槽中是否有智慧卡插拔事件信息;如果有,則向所述主機返回符合CCID標準的智慧卡插拔事件信息;如果沒有,則繼續執行所述多卡槽的CCID設備接收BULK-OUT數據包的步驟。
7. 如權利要求6所述的實現多卡槽訪問的方法,其特徵在於,所述判斷是否有智慧卡插拔事件信息,具體包括判斷所述CCID設備的收發緩衝中是否有所述智慧卡插拔事件信息,所述智慧卡插拔 事件信息由所述CCID設備在接收到有智慧卡插入或拔出的中斷信號時寫入到所述收發緩 衝中。
8. —種多卡槽的CCID設備,其特徵在於,所述設備包括接口模塊、主控模塊、判斷模 塊和卡槽切換電路模塊;所述接口模塊,分別與主機和所述主控模塊相連接,用於實現所述主機與所述主控模 塊之間的信息交互;所述主控模塊,分別與所述接口模塊和所述判斷模塊相連接,用於控制所述接口模塊 接收主機下發的命令流,控制所述判斷模塊接收智慧卡發送的應答,控制所述判斷模塊發 送命令流中的數據包到所述智慧卡,控制所述接口模塊發送符合CCID標準的應答數據包 到所述主機;所述判斷模塊,分別與所述主控模塊和所述卡槽切換電路模塊相連接,用於判斷CCID 設備中是否有智慧卡插拔事件信息,並將所述智慧卡插拔事件信息通過所述主控模塊返回 給所述主機,所述卡槽切換電路模塊,分別與所述判斷模塊和卡槽相連接,用於接收所述主控模塊 發送的命令流;如果接收到所述主控模塊發送的通道切換命令,則根據卡槽序列號激活相 應的卡槽;如果接收到所述主控模塊發送的其他命令,則將所述其他命令發送給所述智能 卡,並將所述智慧卡的應答數據包發送給所述判斷模塊。
9. 如權利要求8所述的多卡槽的CCID設備,其特徵在於,所述接口模塊具體包括描 述符設置單元和端點設置單元;所述描述符設置單元,用於設置符合CCID標準中規定的設備類型描述符及卡槽描述 符;所述CCID設備通過所述設備類型描述符向主機聲明自身是CCID設備,通過所述卡槽描 述符向主機聲明自身支持的卡槽數;所述端點設置單元,用於將至少一對用來實現應答管道和命令管道的IN/OUT端點設 置為BULK-IN和BULK-OUT端點,將至少一個用來實現事件通知管道的IN端點聲明為中斷 端點。
10. 如權利要求8所述的多卡槽的CCID設備,其特徵在於,所述主控模塊具體包括接收單元,用於接收所述主機通過所述接口模塊發送的命令流,及接收智慧卡通過所述判斷模塊返回的應答;解析單元,用於解析所述接收單元接收到的所述命令流;拆分單元,用於拆分所述解析單元解析出來的命令流的包頭中的第一個字節,得到該 命令流的命令類型,其中,當第一個字節為6B時,表示通道擴展命令;計算單元,用於根據所述接收單元接收到的命令流中的數據長度標誌,確定命令流中 的數據包長度和所述數據包在所述CCID設備收發緩衝中的位置;應答組成單元,用於將應答組成符合CCID標準的應答數據包;第一判斷單元,用於根據所述接收模塊接收到的BULK-OUT數據包判斷主機下發的 CCID命令的類型;第二判斷單元,用於當所述第一判斷單元的判斷結果為通道擴展命令時,判斷所述通 道擴展命令是否是通道切換命令;第一處理單元,用於如果所述第一判斷單元的判斷結果為不是通道擴展命令時,根據 所述CCID命令類型進行相應的處理;第二處理單元,用於如果所述第二判斷單元的判斷結果為通道擴展命令不是通道切換 命令時,根據所述通道擴展命令的命令類型進行相應的處理;發送單元,用於發送所述主機下發的命令流給所述智慧卡,及發送智慧卡返回的應答 給所述主機。
11. 如權利要求10所述的多卡槽的CCID設備,其特徵在於,所述第二判斷單元具體包括拆分子單元,用於拆分通道切換命令的包頭;第一獲得子單元,用於通過計算通道切換命令包頭中的數據長度標誌,獲知數據包的 長度及所述數據包在CCID設備收發緩衝中的位置,得到通道切換命令數據包中的標識符, 所述標識符用於標識通道切換命令的具體用途;第二獲得子單元,用於當所述第一獲得單元獲得的標識符表示該通道切換命令是用於 卡槽切換時,查看通道切換命令的第13個字節,得到本條通道切換命令所要訪問的卡槽序 號。
12. 如權利要求8所述的多卡槽的CCID設備,其特徵在於,所述判斷模塊具體用於 判斷CCID設備的收發緩衝中是否有智慧卡插拔事件信息,智慧卡插拔事件信息由CCID設備在接收到有智慧卡插入或拔出的中斷信號時寫入到收發緩衝中。
全文摘要
本發明公開了一種實現多卡槽訪問的方法和裝置,屬於數據通信領域。方法包括多卡槽的CCID設備與主機建立連接,將至少一對用來實現應答管道和命令管道的IN/OUT端點聲明為BULK-IN和BULK-OUT端點,將至少一個用來實現事件通知管道的IN端點聲明為中斷端點,並向所述主機聲明其自身是符合CCID接口標準的設備以及自身支持的卡槽數;主機對所述多卡槽的CCID設備進行訪問;所述多卡槽的CCID設備接收BULK-OUT數據包,並根據所述BULK-OUT數據包判斷所述主機下發的CCID命令的類型;當所述CCID命令類型是通道擴展命令時,則判斷所述通道擴展命令是否是通道切換命令;如果所述通道擴展命令是通道切換命令時,則解析所述通道切換命令,並激活所述主機欲訪問的相應卡槽。
文檔編號G06K7/00GK101719054SQ20091024388
公開日2010年6月2日 申請日期2009年12月24日 優先權日2009年12月24日
發明者於華章, 陸舟 申請人:北京飛天誠信科技有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀