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