一種通訊模式的識別方法
【專利摘要】本發(fā)明公開一種通訊模式的識別方法,設備在時鐘中斷處理中將超時標識置位;當設備檢測到其他中斷信號時,給主機返回設備支持的USB接口通訊協(xié)議,并設置通訊模式;識別過程包括:檢測通訊模式的類型,如為USB接口通訊,則關閉定時器,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,如未設置通訊模式則當超時標識置位時,設置通訊模式為串口通訊,關閉所述定時器,將超時標識復位,執(zhí)行步驟S6,如為串口通訊,則關閉所述定時器,執(zhí)行步驟S6;步驟S6:當接收到指令時根據(jù)串口協(xié)議進行相應操作。本發(fā)明的識別方法適應于同時具有串口和USB接口的設備中,使設備具有較好的兼容性。
【專利說明】一種通訊模式的識別方法
【技術(shù)領域】
[0001]本發(fā)明涉及通訊領域,尤其涉及一種通訊模式的識別方法。
【背景技術(shù)】
[0002]隨著USB接口的廣泛使用,各個廠商生產(chǎn)了品種繁多的USB設備,使USB接口成為現(xiàn)在電子產(chǎn)品的必備接口之一。由于USB接口的物理機械特性設計很成功,所以許多廠商將其鏈路層用于非USB協(xié)議的通訊傳輸,也就是用USB接口傳輸非USB協(xié)議的數(shù)據(jù)流。由于串口通訊設計簡單,使用方便,將USB鏈路層用于傳輸串口數(shù)據(jù)的產(chǎn)品也層出不窮。但是,如何使一個設備既能利用USB接口通訊又能利用串口通訊,如何知道當前的通訊模式是USB模式還是串口模式呢?是現(xiàn)有技術(shù)亟待解決的問題。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種通訊模式的識別方法。
[0004]本發(fā)明提供的技術(shù)方案如下:
[0005]一種通訊模式的識別方法,包括:
[0006]步驟S1:設備上電,進行初始化,打開中斷和定時器,所述定時器開始計時;
[0007]當所述定時器計時到達預設值時,進入時鐘中斷處理,時鐘中斷處理包括:關閉所述定時器,將超時標識置位,打開所述定時器,退出時鐘中斷;
[0008]當檢測到其他中斷信號時,執(zhí)行步驟B1-步驟B8 ;
[0009]步驟B1:判斷中斷類型,如為USB中斷則執(zhí)行步驟B2,如為串口中斷則執(zhí)行步驟B6 ;
[0010]步驟B2:關閉USB中斷;
[0011]步驟B3:判斷是否已設置通訊模式,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ;
[0012]步驟B4:設置通訊模式為USB接口通訊,執(zhí)行步驟B5 ;
[0013]步驟B5:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷;
[0014]步驟B6:關閉串口中斷;
[0015]步驟B7:判斷是否已設置通訊模式,是則打開串口中斷,退出串口中斷,否則執(zhí)行步驟B8 ;
[0016]步驟B8:根據(jù)接收到的第一個數(shù)據(jù)包設置通訊模式為串口通訊,打開串口中斷,退出串口中斷;
[0017]步驟S2:檢測通訊模式的類型,如為USB接口通訊,則關閉所述定時器,執(zhí)行步驟S3,如為串口通訊,則關閉所述定時器,執(zhí)行步驟S6,如未設置通訊模式則執(zhí)行步驟S4 ;
[0018]步驟S3:等待主機下發(fā)指令,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,操作完成后返回步驟S3 ;
[0019]步驟S4:判斷所示超時標識是否置位,是則執(zhí)行步驟S5,否則返回步驟S2 ;[0020]步驟S5:設置通訊模式為串口通訊,關閉所述定時器,將超時標識復位,執(zhí)行步驟S6 ;
[0021]步驟S6:等待主機下發(fā)指令,當接收到指令時根據(jù)串口協(xié)議進行相應操作,操作完成后返回步驟S6。
[0022]進一步地,上述方法還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議;
[0023]所述步驟B5中的給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識的值發(fā)送給主機。
[0024]進一步地,所述IO通訊標識的值為第一預設值,所述步驟S3包括:
[0025]步驟S3-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0026]步驟S3-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟S3-13,如為第二預設字符則執(zhí)行步驟S3-14 ;如為其他則執(zhí)行步驟S3-15 ;
[0027]步驟S3-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟S3-11 ;
[0028]步驟S3-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟S3-11 ;
[0029]步驟S3-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟S3-11。
[0030]進一步地,所述IO通訊標識的值為第二預設值,所述步驟S3包括:
[0031]步驟S3-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-23,如為接收狀態(tài)則執(zhí)行步驟S3-22 ;
[0032]步驟S3-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為其他則返回步驟S3-21 ;
[0033]步驟S3-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為第二字符串則執(zhí)行步驟S3-24,如為其他則返回步驟S3-21 ;
[0034]步驟S3-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟S3-21 ;
[0035]步驟S3-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟S3-26,否則執(zhí)行步驟S3-27 ;
[0036]步驟S3-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21 ;
[0037]步驟S3-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21。
[0038]進一步地,所述IO通訊標識的值為第三預設值,所述步驟S3包括:
[0039]步驟S3-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;[0040]步驟S3-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-33,否則返回步驟S3-31 ;
[0041]步驟S3-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟S3-34,否則執(zhí)行步驟S3-35 ;
[0042]步驟S3-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 S3-31 ;
[0043]步驟S3-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-36,如是接收則執(zhí)行步驟 S3-37 ;
[0044]步驟S3-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟S3-31 ;
[0045]步驟S3-37:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟S3-38,否則執(zhí)行步驟S3-39 ;
[0046]步驟S3-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟S3-31 ;
[0047]步驟S3-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟S3-31。
[0048]進一步地,上述方法還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;
[0049]所述步驟B5中的給主機返回設備支持的USB通訊USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機。
[0050]進一步地,所述步驟S3包括:
[0051]步驟S3-41:檢測所述IO通訊標識的值,如為第一預設值則執(zhí)行步驟S3-42,如為第二預設值則執(zhí)行步驟S3-47,如為第三預設值則執(zhí)行步驟S3-54 ;
[0052]步驟S3-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0053]步驟S3-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟S3-44,如為第二預設字符則執(zhí)行步驟S3-45 ;如為其他則執(zhí)行步驟S3-46 ;
[0054]步驟S3-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟S3-42 ;
[0055]步驟S3-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟S3-42 ;
[0056]步驟S3-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟S3-42 ;
[0057]步驟S3-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-49,如為接收狀態(tài)則執(zhí)行步驟S3-48 ;
[0058]步驟S3-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為其他則返回步驟S3-47 ;
[0059]步驟S3-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為第二字符串則執(zhí)行步驟S3-50,如為其他則返回步驟S3-47 ;
[0060]步驟S3-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟S3-47 ;
[0061]步驟S3-51:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟S3-52,否則執(zhí)行步驟S3-53 ;
[0062]步驟S3-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ;
[0063]步驟S3-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ;
[0064]步驟S3-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0065]步驟S3-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-56,否則返回步驟S3-54 ;
[0066]步驟S3-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟S3-57,否則執(zhí)行步驟S3-58 ;
[0067]步驟S3-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 S3-54 ;
[0068]步驟S3-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-59,如是接收則執(zhí)行步驟 S3-60 ;
[0069]步驟S3-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟S3-54 ;
[0070]步驟S3-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟S3-61,否則執(zhí)行步驟S3-62 ;
[0071]步驟S3-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟S3-54 ;
[0072]步驟S3-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟S3-54。
[0073]進一步地,所述步驟S6包括:
[0074]步驟S6-1:當通過串口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)串口協(xié)議對所述第一緩存區(qū)中的指令進行解析并判斷解析結(jié)果中第一字節(jié)上的數(shù)據(jù)是否為第一預設數(shù)據(jù),是則執(zhí)行步驟S6-2,否則返回步驟S6-1 ;
[0075]步驟S6-2:判斷所述解析結(jié)果中第三字節(jié)上的數(shù)據(jù)是否為第二預設數(shù)據(jù),是則執(zhí)行步驟S6-3,否則執(zhí)行步驟S6-4 ;
[0076]步驟S6-3:對所述解析結(jié)果進行處理并將處理結(jié)果返回給主機,返回步驟S6-1 ;
[0077]步驟S6-4:檢測所述解析結(jié)果中第四字節(jié)上的數(shù)據(jù),如為第三預設數(shù)據(jù)則執(zhí)行步驟S6-5,如為第四預設數(shù)據(jù)則執(zhí)行步驟S6-6,如為其他則返回步驟S6-1 ;
[0078]步驟S6-5:輸出電量不足信息,進入死機狀態(tài),結(jié)束;
[0079]步驟S6-6:設置響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,返回步驟S6-1 ;所述響應數(shù)據(jù)包括設備與主機的通訊波特率和傳輸數(shù)據(jù)的長度。
[0080]進一步地,所述初始化包括:將通訊標識的值設為O ;[0081]所述檢測通訊模式的類型,具體為:檢查所述通訊標識的值,若所述通訊標識的值為I則當前通訊模式為USB接口通訊,若所述通訊標識的值為2則當前通訊模式為串口通訊,若所述通訊標識的值為O則未設置通訊模式;
[0082]所述設置通訊模式為串口通訊,具體為:將所述通訊標識的值設為2 ;
[0083]所述設置通訊模式為USB接口通訊,具體為:將所述通訊標識的值設為I。
[0084]一種通訊模式的識別方法,包括:
[0085]步驟Pl:設備上電,進行初始化,打開中斷;
[0086]當檢測到中斷信號時,進行中斷處理,所述中斷處理包括:
[0087]步驟Al:判斷是否為USB中斷,是則執(zhí)行步驟A2,否則退出中斷;
[0088]步驟A2:關閉USB中斷;
[0089]步驟A3:判斷是否已設置通訊模式,是則執(zhí)行步驟A5,否則執(zhí)行步驟A4 ;
[0090]步驟A4:將通訊模式設置為USB接口通訊,執(zhí)行步驟A5 ;
[0091]步驟A5:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷;
[0092]步驟P2:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則執(zhí)行步驟P3 ;
[0093]步驟P3:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P4,否則返回步驟P2 ;
[0094]步驟P4:將接收到的數(shù)據(jù)存儲到第一緩存區(qū)中,判斷存儲在所述第一緩存區(qū)中的第一字節(jié)數(shù)據(jù)是否為第一預設值,是則執(zhí)行步驟P6,否則執(zhí)行步驟P5 ;
[0095]步驟P5:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則返回步驟P4;
[0096]步驟P6:當通過串口接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到所述第一緩存區(qū)中,對所述第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟P7,否則返回步驟P3 ;
[0097]步驟P7:設置串口通訊波特率,設置通訊模式為第一串口通訊;
[0098]步驟P8:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟P10,否則執(zhí)行步驟P9 ;
[0099]步驟P9:設置通訊模式為第二串口通訊,執(zhí)行步驟P12 ;
[0100]步驟P10:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P11,否則等待接收數(shù)據(jù),返回步驟PlO ;
[0101]步驟Pll:當接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到所述第一緩存區(qū)中,對所述第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟P12,否則返回步驟PlO ;
[0102]步驟P12:根據(jù)串口協(xié)議對所述第一緩存區(qū)中的數(shù)據(jù)進行處理;
[0103]步驟P13:等待主機下發(fā)指令,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,操作完成后返回步驟P13。
[0104]進一步地,所述初始化包括:將通訊標識的值設為O ;
[0105]所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標識的值是否為1,是則為USB接口通訊,否則不為USB接口通訊;[0106]所述設置通訊模式為第一串口通訊,具體為:將所述通訊標識的值設為4 ;
[0107]所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標識的值是否為4,是則為第一串口通訊,否則不為第一串口通訊;
[0108]所述設置通訊模式為第二串口通訊,具體為:將所述通訊標識的值設為2。
[0109]進一步地,所述步驟P12具體包括:
[0110]步驟P12-1:從第一緩存區(qū)中提取前七個字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預設字符串,是則執(zhí)行步驟P12-2,否則給主機返回錯誤信息,返回步驟P9 ;
[0111]步驟P12-2:檢測第四字節(jié)上低四位的數(shù)據(jù),若為第一設定值則執(zhí)行步驟P12-3,若為第二設定值則執(zhí)行步驟P12-4,若為第三設定值則執(zhí)行步驟P12-5,若為其他則給主機返回錯誤信息,返回步驟P9;
[0112]步驟P12-3:給主機返回包含所述串口通訊波特率的握手信息,返回步驟P9 ;
[0113]步驟P12-4:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟P9 ;
[0114]步驟P12-5:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長度,計算該APDU數(shù)據(jù)的長度,判斷計算得到的APDU數(shù)據(jù)的長度與提取的數(shù)據(jù)長度是否相同,是則給主機返回接收數(shù)據(jù)正確響應,執(zhí)行步驟P12-6,否則給主機返回接收數(shù)據(jù)錯誤信息,返回步驟P9 ;
[0115]步驟P12-6:根據(jù)串口協(xié)議對APDU數(shù)據(jù)進行處理并將處理結(jié)果存儲到所述第二緩存區(qū)中,返回步驟P9。
[0116]進一步地,上述方法還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議;
[0117]所述步驟A5中給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識的值發(fā)送給主機。
[0118]進一步地,所述IO通訊標識的值為第一預設值,所述步驟P13包括:
[0119]步驟P13-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0120]步驟P13-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟P13-13,如為第二預設字符則執(zhí)行步驟P13-14 ;如為其他則執(zhí)行步驟P13-15 ;
[0121]步驟P13-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟P13-11 ;
[0122]步驟P13-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟P13-11 ;
[0123]步驟P13-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟P13-11。
[0124]進一步地,所述IO通訊標識的值為第二預設值,所述步驟P13包括:
[0125]步驟P13-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-23,如為接收狀態(tài)則執(zhí)行步驟P13-22 ;
[0126]步驟P13-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為其他則返回步驟P13-21 ;[0127]步驟P13-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為第二字符串則執(zhí)行步驟P13-24,如為其他則返回步驟P13-21 ;
[0128]步驟P13-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟P13-21 ;
[0129]步驟P13-25 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟P13-26,否則執(zhí)行步驟P13-27 ;
[0130]步驟P13-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21 ;
[0131]步驟P13-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21。[0132]進一步地,所述IO通訊標識的值為第三預設值,所述步驟P13包括:
[0133]步驟P13-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0134]步驟P13-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-33,否則返回步驟P13-31 ;
[0135]步驟P13-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟P13-34,否則執(zhí)行步驟P13-35 ;
[0136]步驟P13-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 P13-31 ;
[0137]步驟P13-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-36,如是接收則執(zhí)行步驟 P13-37 ;
[0138]步驟P13-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟P13-31 ;
[0139]步驟P13-37:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟P13-38,否則執(zhí)行步驟P13-39 ;
[0140]步驟P13-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟P13-31 ;
[0141]步驟P13-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟P13-31。
[0142]進一步地,上述方法還包括:所述設備預先定義的設備支持USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;
[0143]所述步驟B5中的給主機返回設備支持的USB通訊USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機。
[0144]進一步地,所述步驟P13包括:
[0145]步驟P13-41:檢測所述IO通訊標識的值,如為第一預設值則執(zhí)行步驟P13-42,如為第二預設值則執(zhí)行步驟P13-47,如為第三預設值則執(zhí)行步驟P13-54 ;
[0146]步驟P13-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0147]步驟P13-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟P13-44,如為第二預設字符則執(zhí)行步驟P13-45 ;如為其他則執(zhí)行步驟P13-46 ;
[0148]步驟P13-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟P13-42 ;
[0149]步驟P13-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟P13-42 ;
[0150]步驟P13-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟P13-42 ;
[0151]步驟P13-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-49,如為接收狀態(tài)則執(zhí)行步驟PI3-48 ;
[0152]步驟P13-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為其他則返回步驟P13-47 ;
[0153]步驟P13-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為第二字符串則執(zhí)行步驟P13-50,如為其他則返回步驟P13-47 ;
[0154]步驟P13-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟P13-47 ;
[0155]步驟P13-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟P13-52,否則執(zhí)行步驟P13-53 ;
`[0156]步驟P13-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ;
[0157]步驟P13-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ;
[0158]步驟P13-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0159]步驟P13-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-56,否則返回步驟P13-54 ;
[0160]步驟P13-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟P13-57,否則執(zhí)行步驟P13-58 ;
[0161]步驟P13-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 P13-54 ;
[0162]步驟P13-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-59,如是接收則執(zhí)行步驟 P13-60 ;
[0163]步驟P13-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟P13-54 ;
[0164]步驟P13-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟P13-61,否則執(zhí)行步驟P13-62 ;
[0165]步驟P13-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟P13-54 ;
[0166]步驟P13-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟P13-54。
[0167]一種通訊模式的識別方法,包括:
[0168]步驟L1:設備上電,進行初始化,打開中斷;
[0169]步驟L2:判斷是否觸發(fā)串行中斷,是則執(zhí)行步驟L3,否則進入其他中斷進行處理,退出中斷后繼續(xù)執(zhí)行步驟L3;
[0170]步驟L3:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟L4,否則執(zhí)行步驟L5 ;
[0171]步驟L4:接收主機下發(fā)的指令,并根據(jù)設備支持的USB接口通訊協(xié)議對接收到的指令進行處理,處理完成后繼續(xù)等待接收主機下發(fā)的指令,返回步驟L4 ;
[0172]步驟L5:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟L6,否則執(zhí)行步驟L7 ;
[0173]步驟L6:等待主機下發(fā)指令,當接收指令時根據(jù)串口協(xié)議進行相應操作,操作完成后返回步驟L6 ;
[0174]步驟L7:檢測串口信號,等待主機下發(fā)握手數(shù)據(jù)包;
[0175]步驟L8:判斷是否檢測到串口信號,是則執(zhí)行步驟L9,否則返回步驟L2 ;
[0176]步驟L9:接收主機下發(fā)的第一個字節(jié)數(shù)據(jù)并將其存儲在第一緩存區(qū)中,判斷第一字節(jié)數(shù)據(jù)是否為第一預設值,是則執(zhí)行步驟L10,否則返回步驟L2 ;
[0177]步驟LlO:當通過串口接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到第一緩存區(qū)中,對第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟L11,否則返回步驟L2 ;
[0178]步驟Lll:設置串口通訊波特率,設置通訊模式為第一串口通訊,返回步驟L2 ;
[0179]所述進入其他中斷進行處理包括:
[0180]步驟Dl:判斷是否觸發(fā)USB中斷,是則執(zhí)行步驟D2,否則退出中斷;
[0181]步驟D2:關閉USB中斷,判斷是否通過端點O接收到Set up數(shù)據(jù)包,是則執(zhí)行步驟D3,否則打開USB中斷,執(zhí)行步驟D4 ;
[0182]步驟D3:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,執(zhí)行步驟D4 ;
[0183]步驟D4:設置通訊模式為USB接口通訊,退出USB中斷。
[0184]進一步地,所述進行初始化包括:將通訊標識的值設為O ;
[0185]所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標識的值是否為1,是則為USB接口通訊,否則不為USB接口通訊;
[0186]所述設置通訊模式為第一串口通訊,具體為:將所述通訊標識的值設為4 ;
[0187]所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標識的值是否為4,是則為第一串口通訊,否則不為第一串口通訊。
[0188]進一步地,所述步驟L6具體包括:
[0189]步驟L6-1:接收串口數(shù)據(jù)并將其存儲到第一緩存區(qū)中;
[0190]步驟L6-2:從所述第一緩存區(qū)的串口數(shù)據(jù)中提取前七個字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預設字符串,是則執(zhí)行步驟L6-3,否則清除通訊模式,給主機返回錯誤信息,返回步驟L2 ;
[0191]步驟L6-3:檢測第四字節(jié)上低四位的數(shù)據(jù),如為第一設定值則執(zhí)行步驟L6-4,如為第二設定值則執(zhí)行步驟L6-5,如為第三設定值則執(zhí)行步驟L6-6 ;
[0192]步驟L6-4:給主機返回包含串口通訊波特率的握手信息,返回步驟L2 ;
[0193]步驟L6-5:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟L2 ;
[0194]步驟L6-6:從所述第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長度,計算該APDU數(shù)據(jù)的長度;
[0195]步驟L6-7:判斷計算得到的APDU數(shù)據(jù)的長度與提取的數(shù)據(jù)長度是否相同,是則給主機返回接收數(shù)據(jù)正確響應,執(zhí)行步驟L6-8,否則給主機返回接收數(shù)據(jù)錯誤信息,返回步驟L2 ;
[0196]步驟L6-8:根據(jù)串口協(xié)議對APDU數(shù)據(jù)進行處理并將處理結(jié)果存儲到所述第二緩存區(qū)中,返回步驟L2。
[0197]進一步地,上述方法還包括:所述設備預先定義設備支持支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議,所述步驟D3中的給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識的值發(fā)送給主機。
[0198]進一步地,所述IO通訊標識的值為第一預設值,所述步驟L4包括:
[0199]步驟L4-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0200]步驟L4-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟L4-13,如為第二預設字符則執(zhí)行步驟L4-14 ;如為其他則執(zhí)行步驟L4-15 ;
[0201]步驟L4-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟L4-11 ;
[0202]步驟L4-14:將解析結(jié)果中的ALDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟L4-11 ;
[0203]步驟L4-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟L4-11。
[0204]進一步地,所述IO通訊標識的值為第二預設值,所述步驟L4包括:
[0205]步驟L4-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-23,如為接收狀態(tài)則執(zhí)行步驟L4-22 ;
[0206]步驟L4-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為其他則返回步驟L4-21 ;
[0207]步驟L4-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為第二字符串則執(zhí)行步驟L4-24,如為其他則返回步驟L4-21 ;
[0208]步驟L4-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟L4-21 ;
[0209]步驟L4-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟L4-26,否則執(zhí)行步驟L4-27 ;
[0210]步驟L4-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到所述第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21 ;[0211 ] 步驟L4-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21。
[0212]進一步地,所述IO通訊標識的值為第三預設值,所述步驟L4包括:
[0213]步驟L4-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0214]步驟L4-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-33,否則返回步驟L4-31 ;
[0215]步驟L4-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟L4-34,否則執(zhí)行步驟L4-35 ;
[0216]步驟L4-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 L4-31 ;
[0217]步驟L4-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-36,如是接收則執(zhí)行步驟 L4-37 ;
[0218]步驟L4-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟L4-31 ;
[0219]步驟L4-37:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟L4-38,否則執(zhí)行步驟L4-39 ;
[0220]步驟L4-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟L4-31 ;
[0221]步驟L4-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟L4-31。
[0222]進一步地,上述方法還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;
[0223]所述步驟B5中的給主機返回設備支持的USB通訊USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機。
[0224]進一步地,所述步驟L4包括:
[0225]步驟L4-41:檢測所述IO通訊標識的值,如為第一預設值則執(zhí)行步驟L4-42,如為第二預設值則執(zhí)行步驟L4-47,如為第三預設值則執(zhí)行步驟L4-54 ;
[0226]步驟L4-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0227]步驟L4-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟L4-44,如為第二預設字符則執(zhí)行步驟L4-45 ;如為其他則執(zhí)行步驟L4-46 ;
[0228]步驟L4-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟L4-42 ;
[0229]步驟L4-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟L4-42 ;
[0230]步驟L4-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟L4-42 ;
[0231]步驟L4-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-49,如為接收狀態(tài)則執(zhí)行步驟L4-48 ;
[0232]步驟L4-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為其他則返回步驟L4-47;
[0233]步驟L4-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為第二字符串則執(zhí)行步驟L4-50,如為其他則返回步驟L4-47 ;
[0234]步驟L4-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟L4-47 ;
[0235]步驟L4-51:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟L4-52,否則執(zhí)行步驟L4-53 ;
[0236]步驟L4-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ;
[0237]步驟L4-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ;
[0238]步驟L4-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0239]步驟L4-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-56,否則返回步驟L4-54 ;
[0240]步驟L4-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟L4-57,否則執(zhí)行步驟L4-58 ;
[0241]步驟L4-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 L4-54 ;
[0242]步驟L4-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-59,如是接收則執(zhí)行步驟 L4-60 ;
[0243]步驟L4-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟L4-54 ;
[0244]步驟L4-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟L4-61,否則執(zhí)行步驟L4-62 ;
[0245]步驟L4-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟L4-54 ;
[0246]步驟L4-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟L4-54。
[0247]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:
[0248]本發(fā)明的方法即可在現(xiàn)有產(chǎn)品上通用,也適用于老版本的串口產(chǎn)品,可提高產(chǎn)品的整體兼容性、繼承性,也避免了更新淘汰市場上大量老產(chǎn)品而產(chǎn)生的巨額開銷,節(jié)省了大量人力、物力、財力成本。
【專利附圖】
【附圖說明】
[0249]圖1為本發(fā)明實施例一提供的一種通訊模式的識別方法流程圖;
[0250]圖2為本發(fā)明實施例一中設備支持CCID協(xié)議時步驟103的細化流程圖;[0251]圖3為本發(fā)明實施例一中設備支持HID協(xié)議時步驟103的細化流程圖;
[0252]圖4為本發(fā)明實施例一中設備支持SCSI協(xié)議時步驟103的細化流程圖;
[0253]圖5為本發(fā)明實施例一中步驟106的細化流程圖;
[0254]圖6為本發(fā)明實施例一中接收到其他中斷信號時進行處理的流程圖;
[0255]圖7為本發(fā)明實施例二提供的一種通訊模式的識別方法流程圖;
[0256]圖8為本發(fā)明實施例二中步驟612的細化流程圖;
[0257]圖9為本發(fā)明實施例二中接收到中斷信號進行處理的流程圖;
[0258]圖10為本發(fā)明實施例三中提供的一種通訊模式的識別方法流程圖;
[0259]圖11為本發(fā)明實施例三中根據(jù)串口通訊協(xié)議對接收到的數(shù)據(jù)進行處理的實現(xiàn)流程圖。
【具體實施方式】
[0260]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0261]實施例一
[0262]本發(fā)明實施例一提供一種通訊模式的識別方法,如圖1所示,包括:
[0263]步驟100:設備上電,進行初始化;
[0264]本實施例中,設備進行初始化包括:配置設備和時鐘頻率、配置設備IO工作模塊、配置模塊時鐘使能、配置定時器工作模式、設置通訊標識復位、USB模塊初始化、串口模塊初始化、復位超時標識、設置狀態(tài)機為發(fā)送狀態(tài);
[0265]步驟101:打開中斷和定時器;
[0266]具體的,本實施例中的中斷包括串口中斷、USB中斷、時鐘中斷;在本實施例中,打開定時器時定時器開始計時,經(jīng)預設時長時觸發(fā)進入時鐘中斷處理,優(yōu)選的,預設時長為50ms ;時鐘中斷處理包括:關閉定時器,將超時標識置位,打開定時器,退出時鐘中斷;
[0267]步驟102:檢測通訊模式的類型,如為USB接口通訊,則關閉定時器,執(zhí)行步驟103,如為串口通訊,則關閉定時器,執(zhí)行步驟106,如未設置通訊模式則執(zhí)行步驟104 ;
[0268]具體的,本實施例中,判斷通訊標識的值,如為I則通訊模式為串口,如為2則通訊模式為USB接口,如為O則未設置通訊模式;
[0269]步驟103:等待主機下發(fā)指令,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,操作完成后返回步驟103 ;
[0270]本實施例中的設備中預先定義該設備只支持一種通訊協(xié)議,具體通過IO通訊標識預先進行設置,在枚舉過程中給主機返回設備支持的USB接口通訊協(xié)議,具體返回的是IO通訊標識的值,具體的,如IO通訊標識的值為第一預設值,優(yōu)選的第一預設值為1,則表示設備支持的USB接口通訊協(xié)議為CCID協(xié)議,步驟103的實現(xiàn)過程如圖2所示;
[0271]步驟103-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析第一緩存區(qū)中的指令;
[0272]步驟103-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟103-13,如為第二預設字符則執(zhí)行步驟103-14 ;如為其他則執(zhí)行步驟103-15 ;
[0273]在本實施例中,第一預設字符可以為0x61*0x62*0x63*0x6A*0x6C*0x6D ;優(yōu)選的,本實施例中的第一預設字符為0x61 ;第二預設字符具體為0x6F ;
[0274]步驟103-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟103-11 ;
[0275]步驟103-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟103-11 ;
[0276]步驟103-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將消息錯誤響應返回給主機,返回步驟103-11。
[0277]本實施例中的設備預先定義該設備只支持一種通訊協(xié)議,具體通過IO通訊標識預先進行設置,在枚舉過程中給主機返回設備支持的USB接口通訊協(xié)議,具體返回的IO通訊標識的值為第二預設值,優(yōu)選的第二預設值為3,則表示設備支持的USB接口通訊協(xié)議為HID協(xié)議,步驟103的實現(xiàn)過如圖3所示;
[0278]步驟103-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟103-23,如為接收狀態(tài)則執(zhí)行步驟103-22 ;
[0279]具體的,在本實施例中,步驟103-21中判斷狀態(tài)機標識,如為I則表示發(fā)送狀態(tài),如為2則表示接收狀態(tài);
[0280]步驟103-22:根據(jù) HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟103-25,如為其他則返回步驟103-21 ;
[0281]具體的,在本實施例中,第一字符串為0x210x09 ;
[0282]步驟103-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟103-25,如為第二字符串則執(zhí)行步驟103-24,如為其他則返回步驟103-21 ;
[0283]具體的,在本實施例中,第一字符串為0x210x09,第二字符串為OxAIOxOI ;
[0284]步驟103-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟103-21 ;
[0285]步驟103-25 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟103-26,否則執(zhí)行步驟103-27 ;
[0286]本實施例中,判斷解析結(jié)果的前五個字節(jié)數(shù)據(jù)是否為預設數(shù)據(jù),是則為熱復位指令,否則不為熱復位指令;本實施例中的預設數(shù)據(jù)具體為0x460x540x520x530x54 ;
[0287]步驟103-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟103-21 ;
[0288]本實施例中的復位參數(shù)包括等待時間、通訊速率等;將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài)具體為:將狀態(tài)機標識設為2 ;
[0289]步驟103-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟103-21 ;
[0290]該步驟中的將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài)具體為:將狀態(tài)機標識設為2。
[0291]本實施例中的設備中預先定義只支持一種USB接口通訊協(xié)議,在枚舉過程中給主機返回設備支持的USB接口通訊協(xié)議,具體返回的IO通訊標識的值為第三預設值,優(yōu)選的第三預設值為5,則表示設備支持的USB接口通訊協(xié)議為SCSI協(xié)議,步驟103的實現(xiàn)過如圖4所示;
[0292]步驟103-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0293]步驟103-32:根據(jù)解析結(jié)果判斷接收到的該指令是否為合法SCSI指令,是則執(zhí)行步驟103-33,否則返回步驟103-31 ;
[0294]具體的,本實施例中,判斷解析結(jié)果的前四個字節(jié)數(shù)據(jù)是否為0x55534243,是則合法的,否則不合法;
[0295]步驟103-33:根據(jù)解析結(jié)果判斷該指令是否為標準SCSI指令,是則執(zhí)行步驟103-34,否則執(zhí)行步驟103-35 ;
[0296]具體的,在本實施例中,通過判斷解析結(jié)果中的第16字節(jié)上的數(shù)據(jù)是否大于OxFC,是則該指令是標準SCSI指令,否則該指令不是標準SCSI指令;
[0297]步驟103-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 103-31 ;
[0298]步驟103-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟103_36,如是接收則執(zhí)行步驟 103-37 ;
[0299]步驟103-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟103-31 ;
[0300]步驟103-37:將解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)解析結(jié)果判斷該指令是否為熱復位指令,是則執(zhí)行步驟103-38,否則執(zhí)行步驟103-39 ;
[0301]步驟103-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟103-31 ;
[0302]步驟103-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟103-31。
[0303]步驟104:判斷超時標識是否置位,是則執(zhí)行步驟105,否則返回步驟102 ;
[0304]具體的,在本實施例中,判斷超時標識是否為true,是則置位,否則未置位;
[0305]步驟105:設置通訊模式為串口通訊,關閉定時器,將超時標識復位,執(zhí)行步驟106 ;
[0306]步驟106:等待主機下發(fā)指令,當接收到指令時根據(jù)串口協(xié)議進行相應操作,操作完成后返回步驟106 ;
[0307]在本實施例中,步驟106的實現(xiàn)過程如圖5所示,包括:
[0308]步驟106-0:當通過串口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)串口協(xié)議對第一緩存區(qū)中的指令進行解析;
[0309]步驟106-1:判斷解析結(jié)果中第一字節(jié)上的數(shù)據(jù)是否為第一預設數(shù)據(jù),是則執(zhí)行步驟106-2,否則返回步驟106-0 ;
[0310]具體的,本實施例中的第一預設數(shù)據(jù)為0xF5 ;
[0311]步驟106-2:判斷解析結(jié)果中第三字節(jié)上的數(shù)據(jù)是否為第二預設數(shù)據(jù),是則執(zhí)行步驟106-3,否則執(zhí)行步驟106-4 ;
[0312]本實施例中的第二預設數(shù)據(jù)為0x03 ;[0313]步驟106-3:對解析結(jié)果進行處理并將處理結(jié)果返回給主機,返回步驟106-0 ;
[0314]步驟106-4:檢測解析結(jié)果中第四字節(jié)上的數(shù)據(jù),如為第三預設數(shù)據(jù)則執(zhí)行步驟106-5,如為第四預設數(shù)據(jù)則執(zhí)行步驟106-6,如為其他則返回步驟106-0 ;
[0315]具體的,本實施例中的第三預設數(shù)據(jù)為0x02,第四預設數(shù)據(jù)為0x01 ;
[0316]步驟106-5:輸出電量不足信息,結(jié)束;
[0317]步驟106-6:設置響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,返回步驟106-0 ;
[0318]具體的,在本實施例中,該步驟中的響應數(shù)據(jù)包括設備與主機的通訊波特率和傳輸數(shù)據(jù)的長度。
[0319]在本實施例中,當在識別通訊模式過程中檢測到其他中斷信號時,則進行其他中斷處理,其他中斷處理完成后繼續(xù)工作,其他中斷處理過程如圖6所示,包括:
[0320]步驟B1:判斷中斷類型,如為USB中斷則執(zhí)行步驟B2,如為串口中斷則執(zhí)行步驟B6 ;
[0321 ] 具體的,在本實施例中,根據(jù)中斷標志寄存器中的標志位判斷中斷類型,如標志位的值為I則為USB中斷,如標志位的值為2則為串口中斷;
[0322]步驟B2:關閉USB中斷;
[0323]具體的,步驟B2為:將中斷標志寄存器中的標志位的值設為O ;
[0324]步驟B3:判斷是否已設置通訊模式,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ;
[0325]具體的,本實施例中判斷通訊標識是否為0,是則執(zhí)行步驟B4,否則執(zhí)行步驟B5 ;
[0326]步驟B4:設置通訊模式為USB接口通訊,執(zhí)行步驟B5 ;
[0327]具體的,本實施例中步驟B4為:將通訊標識置為2 ;
[0328]步驟B5:打開USB中斷,進行USB枚舉,枚舉完成后退出USB中斷;
[0329]在本實施例中,枚舉過程具體為:給主機返回設備支持的USB接口通訊協(xié)議,優(yōu)選的,返回的是IO通訊標識的值,如IO通訊標識的值為第一預設值則表示設備支持的USB接口通訊協(xié)議為CCID協(xié)議,即設備可以解析處理CCID協(xié)議的指令;如IO通訊標識的值為第二預設值則表示設備支持的USB接口通訊協(xié)議為HID協(xié)議,即設備可解析處理HID協(xié)議的指令;如IO通訊標識的值為第三預設值則表示設備支持的USB接口通訊協(xié)議為SCSI協(xié)議,即設備可解析處理SCSI協(xié)議的指令;優(yōu)選的,第一預設值為1,第二預設值為3,第三預設值為5 ;
[0330]步驟B6:關閉串口中斷;
[0331]具體的,步驟B6為:將中斷標志寄存器中的標志位的值設為O ;
[0332]步驟B7:判斷是否已設置通訊模式,是則打開串口中斷,退出中斷,否則執(zhí)行步驟B8 ;
[0333]具體的,本實施例中檢測通訊標識,如為2則為USB接口通訊,如為I則為串口通訊,如為O則未設置通訊模式;
[0334]步驟B8:將通訊模式設置為串口通訊,打開串口中斷,退出中斷。
[0335]具體的,本實施例中,將通訊模式設置為串口通訊為:將通訊標識置為I。
[0336]本實施例的步驟106包括:當接收到設置通訊模式指令時設置通訊模式為串口通訊;對應的步驟B8替換為:扔掉第一個數(shù)據(jù)包,打開串口中斷,退出串口中斷。
[0337]本實施例中也可預先定義該設備支持多種USB接口通訊協(xié)議,如支持CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的其中兩種協(xié)議或者三種協(xié)議,枚舉過程中給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機,如IO通訊標識的值為第一預設值,表示所述設備支持CCID協(xié)議;如IO通訊標識的值為第二預設值,表示所述設備支持HID協(xié)議;如IO通訊標識的值為第三預設值,表示所述設備支持SCSI協(xié)議。
[0338]對應的,本實施例中的步驟103包括:
[0339]步驟103-41:檢測IO通訊標識的值,如為第一預設值則根據(jù)CCID協(xié)議對收到的指令進行操作,如為第二預設值則根據(jù)HID協(xié)議對收到的指令進行操作,如為第三預設值則根據(jù)SCSI協(xié)議對收到的指令進行操作;
[0340]具體的,本實施例中根據(jù)CCID協(xié)議對收到的指令進行操作參見上述步驟103-11至步驟103-15 ;根據(jù)HID協(xié)議對收到的指令進行操作參見上述步驟103-21至步驟103-27 ;根據(jù)SCSI協(xié)議對收到的指令進行操作參見上述步驟103-31至步驟103-39。在此不再贅述根據(jù)各協(xié)議對接收到的指令進行操作的具體實現(xiàn)過程。
[0341]實施例二
[0342]本發(fā)明實施例二提供一種通訊模式的識別方法,如圖7所示,包括:
[0343]步驟601:設備上電,進行初始化,打開中斷;
[0344]本實施例中設備進行初始化包括:將通訊標識的值置為0,開啟定時器;
[0345]具體的,本實施例中的打開中斷包括:打開串口中斷、USB中斷、時鐘中斷;
[0346]步驟602:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟613,否則執(zhí)行步驟
603;
[0347]具體的,本實施例中步驟602為:判斷通訊標識的值是否為1,是則為USB接口通訊模式,否則不為USB接口通訊模式;
[0348]步驟603:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟604,否則返回步驟602 ;
[0349]步驟604:將接收到的數(shù)據(jù)存儲到第一緩存區(qū)中,判斷存儲在第一緩存區(qū)中的第一字節(jié)數(shù)據(jù)是否為第一預設值,是則執(zhí)行步驟606,否則執(zhí)行步驟605 ;
[0350]在本實施例中,第一預設值具體為OxOF ;
[0351]步驟605:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟613,否則返回步驟
604;
[0352]步驟606:當通過串口接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到第一緩存區(qū)中,對第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟607,否則返回步驟603 ;
[0353]在本實施例中,對緩存區(qū)中除第一字節(jié)數(shù)據(jù)和最后一個字節(jié)數(shù)據(jù)外的剩余數(shù)據(jù)進行計算,判斷計算結(jié)果是否與最后一個字節(jié)數(shù)據(jù)相同,是則校驗通過,否則校驗未通過;
[0354]步驟607:設置串口通訊波特率,設置通訊模式為第一串口通訊;
[0355]在本實施例中,設置通訊模式為第一串口通訊具體為:將通訊標識的值設為4 ;在第一串口通訊模式下接收到的數(shù)據(jù)為握手命令;
[0356]步驟608:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟610,否則執(zhí)行步驟609 ;
[0357]本實施例中步驟608具體為:判斷通訊標識的值是否為4,是則執(zhí)行步驟610,否則執(zhí)行步驟609 ;[0358]步驟609:設置通訊模式為第二串口通訊,執(zhí)行步驟612 ;
[0359]在本實施例中,步驟609具體為:將通訊標識的值設為2 ;
[0360]本實施例中,設備的通訊模式為第二串口通訊時標識當前可接收串口數(shù)據(jù)并根據(jù)串口協(xié)議進行處理;
[0361]步驟610:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟611,否則等待接收數(shù)據(jù),返回步驟610 ;
[0362]步驟611:當接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到第一緩存區(qū)中,對第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟612,否則返回步驟610;
[0363]本實施例中該步驟的校驗方法與步驟606中的校驗方法相同,在此不再贅述;
[0364]步驟612:根據(jù)串口協(xié)議對第一緩存區(qū)中的數(shù)據(jù)進行處理,返回步驟608 ;
[0365]如圖8所示,在本實施例中,步驟612的處理過程包括:
[0366]步驟612-1:從第一緩存區(qū)中提取前七個字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預設字符串,是則執(zhí)行步驟612-2,否則給主機返回錯誤信息,返回步驟 609 ;
[0367]具體的,本實施例中的第一預設字符串為0xF5、0x54 ;
[0368]步驟612-2:檢測第四字節(jié)上低四位的數(shù)據(jù),如為第一設定值則執(zhí)行步驟612-3,如為第二設定值則執(zhí)行步驟612-4,如為第三設定值則執(zhí)行步驟612-5,如為其他則給主機返回錯誤信息,返回步驟609;
[0369]在本實施例中,第一設定值、第二設定值、第三設定值均為十六進制數(shù),分別為0χ02λ0χ07λ0χ03 ;
[0370]步驟612-3:給主機返回包含串口通訊波特率的握手信息,返回步驟609 ;
[0371]步驟612-4:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟609 ;
[0372]步驟612-5:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長度,計算該APDU數(shù)據(jù)的長度,判斷計算得到的APDU數(shù)據(jù)的長度與提取的數(shù)據(jù)長度是否相同,是則給主機返回接收數(shù)據(jù)正確響應,執(zhí)行步驟612-6,否則給主機返回接收數(shù)據(jù)錯誤信息,返回步驟609 ;
[0373]步驟612-6:根據(jù)串口協(xié)議對APDU數(shù)據(jù)進行處理并將處理結(jié)果存儲到第二緩存區(qū)中,返回步驟609 ;
[0374]步驟613:等待主機下發(fā)指令,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,操作完成后返回步驟613 ;
[0375]本實施例中步驟613的具體實現(xiàn)過程與實施例一中步驟103相同,在此不再贅述。
[0376]在本實施例中,在識別通訊模式的過程中如檢測到中斷信號時,則進行中斷處理,如圖9所示,處理過程具體包括:
[0377]步驟Al:判斷是否為USB中斷,是則執(zhí)行步驟Α2,否則退出中斷;
[0378]具體的,本實施例中判斷中斷標志寄存器中的標志位的值是否為1,是則為USB中斷,否則不為USB中斷;
[0379]步驟Α2:關閉USB中斷;
[0380]具體的,步驟Α2為:將中斷標志寄存器中的標志位的值設為O ;
[0381]步驟A3:判斷是否已設置通訊模式,是則執(zhí)行步驟Α5,否則執(zhí)行步驟Α4 ;
[0382]具體的,本實施例中判斷通訊標識的值是否為0,是則未設置通訊模式,否則設置了通訊模式;
[0383]步驟A4:將通訊模式設置為USB接口通訊,執(zhí)行步驟A5 ;
[0384]具體的,本實施例中步驟A4為:將通訊標識置為I ;
[0385]步驟A5:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷;
[0386]具體的,給主機返回設備支持的USB接口通訊協(xié)議,包括:給主機返回設備IO通訊標識的值,如IO通訊標識的值為第一預設值,表示所述設備支持CCID協(xié)議;如IO通訊標識的值為第二預設值,表示所述設備支持HID協(xié)議;如IO通訊標識的值為第三預設值,表示所述設備支持SCSI協(xié)議;
[0387]本實施例中設備支持的USB接口通訊協(xié)議可預先進行設置,預先設置設備支持的USB接口通訊協(xié)議為CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的一種或者兩種或三種。
[0388]當設備支持CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的兩種或者三種時,則步驟613包括:
[0389]步驟613-41:檢測IO通訊標識的值,如為第一預設值則執(zhí)行步驟613_42,如為第二預設值則執(zhí)行步驟613-47,如為第三預設值則執(zhí)行步驟613-54 ;
[0390]優(yōu)選的,第一預設值為1,第二預設值為3,第三預設值為5 ;
[0391]步驟613-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0392]步驟613-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟613-44,如為第二預設字符則執(zhí)行步驟613-45 ;如為其他則執(zhí)行步驟613-46 ;
[0393]步驟613-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟613-42 ;
[0394]步驟613-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟613-42;
[0395]步驟613-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將消息錯誤響應返回給主機,返回步驟613-42 ;
[0396]步驟613-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟613-49,如為接收狀態(tài)則執(zhí)行步驟613-48 ;
[0397]步驟613-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟613-51,如為其他則返回步驟613-47 ;
[0398]步驟613-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟613-51,如為第二字符串則執(zhí)行步驟613-50,如為其他則返回步驟613-47 ;
[0399]步驟613-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟613-47 ;
[0400]步驟613-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟613-52,否則執(zhí)行步驟613-53 ;
[0401]步驟613-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到所述第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟613-47 ;
[0402]步驟613-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟613-47 ;
[0403]步驟613-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析;
[0404]步驟613-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟613-56,否則返回步驟613-54 ;
[0405]步驟613-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟613-57,否則執(zhí)行步驟613-58 ;
[0406]步驟613-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟 613-54 ;
[0407]步驟613-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟613_59,如是接收則執(zhí)行步驟 613-60 ;
[0408]步驟613-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟613-54 ;
[0409]步驟613-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟613-61,否則執(zhí)行步驟613-62 ;
[0410]步驟613-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到所述第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟613-54 ;
[0411]步驟613-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到所述第二緩存區(qū)中,返回步驟613-54。
[0412]實施例三
[0413]本發(fā)明實施例三提供了一種通訊模式的識別方法,如圖10所示,包括:
[0414]步驟900:設備上電,進行初始化;
[0415]在本實施例中,進行初始化包括:將通訊標識的值設為O ;
[0416]本實施例中,設備上電后的默認通訊模式為串口通訊;
[0417]步驟901:打開串口中斷、USB中斷、時鐘中斷和定時器;
[0418]步驟902:判斷是否觸發(fā)串行中斷,是則執(zhí)行步驟903,否則進入其他中斷進行處理,退出中斷后繼續(xù)執(zhí)行步驟903 ;
[0419]具體的,在本實施例中,進入其他中斷具體處理過程包括:
[0420]步驟Dl:判斷是否觸發(fā)USB中斷,是則執(zhí)行步驟A2,否則退出中斷;
[0421]步驟D2:關閉USB中斷,判斷是否通過端點O接收到Set up數(shù)據(jù)包,是則執(zhí)行步驟D3,否則打開USB中斷,執(zhí)行步驟D4 ;
[0422]步驟D3:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,執(zhí)行步驟D4 ;
[0423]本實施中預先定義設備支持的USB接口通訊協(xié)議為CCID、HID、SCSI中的一種或多種,每種協(xié)議對應的IO通訊標識的值不同,如IO通訊標識的值為第一預設值,表示所述設備支持CCID協(xié)議;如IO通訊標識的值為第二預設值,表示所述設備支持HID協(xié)議;如IO通訊標識的值為第三預設值,表示所述設備支持SCSI協(xié)議;給主機返回設備支持的USB接口通訊協(xié)議具體為:將IO通訊標識的值發(fā)送給主機;優(yōu)選的,本實施例中以設備只支持一種協(xié)議為例進行說明;
[0424]步驟D4:設置通訊模式為USB接口通訊,退出USB中斷;
[0425]具體的,設置通訊模式為USB接口通訊包括:將通訊標識的值設為I ;
[0426]步驟903:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟904,否則返回步驟905 ;
[0427]在本實施例中,步驟903具體為:判斷通訊標識的值是否為1,是則為USB接口通訊,否則不為USB接口通訊;
[0428]步驟904:接收主機下發(fā)的指令,并根據(jù)設備支持的USB接口通訊協(xié)議對接收到的指令進行處理,處理完成后繼續(xù)等待接收主機下發(fā)的指令,返回步驟904 ;
[0429]在本實施例中,根據(jù)設備支持的USB接口通訊協(xié)議對接收到的指令進行處理的實現(xiàn)過程與實施例一中的步驟103處理過程相同,在此不再贅述
[0430]步驟905:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟906,否則執(zhí)行步驟907 ;
[0431]具體的,步驟905為:判斷通訊標識的值是否為4,是則為第一串口通訊,否則不為
第一串口通訊;
[0432]步驟906:等待主機下發(fā)指令,當接收指令時根據(jù)串口協(xié)議進行相應操作,操作完成后返回步驟906 ;
[0433]根據(jù)串口通訊協(xié)議對接收到的數(shù)據(jù)進行相應操作,如圖11所示,包括:
[0434]步驟906-1:接收串口數(shù)據(jù)并將其存儲到第一緩存區(qū)中;
[0435]步驟906-2:從第一緩存區(qū)的串口數(shù)據(jù)中提取前七個字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預設字符串,是則執(zhí)行步驟906-3,否則清除通訊模式,給主機返回錯誤信息,返回步驟902 ;
[0436]具體的,本實施例中的第一預設字符串為0xF5、0x54 ;
[0437]步驟906-3:檢測第四字節(jié)上低四位的數(shù)據(jù),如為第一設定值則執(zhí)行步驟906-4,如為第二設定值則執(zhí)行步驟906-5,如為第三設定值則執(zhí)行步驟906-6 ;
[0438]在本實施例中,第一設定值、第二設定值、第三設定值分別為0χ02、0χ07、0χ03 ;
[0439]步驟906-3中如判斷第四字節(jié)上低四位的數(shù)據(jù)為其他則給主機返回錯誤信息,返回步驟902 ;
[0440]步驟906-4:給主機返回包含串口通訊波特率的握手信息,返回步驟902 ;
[0441]步驟906-5:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟902 ;
[0442]步驟906-6:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長度,計算該APDU數(shù)據(jù)的長度;
[0443]步驟906-7:判斷計算得到的APDU數(shù)據(jù)的長度與提取的數(shù)據(jù)長度是否相同,是則給主機返回接收數(shù)據(jù)正確響應,執(zhí)行步驟906-8,否則給主機返回接收數(shù)據(jù)錯誤信息,返回步驟902 ;
[0444]步驟906-8:根據(jù)串口協(xié)議對APDU數(shù)據(jù)進行處理并將處理結(jié)果存儲到第二緩存區(qū)中,返回步驟902 ;
[0445]步驟907:檢測串口信號,等待主機下發(fā)握手數(shù)據(jù)包;
[0446]步驟908:判斷是否檢測到串口信號,是則執(zhí)行步驟909,否則返回步驟902 ;[0447]步驟909:接收主機下發(fā)的第一個字節(jié)數(shù)據(jù)并將其存儲在第一緩存區(qū)中,判斷第一字節(jié)數(shù)據(jù)是否為第一預設值,是則執(zhí)行步驟910,否則返回步驟902 ;
[0448]在本實施例中,第一預設值具體為OxOF ;
[0449]步驟910:當通過串口接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到第一緩存區(qū)中,對第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟911,否則返回步驟902 ;
[0450]步驟911:設置串口通訊波特率,設置通訊模式為第一串口通訊,返回步驟902 ;
[0451]在本實施例中,設置通訊模式為第一串口通訊,具體為:將通訊標識的值設為4 ;
[0452]在本實施例中,設備設置了通訊波特率在接收到主機下發(fā)的獲取波特率指令時將該波特率發(fā)送給主機,然后與主機以該波特率進行通訊。
[0453]本實施例中的設備也可預先定義設備支持CCID協(xié)議、HID協(xié)議和SCSI協(xié)議中的至少兩種USB接口通訊協(xié)議,其實現(xiàn)過程與實施例二相同,在此不再贅述。
[0454]本發(fā)明實施例提供的方法即可在現(xiàn)有產(chǎn)品上通用,也適用于老版本的串口產(chǎn)品,可提高產(chǎn)品的整體兼容性、繼承性,也避免了更新淘汰市場上大量老產(chǎn)品而產(chǎn)生的巨額開銷,節(jié)省了大量人力、物力、財力成本。
[0455]以上所述,僅為本發(fā)明較佳的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術(shù)領域】的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應該以權(quán)利要求的保護范圍為準。
【權(quán)利要求】
1.一種通訊模式的識別方法,其特征在于,包括: 步驟S1:設備上電,進行初始化,打開中斷和定時器,所述定時器開始計時; 當所述定時器計時到達預設值時,進入時鐘中斷處理,時鐘中斷處理包括:關閉所述定時器,將超時標識置位,打開所述定時器,退出時鐘中斷; 當檢測到其他中斷信號時,執(zhí)行步驟B1-步驟B8 ; 步驟B1:判斷中斷類型,如為USB中斷則執(zhí)行步驟B2,如為串口中斷則執(zhí)行步驟B6 ; 步驟B2:關閉USB中斷; 步驟B3:判斷是否已設置通訊模式,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ; 步驟B4:設置通訊模式為USB接口通訊,執(zhí)行步驟B5 ; 步驟B5:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷; 步驟B6:關閉串口中斷; 步驟B7:判斷是否已設置通訊模式,是則打開串口中斷,退出串口中斷,否則執(zhí)行步驟B8 ; 步驟B8:根據(jù)接收到的第一個數(shù)據(jù)包設置通訊模式為串口通訊,打開串口中斷,退出串口中斷;` 步驟S2:檢測通訊模式的類型,如為USB接口通訊,則關閉所述定時器,執(zhí)行步驟S3,如為串口通訊,則關閉所述定時器,執(zhí)行步驟S6,如未設置通訊模式則執(zhí)行步驟S4 ; 步驟S3:等待主機下發(fā)指令,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,操作完成后返回步驟S3 ; 步驟S4:判斷所示超時標識是否置位,是則執(zhí)行步驟S5,否則返回步驟S2 ; 步驟S5:設置通訊模式為串口通訊,關閉所述定時器,將超時標識復位,執(zhí)行步驟S6 ;步驟S6:等待主機下發(fā)指令,當接收到指令時根據(jù)串口協(xié)議進行相應操作,操作完成后返回步驟S6。
2.如權(quán)利要求1所述的方法,其特征在于,還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議; 所述步驟B5中的給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識的值發(fā)送給主機。
3.如權(quán)利要求2所述的方法,其特征在于,所述IO通訊標識的值為第一預設值,所述步驟S3包括: 步驟S3-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟S3-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟S3-13,如為第二預設字符則執(zhí)行步驟S3-14 ;如為其他則執(zhí)行步驟S3-15 ; 步驟S3-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟S3-11 ; 步驟S3-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟S3-11 ; 步驟S3-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟S3-11。
4.如權(quán)利要求2所述的方法,其特征在于,所述IO通訊標識的值為第二預設值,所述步驟S3包括: 步驟S3-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-23,如為接收狀態(tài)則執(zhí)行步驟S3-22 ;步驟S3-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為其他則返回步驟S3-21 ; 步驟S3-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為第二字符串則執(zhí)行步驟S3-24,如為其他則返回步驟S3-21 ; 步驟S3-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟S3-21 ; 步驟S3-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟S3-26,否則執(zhí)行步驟S3-27 ; 步驟S3-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21 ; 步驟S3-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的 狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21。
5.如權(quán)利要求2所述的方法,其特征在于,所述IO通訊標識的值為第三預設值,所述步驟S3包括: 步驟S3-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析; 步驟S3-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-33,否則返回步驟S3-31 ; 步驟S3-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟S3-34,否則執(zhí)行步驟S3-35 ; 步驟S3-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟S3-31 ; 步驟S3-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-36,如是接收則執(zhí)行步驟S3-37 ; 步驟S3-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟S3-31 ; 步驟S3-37:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟S3-38,否則執(zhí)行步驟S3-39 ; 步驟S3-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟S3-31 ; 步驟S3-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟S3-31。
6.如權(quán)利要求1所述的方法,其特征在于,還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;所述步驟B5中的給主機返回設備支持的USB通訊USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機。
7.如權(quán)利要求6所述的方法,其特征在于,所述步驟S3包括: 步驟S3-41:檢測所述IO通訊標識的值,如為第一預設值則執(zhí)行步驟S3-42,如為第二預設值則執(zhí)行步驟S3-47,如為第三預設值則執(zhí)行步驟S3-54 ; 步驟S3-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟S3-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟S3-44,如為第二預設字符則執(zhí)行步驟S3-45 ;如為其他則執(zhí)行步驟S3-46 ; 步驟S3-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟S3-42 ; 步驟S3-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟S3-42 ; 步驟S3-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟S3-42 ; 步驟S3-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-49,如為接收狀態(tài)則執(zhí)行步驟S3-48 ;步驟S3-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為其他則返回步驟S3-47 ; 步驟S3-49:根據(jù)HID協(xié)議解 析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為第二字符串則執(zhí)行步驟S3-50,如為其他則返回步驟S3-47 ; 步驟S3-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟S3-47 ; 步驟S3-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟S3-52,否則執(zhí)行步驟S3-53 ; 步驟S3-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ; 步驟S3-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ; 步驟S3-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析; 步驟S3-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-56,否則返回步驟S3-54 ; 步驟S3-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟S3-57,否則執(zhí)行步驟S3-58 ; 步驟S3-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟S3-54 ; 步驟S3-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-59,如是接收則執(zhí)行步驟S3-60 ; 步驟S3-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟S3-54 ; 步驟S3-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟S3-61,否則執(zhí)行步驟S3-62 ; 步驟S3-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟S3-54; 步驟S3-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟S3-54。
8.如權(quán)利要求1所述的方法,其特征在于,所述步驟S6包括: 步驟S6-1:當通過串口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)串口協(xié)議對所述第一緩存區(qū)中的指令進行解析并判斷解析結(jié)果中第一字節(jié)上的數(shù)據(jù)是否為第一預設數(shù)據(jù),是則執(zhí)行步驟S6-2,否則返回步驟S6-1 ; 步驟S6-2:判斷所述解析結(jié)果中第三字節(jié)上的數(shù)據(jù)是否為第二預設數(shù)據(jù),是則執(zhí)行步驟S6-3,否則執(zhí)行步驟S6-4 ; 步驟S6-3:對所述解析結(jié)果進行處理并將處理結(jié)果返回給主機,返回步驟S6-1 ; 步驟S6-4:檢測所述解析結(jié)果中第四字節(jié)上的數(shù)據(jù),如為第三預設數(shù)據(jù)則執(zhí)行步驟S6-5,如為第四預設數(shù)據(jù)則執(zhí)行步驟S6-6,如為其他則返回步驟S6-1 ; 步驟S6-5:輸出電量不足信息,進入死機狀態(tài),結(jié)束; 步驟S6-6:設置響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,返回步驟S6-1 ;所述響應數(shù)據(jù)包括設備與主機的通訊波特率和傳輸數(shù)據(jù)的長度。
9.如權(quán)利要求1所述的方法,其特征在于,所述初始化包括:將通訊標識的值設為O; 所述檢測通訊模式的類型,具體為:檢查所述通訊標識的值,若所述通訊標識的值為I則當前通訊模式為USB接口通訊,若所述通訊標識的值為2則當前通訊模式為串口通訊,若所述通訊標識的值為O則未設置通訊模式; 所述設置通訊模式為串口通訊,具體為:將所述通訊標識的值設為2 ; 所述設置通訊模式為USB接口通訊,具體為:將所述通訊標識的值設為I。
10.一種通訊模式的識別方法,其特征在于,包括: 步驟Pl:設備上電,進行初始化,打開中斷; 當檢測到中斷信號時,進行中斷處理,所述中斷處理包括: 步驟Al:判斷是否為USB中斷,是則執(zhí)行步驟A2,否則退出中斷; 步驟A2:關閉USB中斷; 步驟A3:判斷是否已設置通訊模式,是則執(zhí)行步驟A5,否則執(zhí)行步驟A4 ; 步驟A4:將通訊模式設置為USB接口通訊,執(zhí)行步驟A5 ; 步驟A5:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷; 步驟P2:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則執(zhí)行步驟P3 ; 步驟P3:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P4,否則返回步驟P2 ; 步驟P4:將接收到的數(shù)據(jù)存儲到第一緩存區(qū)中,判斷存儲在所述第一緩存區(qū)中的第一字節(jié)數(shù)據(jù)是否為第一預設值,是則執(zhí)行步驟P6,否則執(zhí)行步驟P5 ;步驟P5:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則返回步驟P4 ;步驟P6:當通過串口接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到所述第一緩存區(qū)中,對所述第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟P7,否則返回步驟P3 ; 步驟P7:設置串口通訊波特率,設置通訊模式為第一串口通訊; 步驟P8:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟P10,否則執(zhí)行步驟P9 ; 步驟P9:設置通訊模式為第二串口通訊,執(zhí)行步驟P12 ; 步驟PlO:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P11,否則等待接收數(shù)據(jù),返回步驟PlO ; 步驟Pll:當接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到所述第一緩存區(qū)中,對所述第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟P12,否則返回步驟PlO ;步驟P12:根據(jù)串口協(xié)議對所述第一緩存區(qū)中的數(shù)據(jù)進行處理; 步驟P13:等待主機下發(fā)指令,當接收到指令時根據(jù)設備支持的USB接口通訊協(xié)議進行相應操作,操作完成后返回步驟P13。
11.如權(quán)利要求10所述的方法,其特征在于,所述初始化包括:將通訊標識的值設為0 所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標識的值是否為1,是則為USB接口通訊,否則不為USB接口通訊; 所述設置通訊模式為第一串口通訊,具體為:將所述通訊標識的值設為4 ; 所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標識的值是否為4,是則為第一串口通訊,否則不為第一串口通訊; 所述設置通訊模式為第二串口通訊,具體為:將所述通訊標識的值設為2。
12.如權(quán)利要求10所述的方法,其特征在于,所述步驟P12具體包括: 步驟P12-1:從第一緩存區(qū)中提取前七個字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預設字符串,是則執(zhí)行步驟P12-2,否則給主機返回錯誤信息,返回步驟P9 ; 步驟P12-2:檢測第四字節(jié)上低四位的數(shù)據(jù),若為第一設定值則執(zhí)行步驟P12-3,若為第二設定值則執(zhí)行步驟P12-4,若為第三設定值則執(zhí)行步驟P12-5,若為其他則給主機返回錯誤信息,返回步驟P9; 步驟P12-3:給主機返回包含所述串口通訊波特率的握手信息,返回步驟P9 ; 步驟P12-4:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟P9 ; 步驟P12-5:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長度,計算該APDU數(shù)據(jù)的長度,判斷計算得到的APDU數(shù)據(jù)的長度與提取的數(shù)據(jù)長度是否相同,是則給主機返回接收數(shù)據(jù)正確響應,執(zhí)行步驟P12-6,否則給主機返回接收數(shù)據(jù)錯誤信息,返回步驟P9 ; 步驟P12-6:根據(jù)串口協(xié)議對APDU數(shù)據(jù)進行處理并將處理結(jié)果存儲到所述第二緩存區(qū)中,返回步驟P9。
13.如權(quán)利要求10所述的方法,其特征在于,還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議; 所述步驟A5中給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識的值發(fā)送給主機。
14.如權(quán)利要求13所述的方法,其特征在于,所述IO通訊標識的值為第一預設值,所述步驟P13包括: 步驟P13-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟P13-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟P13-13,如為第二預設字符則執(zhí)行步驟P13-14 ;如為其他則執(zhí)行步驟P13-15 ; 步驟P13-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟P13-11 ; 步驟P13-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟P13-11 ; 步驟P13-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟P13-11。
15.如權(quán)利要求13所述的方法,其特征在于,所述IO通訊標識的值為第二預設值,所述步驟P13包括: 步驟P13-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-23,如為接收狀態(tài)則執(zhí)行步驟P13-22 ; 步驟P13-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為其他則返回步驟P13-21 ; 步驟P13-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為第二字符串則執(zhí)行步驟P13-24,如為其他則返回步驟 P13-21 ; 步驟P13-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟P13-21 ; 步驟P13-25 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟P13-26,否則執(zhí)行步驟P13-27 ; 步驟P13-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21 ; 步驟P13-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21。
16.如權(quán)利要求13所述的方法,其特征在于,所述IO通訊標識的值為第三預設值,所述步驟P13包括: 步驟P13-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析; 步驟P13-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-33,否則返回步驟P13-31 ; 步驟P13-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟P13-34,否則執(zhí)行步驟P13-35 ;步驟P13-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟P13-31 ; 步驟P13-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-36,如是接收則執(zhí)行步驟P13-37 ; 步驟P13-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟P13-31 ; 步驟P13-37:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟P13-38,否則執(zhí)行步驟P13-39 ; 步驟P13-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟P13-31 ; 步驟P13-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟P13-31。
17.如權(quán)利要求10所述的方法,其特征在于,還包括:所述設備預先定義的設備支持USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議; 所述步驟B5中的給主機返回設備支持的USB通訊USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機。
18.如權(quán)利要求17所述的方法,其特征在于,所述步驟P13包括: 步驟P13-41:檢測所述IO通訊標識的值,如為第一預設值則執(zhí)行步驟P13-42,如為第二預設值則執(zhí)行步驟P13-47,如為第三預設值則執(zhí)行步驟P13-54 ; 步驟P13-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟P13-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟P13-44,如為第二預設字符則執(zhí)行步驟P13-45 ;如為其他則執(zhí)行步驟P13-46 ; 步驟P13-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟P13-42 ; 步驟P13-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟P13-42 ; 步驟P13-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟P13-42 ; 步驟P13-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-49,如為接收狀態(tài)則執(zhí)行步驟PI3-48 ; 步驟P13-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為其他則返回步驟P13-47 ; 步驟P13-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為第二字符串則執(zhí)行步驟P13-50,如為其他則返回步驟 P13-47 ; 步驟P13-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟P13-47 ; 步驟P13-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟P13-52,否則執(zhí)行步驟P13-53 ; 步驟P13-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ; 步驟P13-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ; 步驟P13-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析; 步驟P13-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-56,否則返回步驟P13-54 ; 步驟P13-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟P13-57,否則執(zhí)行步驟P13-58 ; 步驟P13-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟P13-54 ; 步驟P13-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-59,如是接收則執(zhí)行步驟P13-60 ; 步驟P13-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟P13-54 ; 步驟P13-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令`,是則執(zhí)行步驟P13-61,否則執(zhí)行步驟P13-62 ; 步驟P13-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟P13-54 ; 步驟P13-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟P13-54。
19.一種通訊模式的識別方法,其特征在于,包括: 步驟L1:設備上電,進行初始化,打開中斷; 步驟L2:判斷是否觸發(fā)串行中斷,是則執(zhí)行步驟L3,否則進入其他中斷進行處理,退出中斷后繼續(xù)執(zhí)行步驟L3; 步驟L3:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟L4,否則執(zhí)行步驟L5 ;步驟L4:接收主機下發(fā)的指令,并根據(jù)設備支持的USB接口通訊協(xié)議對接收到的指令進行處理,處理完成后繼續(xù)等待接收主機下發(fā)的指令,返回步驟L4 ; 步驟L5:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟L6,否則執(zhí)行步驟L7 ;步驟L6:等待主機下發(fā)指令,當接收指令時根據(jù)串口協(xié)議進行相應操作,操作完成后返回步驟L6 ; 步驟L7:檢測串口信號,等待主機下發(fā)握手數(shù)據(jù)包; 步驟L8:判斷是否檢測到串口信號,是則執(zhí)行步驟L9,否則返回步驟L2 ; 步驟L9:接收主機下發(fā)的第一個字節(jié)數(shù)據(jù)并將其存儲在第一緩存區(qū)中,判斷第一字節(jié)數(shù)據(jù)是否為第一預設值,是則執(zhí)行步驟L10,否則返回步驟L2 ; 步驟LlO:當通過串口接收到主機下發(fā)的全部數(shù)據(jù)后將其存儲到第一緩存區(qū)中,對第一緩存區(qū)中的數(shù)據(jù)進行校驗并判斷校驗是否通過,是則執(zhí)行步驟L11,否則返回步驟L2;步驟Lll:設置串口通訊波特率,設置通訊模式為第一串口通訊,返回步驟L2 ;所述進入其他中斷進行處理包括: 步驟Dl:判斷是否觸發(fā)USB中斷,是則執(zhí)行步驟D2,否則退出中斷; 步驟D2:關閉USB中斷,判斷是否通過端點O接收到Set up數(shù)據(jù)包,是則執(zhí)行步驟D3,否則打開USB中斷,執(zhí)行步驟D4 ; 步驟D3:打開USB中斷,進行USB枚舉,給主機返回設備支持的USB接口通訊協(xié)議,執(zhí)行步驟D4 ; 步驟D4:設置通訊模式為USB接口通訊,退出USB中斷。
20.如權(quán)利要求19所述的方法,其特征在于,所述進行初始化包括:將通訊標識的值設為O ; 所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標識的值是否為1,是則為USB接口通訊,否則不為USB接口通訊; 所述設置通訊模式為第一串口通訊,具體為:將所述通訊標識的值設為4 ; 所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標識的值是否為4,是則為第一串口通訊,否則不為第一串口通訊。
21.如權(quán)利要求19所述的方法,其特征在于,所述步驟L6具體包括: 步驟L6-1:接收串口數(shù)據(jù)并將其存儲到第一緩存區(qū)中; 步驟L6-2:從所述第一緩存區(qū)的串口數(shù)據(jù)中提取前七個字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預設字符串,是則執(zhí)行步驟L6-3,否則清除通訊模式,給主機返回錯誤信息,返回步驟L2; 步驟L6-3:檢測第四字節(jié)上低四位的數(shù)據(jù),如為第一設定值則執(zhí)行步驟L6-4,如為第二設定值則執(zhí)行步驟L6-5,如為第三設定值則執(zhí)行步驟L6-6 ; 步驟L6-4:給主機返回包含串口通訊波特率的握手信息,返回步驟L2 ; 步驟L6-5:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟L2 ;步驟L6-6:從所述第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長度,計算該APDU數(shù)據(jù)的長度;步驟L6-7:判斷計算得到的APDU數(shù)據(jù)的長度與提取的數(shù)據(jù)長度是否相同,是則給主機返回接收數(shù)據(jù)正確響應,執(zhí)行步驟L6-8,否則給主機返回接收數(shù)據(jù)錯誤信息,返回步驟L2 ;步驟L6-8:根據(jù)串口協(xié)議對APDU數(shù)據(jù)進行處理并將處理結(jié)果存儲到所述第二緩存區(qū)中,返回步驟L2。
22.如權(quán)利要求19所述的方法,其特征在于,還包括:所述設備預先定義設備支持支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議,所述步驟D3中的給主機返回設備支持的USB接口通訊協(xié)議,包括:所述設備將IO通訊標識的值發(fā)送給主機。
23.如權(quán)利要求22所述的方法,其特征在于,所述IO通訊標識的值為第一預設值,所述步驟L4包括: 步驟L4-11:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟L4-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟L4-13,如為第二預設字符則執(zhí)行步驟L4-14 ;如為其他則執(zhí)行步驟L4-15 ; 步驟L4-13:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟L4-11 ;步驟L4-14:將解析結(jié)果中的ALDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟L4-11 ; 步驟L4-15:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟L4-11。
24.如權(quán)利要求22所述的方法,其特征在于,所述IO通訊標識的值為第二預設值,所述步驟L4包括: 步驟L4-21:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-23,如為接收狀態(tài)則執(zhí)行步驟L4-22 ;步驟L4-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為其他則返回步驟L4-21 ; 步驟L4-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為第二字符串則執(zhí)行步驟L4-24,如為其他則返回步驟L4-21 ; 步驟L4-24:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟L4-21 ; 步驟L4-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟L4-26,否則執(zhí)行步驟L4-27 ; 步驟L4-26:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到所述第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21 ; 步驟L4-27:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21。
25.如權(quán)利要求22所述的方法,其特征在于,所述IO通訊標識的值為第三預設值,所述步驟L4包括: 步驟L4-31:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析; 步驟L4-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-33,否則返回步驟L4-31 ; 步驟L4-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟L4-34,否則執(zhí)行步驟L4-35 ; 步驟L4-34:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟L4-31 ; 步驟L4-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-36,如是接收則執(zhí)行步驟L4-37 ; 步驟L4-36:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟L4-31 ; 步驟L4-37:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟L4-38,否則執(zhí)行步驟L4-39 ; 步驟L4-38:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟L4-31 ; 步驟L4-39:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟L4-31。
26.如權(quán)利要求19所述的方法,其特征在于,還包括:所述設備預先定義設備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議; 所述步驟B5中的給主機返回設備支持的USB通訊USB接口通訊協(xié)議,包括:所述設備將IO通訊標識發(fā)送給主機。
27.如權(quán)利要求26所述的方法,其特征在于,所述步驟L4包括: 步驟L4-41:檢測所述IO通訊標識的值,如為第一預設值則執(zhí)行步驟L4-42,如為第二預設值則執(zhí)行步驟L4-47,如為第三預設值則執(zhí)行步驟L4-54 ; 步驟L4-42:等待主機下發(fā)指令,當通過USB接口接收到指令時將其存儲到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟L4-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預設字符則執(zhí)行步驟L4-44,如為第二預設字符則執(zhí)行步驟L4-45 ;如為其他則執(zhí)行步驟L4-46 ; 步驟L4-44:對解析結(jié)果進行相應操作,并將操作結(jié)果存儲到第二緩存區(qū),將操作結(jié)果返回給主機,返回步驟L4-42 ; 步驟L4-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進行處理,接收到處理結(jié)果時將其存儲到第二緩存區(qū),將處理結(jié)果返回給主機,返回步驟L4-42 ; 步驟L4-46:組織消息錯誤響應并將其存儲到第二緩存區(qū),將所述消息錯誤響應返回給主機,返回步驟L4-42 ; 步驟L4-47:等待主機下發(fā)指令,當通過USB接口接收到八個字節(jié)大小的Set up數(shù)據(jù)包時,判斷狀態(tài)機的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-49,如為接收狀態(tài)則執(zhí)行步驟L4-48 ;步驟L4-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為其他則返回步驟L4-47 ; 步驟L4-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測解析結(jié)果的前兩個字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為第二字符串則執(zhí)行步驟L4-50,如為其他則返回步驟L4-47 ; 步驟L4-50:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,將所述狀態(tài)機的狀態(tài)設為接收狀態(tài),返回步驟L4-47 ; 步驟L4-51:將Set up數(shù)據(jù)包的解析結(jié)果存儲到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復位指令,是則執(zhí)行步驟L4-52,否則執(zhí)行步驟L4-53 ; 步驟L4-52:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將所述狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ; 步驟L4-53:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,將狀態(tài)機的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ; 步驟L4-54:等待主機下發(fā)指令,當通過USB接口接收到指令時根據(jù)SCSI協(xié)議對該指令進行解析; 步驟L4-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-56,否則返回步驟L4-54 ; 步驟L4-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標準SCSI指令,是則執(zhí)行步驟L4-57,否則執(zhí)行步驟L4-58 ;步驟L4-57:根據(jù)標準SCSI指令進行相應操作,并將操作結(jié)果返回給主機,返回步驟L4-54 ; 步驟L4-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-59,如是接收則執(zhí)行步驟L4-60 ; 步驟L4-59:將第二緩存區(qū)中的響應數(shù)據(jù)返回給主機,返回步驟L4-54 ; 步驟L4-60:將所述解析結(jié)果存儲到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復位指令,是則執(zhí)行步驟L4-61,否則執(zhí)行步驟L4-62 ; 步驟L4-61:設置包含復位參數(shù)的響應數(shù)據(jù),并將其存儲到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設置為發(fā)送,返回步驟L4-54; 步驟L4-62:將解析結(jié)果發(fā)送給命令層進行處理,接收處理結(jié)果并將其存儲到第二緩存區(qū)中,返回步驟L4-54。`
【文檔編號】G06F13/42GK103631747SQ201310585970
【公開日】2014年3月12日 申請日期:2013年11月20日 優(yōu)先權(quán)日:2013年11月20日
【發(fā)明者】陸舟, 于華章 申請人:飛天誠信科技股份有限公司