欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種通訊模式的識(shí)別方法

文檔序號(hào):6519858閱讀:585來源:國(guó)知局
一種通訊模式的識(shí)別方法
【專利摘要】本發(fā)明公開一種通訊模式的識(shí)別方法,設(shè)備在時(shí)鐘中斷處理中將超時(shí)標(biāo)識(shí)置位;當(dāng)設(shè)備檢測(cè)到其他中斷信號(hào)時(shí),給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,并設(shè)置通訊模式;識(shí)別過程包括:檢測(cè)通訊模式的類型,如為USB接口通訊,則關(guān)閉定時(shí)器,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,如未設(shè)置通訊模式則當(dāng)超時(shí)標(biāo)識(shí)置位時(shí),設(shè)置通訊模式為串口通訊,關(guān)閉所述定時(shí)器,將超時(shí)標(biāo)識(shí)復(fù)位,執(zhí)行步驟S6,如為串口通訊,則關(guān)閉所述定時(shí)器,執(zhí)行步驟S6;步驟S6:當(dāng)接收到指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作。本發(fā)明的識(shí)別方法適應(yīng)于同時(shí)具有串口和USB接口的設(shè)備中,使設(shè)備具有較好的兼容性。
【專利說明】一種通訊模式的識(shí)別方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通訊領(lǐng)域,尤其涉及一種通訊模式的識(shí)別方法。
【背景技術(shù)】
[0002]隨著USB接口的廣泛使用,各個(gè)廠商生產(chǎn)了品種繁多的USB設(shè)備,使USB接口成為現(xiàn)在電子產(chǎn)品的必備接口之一。由于USB接口的物理機(jī)械特性設(shè)計(jì)很成功,所以許多廠商將其鏈路層用于非USB協(xié)議的通訊傳輸,也就是用USB接口傳輸非USB協(xié)議的數(shù)據(jù)流。由于串口通訊設(shè)計(jì)簡(jiǎn)單,使用方便,將USB鏈路層用于傳輸串口數(shù)據(jù)的產(chǎn)品也層出不窮。但是,如何使一個(gè)設(shè)備既能利用USB接口通訊又能利用串口通訊,如何知道當(dāng)前的通訊模式是USB模式還是串口模式呢?是現(xiàn)有技術(shù)亟待解決的問題。

【發(fā)明內(nèi)容】

[0003]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種通訊模式的識(shí)別方法。
[0004]本發(fā)明提供的技術(shù)方案如下:
[0005]一種通訊模式的識(shí)別方法,包括:
[0006]步驟S1:設(shè)備上電,進(jìn)行初始化,打開中斷和定時(shí)器,所述定時(shí)器開始計(jì)時(shí);
[0007]當(dāng)所述定時(shí)器計(jì)時(shí)到達(dá)預(yù)設(shè)值時(shí),進(jìn)入時(shí)鐘中斷處理,時(shí)鐘中斷處理包括:關(guān)閉所述定時(shí)器,將超時(shí)標(biāo)識(shí)置位,打開所述定時(shí)器,退出時(shí)鐘中斷;
[0008]當(dāng)檢測(cè)到其他中斷信號(hào)時(shí),執(zhí)行步驟B1-步驟B8 ;
[0009]步驟B1:判斷中斷類型,如為USB中斷則執(zhí)行步驟B2,如為串口中斷則執(zhí)行步驟B6 ;
[0010]步驟B2:關(guān)閉USB中斷;
[0011]步驟B3:判斷是否已設(shè)置通訊模式,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ;
[0012]步驟B4:設(shè)置通訊模式為USB接口通訊,執(zhí)行步驟B5 ;
[0013]步驟B5:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷;
[0014]步驟B6:關(guān)閉串口中斷;
[0015]步驟B7:判斷是否已設(shè)置通訊模式,是則打開串口中斷,退出串口中斷,否則執(zhí)行步驟B8 ;
[0016]步驟B8:根據(jù)接收到的第一個(gè)數(shù)據(jù)包設(shè)置通訊模式為串口通訊,打開串口中斷,退出串口中斷;
[0017]步驟S2:檢測(cè)通訊模式的類型,如為USB接口通訊,則關(guān)閉所述定時(shí)器,執(zhí)行步驟S3,如為串口通訊,則關(guān)閉所述定時(shí)器,執(zhí)行步驟S6,如未設(shè)置通訊模式則執(zhí)行步驟S4 ;
[0018]步驟S3:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟S3 ;
[0019]步驟S4:判斷所示超時(shí)標(biāo)識(shí)是否置位,是則執(zhí)行步驟S5,否則返回步驟S2 ;[0020]步驟S5:設(shè)置通訊模式為串口通訊,關(guān)閉所述定時(shí)器,將超時(shí)標(biāo)識(shí)復(fù)位,執(zhí)行步驟S6 ;
[0021]步驟S6:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟S6。
[0022]進(jìn)一步地,上述方法還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議;
[0023]所述步驟B5中的給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī)。
[0024]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,所述步驟S3包括:
[0025]步驟S3-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0026]步驟S3-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟S3-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟S3-14 ;如為其他則執(zhí)行步驟S3-15 ;
[0027]步驟S3-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟S3-11 ;
[0028]步驟S3-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟S3-11 ;
[0029]步驟S3-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟S3-11。
[0030]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,所述步驟S3包括:
[0031]步驟S3-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-23,如為接收狀態(tài)則執(zhí)行步驟S3-22 ;
[0032]步驟S3-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為其他則返回步驟S3-21 ;
[0033]步驟S3-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為第二字符串則執(zhí)行步驟S3-24,如為其他則返回步驟S3-21 ;
[0034]步驟S3-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟S3-21 ;
[0035]步驟S3-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟S3-26,否則執(zhí)行步驟S3-27 ;
[0036]步驟S3-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21 ;
[0037]步驟S3-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21。
[0038]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,所述步驟S3包括:
[0039]步驟S3-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;[0040]步驟S3-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-33,否則返回步驟S3-31 ;
[0041]步驟S3-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟S3-34,否則執(zhí)行步驟S3-35 ;
[0042]步驟S3-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 S3-31 ;
[0043]步驟S3-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-36,如是接收則執(zhí)行步驟 S3-37 ;
[0044]步驟S3-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟S3-31 ;
[0045]步驟S3-37:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟S3-38,否則執(zhí)行步驟S3-39 ;
[0046]步驟S3-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟S3-31 ;
[0047]步驟S3-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟S3-31。
[0048]進(jìn)一步地,上述方法還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;
[0049]所述步驟B5中的給主機(jī)返回設(shè)備支持的USB通訊USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī)。
[0050]進(jìn)一步地,所述步驟S3包括:
[0051]步驟S3-41:檢測(cè)所述IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟S3-42,如為第二預(yù)設(shè)值則執(zhí)行步驟S3-47,如為第三預(yù)設(shè)值則執(zhí)行步驟S3-54 ;
[0052]步驟S3-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0053]步驟S3-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟S3-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟S3-45 ;如為其他則執(zhí)行步驟S3-46 ;
[0054]步驟S3-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟S3-42 ;
[0055]步驟S3-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟S3-42 ;
[0056]步驟S3-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟S3-42 ;
[0057]步驟S3-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-49,如為接收狀態(tài)則執(zhí)行步驟S3-48 ;
[0058]步驟S3-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為其他則返回步驟S3-47 ;
[0059]步驟S3-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為第二字符串則執(zhí)行步驟S3-50,如為其他則返回步驟S3-47 ;
[0060]步驟S3-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟S3-47 ;
[0061]步驟S3-51:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟S3-52,否則執(zhí)行步驟S3-53 ;
[0062]步驟S3-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ;
[0063]步驟S3-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ;
[0064]步驟S3-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0065]步驟S3-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-56,否則返回步驟S3-54 ;
[0066]步驟S3-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟S3-57,否則執(zhí)行步驟S3-58 ;
[0067]步驟S3-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 S3-54 ;
[0068]步驟S3-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-59,如是接收則執(zhí)行步驟 S3-60 ;
[0069]步驟S3-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟S3-54 ;
[0070]步驟S3-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟S3-61,否則執(zhí)行步驟S3-62 ;
[0071]步驟S3-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟S3-54 ;
[0072]步驟S3-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟S3-54。
[0073]進(jìn)一步地,所述步驟S6包括:
[0074]步驟S6-1:當(dāng)通過串口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)串口協(xié)議對(duì)所述第一緩存區(qū)中的指令進(jìn)行解析并判斷解析結(jié)果中第一字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟S6-2,否則返回步驟S6-1 ;
[0075]步驟S6-2:判斷所述解析結(jié)果中第三字節(jié)上的數(shù)據(jù)是否為第二預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟S6-3,否則執(zhí)行步驟S6-4 ;
[0076]步驟S6-3:對(duì)所述解析結(jié)果進(jìn)行處理并將處理結(jié)果返回給主機(jī),返回步驟S6-1 ;
[0077]步驟S6-4:檢測(cè)所述解析結(jié)果中第四字節(jié)上的數(shù)據(jù),如為第三預(yù)設(shè)數(shù)據(jù)則執(zhí)行步驟S6-5,如為第四預(yù)設(shè)數(shù)據(jù)則執(zhí)行步驟S6-6,如為其他則返回步驟S6-1 ;
[0078]步驟S6-5:輸出電量不足信息,進(jìn)入死機(jī)狀態(tài),結(jié)束;
[0079]步驟S6-6:設(shè)置響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟S6-1 ;所述響應(yīng)數(shù)據(jù)包括設(shè)備與主機(jī)的通訊波特率和傳輸數(shù)據(jù)的長(zhǎng)度。
[0080]進(jìn)一步地,所述初始化包括:將通訊標(biāo)識(shí)的值設(shè)為O ;[0081]所述檢測(cè)通訊模式的類型,具體為:檢查所述通訊標(biāo)識(shí)的值,若所述通訊標(biāo)識(shí)的值為I則當(dāng)前通訊模式為USB接口通訊,若所述通訊標(biāo)識(shí)的值為2則當(dāng)前通訊模式為串口通訊,若所述通訊標(biāo)識(shí)的值為O則未設(shè)置通訊模式;
[0082]所述設(shè)置通訊模式為串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為2 ;
[0083]所述設(shè)置通訊模式為USB接口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為I。
[0084]一種通訊模式的識(shí)別方法,包括:
[0085]步驟Pl:設(shè)備上電,進(jìn)行初始化,打開中斷;
[0086]當(dāng)檢測(cè)到中斷信號(hào)時(shí),進(jìn)行中斷處理,所述中斷處理包括:
[0087]步驟Al:判斷是否為USB中斷,是則執(zhí)行步驟A2,否則退出中斷;
[0088]步驟A2:關(guān)閉USB中斷;
[0089]步驟A3:判斷是否已設(shè)置通訊模式,是則執(zhí)行步驟A5,否則執(zhí)行步驟A4 ;
[0090]步驟A4:將通訊模式設(shè)置為USB接口通訊,執(zhí)行步驟A5 ;
[0091]步驟A5:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷;
[0092]步驟P2:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則執(zhí)行步驟P3 ;
[0093]步驟P3:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P4,否則返回步驟P2 ;
[0094]步驟P4:將接收到的數(shù)據(jù)存儲(chǔ)到第一緩存區(qū)中,判斷存儲(chǔ)在所述第一緩存區(qū)中的第一字節(jié)數(shù)據(jù)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟P6,否則執(zhí)行步驟P5 ;
[0095]步驟P5:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則返回步驟P4;
[0096]步驟P6:當(dāng)通過串口接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到所述第一緩存區(qū)中,對(duì)所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟P7,否則返回步驟P3 ;
[0097]步驟P7:設(shè)置串口通訊波特率,設(shè)置通訊模式為第一串口通訊;
[0098]步驟P8:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟P10,否則執(zhí)行步驟P9 ;
[0099]步驟P9:設(shè)置通訊模式為第二串口通訊,執(zhí)行步驟P12 ;
[0100]步驟P10:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P11,否則等待接收數(shù)據(jù),返回步驟PlO ;
[0101]步驟Pll:當(dāng)接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到所述第一緩存區(qū)中,對(duì)所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟P12,否則返回步驟PlO ;
[0102]步驟P12:根據(jù)串口協(xié)議對(duì)所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行處理;
[0103]步驟P13:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟P13。
[0104]進(jìn)一步地,所述初始化包括:將通訊標(biāo)識(shí)的值設(shè)為O ;
[0105]所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為1,是則為USB接口通訊,否則不為USB接口通訊;[0106]所述設(shè)置通訊模式為第一串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為4 ;
[0107]所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為4,是則為第一串口通訊,否則不為第一串口通訊;
[0108]所述設(shè)置通訊模式為第二串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為2。
[0109]進(jìn)一步地,所述步驟P12具體包括:
[0110]步驟P12-1:從第一緩存區(qū)中提取前七個(gè)字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)字符串,是則執(zhí)行步驟P12-2,否則給主機(jī)返回錯(cuò)誤信息,返回步驟P9 ;
[0111]步驟P12-2:檢測(cè)第四字節(jié)上低四位的數(shù)據(jù),若為第一設(shè)定值則執(zhí)行步驟P12-3,若為第二設(shè)定值則執(zhí)行步驟P12-4,若為第三設(shè)定值則執(zhí)行步驟P12-5,若為其他則給主機(jī)返回錯(cuò)誤信息,返回步驟P9;
[0112]步驟P12-3:給主機(jī)返回包含所述串口通訊波特率的握手信息,返回步驟P9 ;
[0113]步驟P12-4:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟P9 ;
[0114]步驟P12-5:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,計(jì)算該APDU數(shù)據(jù)的長(zhǎng)度,判斷計(jì)算得到的APDU數(shù)據(jù)的長(zhǎng)度與提取的數(shù)據(jù)長(zhǎng)度是否相同,是則給主機(jī)返回接收數(shù)據(jù)正確響應(yīng),執(zhí)行步驟P12-6,否則給主機(jī)返回接收數(shù)據(jù)錯(cuò)誤信息,返回步驟P9 ;
[0115]步驟P12-6:根據(jù)串口協(xié)議對(duì)APDU數(shù)據(jù)進(jìn)行處理并將處理結(jié)果存儲(chǔ)到所述第二緩存區(qū)中,返回步驟P9。
[0116]進(jìn)一步地,上述方法還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議;
[0117]所述步驟A5中給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī)。
[0118]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,所述步驟P13包括:
[0119]步驟P13-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0120]步驟P13-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟P13-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟P13-14 ;如為其他則執(zhí)行步驟P13-15 ;
[0121]步驟P13-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟P13-11 ;
[0122]步驟P13-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟P13-11 ;
[0123]步驟P13-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟P13-11。
[0124]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,所述步驟P13包括:
[0125]步驟P13-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-23,如為接收狀態(tài)則執(zhí)行步驟P13-22 ;
[0126]步驟P13-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為其他則返回步驟P13-21 ;[0127]步驟P13-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為第二字符串則執(zhí)行步驟P13-24,如為其他則返回步驟P13-21 ;
[0128]步驟P13-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟P13-21 ;
[0129]步驟P13-25 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟P13-26,否則執(zhí)行步驟P13-27 ;
[0130]步驟P13-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21 ;
[0131]步驟P13-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21。[0132]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,所述步驟P13包括:
[0133]步驟P13-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0134]步驟P13-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-33,否則返回步驟P13-31 ;
[0135]步驟P13-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟P13-34,否則執(zhí)行步驟P13-35 ;
[0136]步驟P13-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 P13-31 ;
[0137]步驟P13-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-36,如是接收則執(zhí)行步驟 P13-37 ;
[0138]步驟P13-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟P13-31 ;
[0139]步驟P13-37:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟P13-38,否則執(zhí)行步驟P13-39 ;
[0140]步驟P13-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟P13-31 ;
[0141]步驟P13-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟P13-31。
[0142]進(jìn)一步地,上述方法還包括:所述設(shè)備預(yù)先定義的設(shè)備支持USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;
[0143]所述步驟B5中的給主機(jī)返回設(shè)備支持的USB通訊USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī)。
[0144]進(jìn)一步地,所述步驟P13包括:
[0145]步驟P13-41:檢測(cè)所述IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟P13-42,如為第二預(yù)設(shè)值則執(zhí)行步驟P13-47,如為第三預(yù)設(shè)值則執(zhí)行步驟P13-54 ;
[0146]步驟P13-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0147]步驟P13-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟P13-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟P13-45 ;如為其他則執(zhí)行步驟P13-46 ;
[0148]步驟P13-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟P13-42 ;
[0149]步驟P13-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟P13-42 ;
[0150]步驟P13-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟P13-42 ;
[0151]步驟P13-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-49,如為接收狀態(tài)則執(zhí)行步驟PI3-48 ;
[0152]步驟P13-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為其他則返回步驟P13-47 ;
[0153]步驟P13-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為第二字符串則執(zhí)行步驟P13-50,如為其他則返回步驟P13-47 ;
[0154]步驟P13-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟P13-47 ;
[0155]步驟P13-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟P13-52,否則執(zhí)行步驟P13-53 ;
`[0156]步驟P13-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ;
[0157]步驟P13-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ;
[0158]步驟P13-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0159]步驟P13-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-56,否則返回步驟P13-54 ;
[0160]步驟P13-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟P13-57,否則執(zhí)行步驟P13-58 ;
[0161]步驟P13-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 P13-54 ;
[0162]步驟P13-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-59,如是接收則執(zhí)行步驟 P13-60 ;
[0163]步驟P13-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟P13-54 ;
[0164]步驟P13-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟P13-61,否則執(zhí)行步驟P13-62 ;
[0165]步驟P13-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟P13-54 ;
[0166]步驟P13-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟P13-54。
[0167]一種通訊模式的識(shí)別方法,包括:
[0168]步驟L1:設(shè)備上電,進(jìn)行初始化,打開中斷;
[0169]步驟L2:判斷是否觸發(fā)串行中斷,是則執(zhí)行步驟L3,否則進(jìn)入其他中斷進(jìn)行處理,退出中斷后繼續(xù)執(zhí)行步驟L3;
[0170]步驟L3:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟L4,否則執(zhí)行步驟L5 ;
[0171]步驟L4:接收主機(jī)下發(fā)的指令,并根據(jù)設(shè)備支持的USB接口通訊協(xié)議對(duì)接收到的指令進(jìn)行處理,處理完成后繼續(xù)等待接收主機(jī)下發(fā)的指令,返回步驟L4 ;
[0172]步驟L5:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟L6,否則執(zhí)行步驟L7 ;
[0173]步驟L6:等待主機(jī)下發(fā)指令,當(dāng)接收指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟L6 ;
[0174]步驟L7:檢測(cè)串口信號(hào),等待主機(jī)下發(fā)握手?jǐn)?shù)據(jù)包;
[0175]步驟L8:判斷是否檢測(cè)到串口信號(hào),是則執(zhí)行步驟L9,否則返回步驟L2 ;
[0176]步驟L9:接收主機(jī)下發(fā)的第一個(gè)字節(jié)數(shù)據(jù)并將其存儲(chǔ)在第一緩存區(qū)中,判斷第一字節(jié)數(shù)據(jù)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟L10,否則返回步驟L2 ;
[0177]步驟LlO:當(dāng)通過串口接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到第一緩存區(qū)中,對(duì)第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟L11,否則返回步驟L2 ;
[0178]步驟Lll:設(shè)置串口通訊波特率,設(shè)置通訊模式為第一串口通訊,返回步驟L2 ;
[0179]所述進(jìn)入其他中斷進(jìn)行處理包括:
[0180]步驟Dl:判斷是否觸發(fā)USB中斷,是則執(zhí)行步驟D2,否則退出中斷;
[0181]步驟D2:關(guān)閉USB中斷,判斷是否通過端點(diǎn)O接收到Set up數(shù)據(jù)包,是則執(zhí)行步驟D3,否則打開USB中斷,執(zhí)行步驟D4 ;
[0182]步驟D3:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,執(zhí)行步驟D4 ;
[0183]步驟D4:設(shè)置通訊模式為USB接口通訊,退出USB中斷。
[0184]進(jìn)一步地,所述進(jìn)行初始化包括:將通訊標(biāo)識(shí)的值設(shè)為O ;
[0185]所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為1,是則為USB接口通訊,否則不為USB接口通訊;
[0186]所述設(shè)置通訊模式為第一串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為4 ;
[0187]所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為4,是則為第一串口通訊,否則不為第一串口通訊。
[0188]進(jìn)一步地,所述步驟L6具體包括:
[0189]步驟L6-1:接收串口數(shù)據(jù)并將其存儲(chǔ)到第一緩存區(qū)中;
[0190]步驟L6-2:從所述第一緩存區(qū)的串口數(shù)據(jù)中提取前七個(gè)字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)字符串,是則執(zhí)行步驟L6-3,否則清除通訊模式,給主機(jī)返回錯(cuò)誤信息,返回步驟L2 ;
[0191]步驟L6-3:檢測(cè)第四字節(jié)上低四位的數(shù)據(jù),如為第一設(shè)定值則執(zhí)行步驟L6-4,如為第二設(shè)定值則執(zhí)行步驟L6-5,如為第三設(shè)定值則執(zhí)行步驟L6-6 ;
[0192]步驟L6-4:給主機(jī)返回包含串口通訊波特率的握手信息,返回步驟L2 ;
[0193]步驟L6-5:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟L2 ;
[0194]步驟L6-6:從所述第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,計(jì)算該APDU數(shù)據(jù)的長(zhǎng)度;
[0195]步驟L6-7:判斷計(jì)算得到的APDU數(shù)據(jù)的長(zhǎng)度與提取的數(shù)據(jù)長(zhǎng)度是否相同,是則給主機(jī)返回接收數(shù)據(jù)正確響應(yīng),執(zhí)行步驟L6-8,否則給主機(jī)返回接收數(shù)據(jù)錯(cuò)誤信息,返回步驟L2 ;
[0196]步驟L6-8:根據(jù)串口協(xié)議對(duì)APDU數(shù)據(jù)進(jìn)行處理并將處理結(jié)果存儲(chǔ)到所述第二緩存區(qū)中,返回步驟L2。
[0197]進(jìn)一步地,上述方法還包括:所述設(shè)備預(yù)先定義設(shè)備支持支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議,所述步驟D3中的給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī)。
[0198]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,所述步驟L4包括:
[0199]步驟L4-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0200]步驟L4-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟L4-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟L4-14 ;如為其他則執(zhí)行步驟L4-15 ;
[0201]步驟L4-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟L4-11 ;
[0202]步驟L4-14:將解析結(jié)果中的ALDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟L4-11 ;
[0203]步驟L4-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟L4-11。
[0204]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,所述步驟L4包括:
[0205]步驟L4-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-23,如為接收狀態(tài)則執(zhí)行步驟L4-22 ;
[0206]步驟L4-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為其他則返回步驟L4-21 ;
[0207]步驟L4-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為第二字符串則執(zhí)行步驟L4-24,如為其他則返回步驟L4-21 ;
[0208]步驟L4-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟L4-21 ;
[0209]步驟L4-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟L4-26,否則執(zhí)行步驟L4-27 ;
[0210]步驟L4-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到所述第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21 ;[0211 ] 步驟L4-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21。
[0212]進(jìn)一步地,所述IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,所述步驟L4包括:
[0213]步驟L4-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0214]步驟L4-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-33,否則返回步驟L4-31 ;
[0215]步驟L4-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟L4-34,否則執(zhí)行步驟L4-35 ;
[0216]步驟L4-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 L4-31 ;
[0217]步驟L4-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-36,如是接收則執(zhí)行步驟 L4-37 ;
[0218]步驟L4-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟L4-31 ;
[0219]步驟L4-37:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟L4-38,否則執(zhí)行步驟L4-39 ;
[0220]步驟L4-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟L4-31 ;
[0221]步驟L4-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟L4-31。
[0222]進(jìn)一步地,上述方法還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;
[0223]所述步驟B5中的給主機(jī)返回設(shè)備支持的USB通訊USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī)。
[0224]進(jìn)一步地,所述步驟L4包括:
[0225]步驟L4-41:檢測(cè)所述IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟L4-42,如為第二預(yù)設(shè)值則執(zhí)行步驟L4-47,如為第三預(yù)設(shè)值則執(zhí)行步驟L4-54 ;
[0226]步驟L4-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0227]步驟L4-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟L4-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟L4-45 ;如為其他則執(zhí)行步驟L4-46 ;
[0228]步驟L4-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟L4-42 ;
[0229]步驟L4-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟L4-42 ;
[0230]步驟L4-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟L4-42 ;
[0231]步驟L4-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-49,如為接收狀態(tài)則執(zhí)行步驟L4-48 ;
[0232]步驟L4-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為其他則返回步驟L4-47;
[0233]步驟L4-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為第二字符串則執(zhí)行步驟L4-50,如為其他則返回步驟L4-47 ;
[0234]步驟L4-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟L4-47 ;
[0235]步驟L4-51:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟L4-52,否則執(zhí)行步驟L4-53 ;
[0236]步驟L4-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ;
[0237]步驟L4-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ;
[0238]步驟L4-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0239]步驟L4-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-56,否則返回步驟L4-54 ;
[0240]步驟L4-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟L4-57,否則執(zhí)行步驟L4-58 ;
[0241]步驟L4-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 L4-54 ;
[0242]步驟L4-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-59,如是接收則執(zhí)行步驟 L4-60 ;
[0243]步驟L4-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟L4-54 ;
[0244]步驟L4-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟L4-61,否則執(zhí)行步驟L4-62 ;
[0245]步驟L4-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟L4-54 ;
[0246]步驟L4-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟L4-54。
[0247]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
[0248]本發(fā)明的方法即可在現(xiàn)有產(chǎn)品上通用,也適用于老版本的串口產(chǎn)品,可提高產(chǎn)品的整體兼容性、繼承性,也避免了更新淘汰市場(chǎng)上大量老產(chǎn)品而產(chǎn)生的巨額開銷,節(jié)省了大量人力、物力、財(cái)力成本。
【專利附圖】

【附圖說明】
[0249]圖1為本發(fā)明實(shí)施例一提供的一種通訊模式的識(shí)別方法流程圖;
[0250]圖2為本發(fā)明實(shí)施例一中設(shè)備支持CCID協(xié)議時(shí)步驟103的細(xì)化流程圖;[0251]圖3為本發(fā)明實(shí)施例一中設(shè)備支持HID協(xié)議時(shí)步驟103的細(xì)化流程圖;
[0252]圖4為本發(fā)明實(shí)施例一中設(shè)備支持SCSI協(xié)議時(shí)步驟103的細(xì)化流程圖;
[0253]圖5為本發(fā)明實(shí)施例一中步驟106的細(xì)化流程圖;
[0254]圖6為本發(fā)明實(shí)施例一中接收到其他中斷信號(hào)時(shí)進(jìn)行處理的流程圖;
[0255]圖7為本發(fā)明實(shí)施例二提供的一種通訊模式的識(shí)別方法流程圖;
[0256]圖8為本發(fā)明實(shí)施例二中步驟612的細(xì)化流程圖;
[0257]圖9為本發(fā)明實(shí)施例二中接收到中斷信號(hào)進(jìn)行處理的流程圖;
[0258]圖10為本發(fā)明實(shí)施例三中提供的一種通訊模式的識(shí)別方法流程圖;
[0259]圖11為本發(fā)明實(shí)施例三中根據(jù)串口通訊協(xié)議對(duì)接收到的數(shù)據(jù)進(jìn)行處理的實(shí)現(xiàn)流程圖。
【具體實(shí)施方式】
[0260]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0261]實(shí)施例一
[0262]本發(fā)明實(shí)施例一提供一種通訊模式的識(shí)別方法,如圖1所示,包括:
[0263]步驟100:設(shè)備上電,進(jìn)行初始化;
[0264]本實(shí)施例中,設(shè)備進(jìn)行初始化包括:配置設(shè)備和時(shí)鐘頻率、配置設(shè)備IO工作模塊、配置模塊時(shí)鐘使能、配置定時(shí)器工作模式、設(shè)置通訊標(biāo)識(shí)復(fù)位、USB模塊初始化、串口模塊初始化、復(fù)位超時(shí)標(biāo)識(shí)、設(shè)置狀態(tài)機(jī)為發(fā)送狀態(tài);
[0265]步驟101:打開中斷和定時(shí)器;
[0266]具體的,本實(shí)施例中的中斷包括串口中斷、USB中斷、時(shí)鐘中斷;在本實(shí)施例中,打開定時(shí)器時(shí)定時(shí)器開始計(jì)時(shí),經(jīng)預(yù)設(shè)時(shí)長(zhǎng)時(shí)觸發(fā)進(jìn)入時(shí)鐘中斷處理,優(yōu)選的,預(yù)設(shè)時(shí)長(zhǎng)為50ms ;時(shí)鐘中斷處理包括:關(guān)閉定時(shí)器,將超時(shí)標(biāo)識(shí)置位,打開定時(shí)器,退出時(shí)鐘中斷;
[0267]步驟102:檢測(cè)通訊模式的類型,如為USB接口通訊,則關(guān)閉定時(shí)器,執(zhí)行步驟103,如為串口通訊,則關(guān)閉定時(shí)器,執(zhí)行步驟106,如未設(shè)置通訊模式則執(zhí)行步驟104 ;
[0268]具體的,本實(shí)施例中,判斷通訊標(biāo)識(shí)的值,如為I則通訊模式為串口,如為2則通訊模式為USB接口,如為O則未設(shè)置通訊模式;
[0269]步驟103:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟103 ;
[0270]本實(shí)施例中的設(shè)備中預(yù)先定義該設(shè)備只支持一種通訊協(xié)議,具體通過IO通訊標(biāo)識(shí)預(yù)先進(jìn)行設(shè)置,在枚舉過程中給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,具體返回的是IO通訊標(biāo)識(shí)的值,具體的,如IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,優(yōu)選的第一預(yù)設(shè)值為1,則表示設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議,步驟103的實(shí)現(xiàn)過程如圖2所示;
[0271]步驟103-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析第一緩存區(qū)中的指令;
[0272]步驟103-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟103-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟103-14 ;如為其他則執(zhí)行步驟103-15 ;
[0273]在本實(shí)施例中,第一預(yù)設(shè)字符可以為0x61*0x62*0x63*0x6A*0x6C*0x6D ;優(yōu)選的,本實(shí)施例中的第一預(yù)設(shè)字符為0x61 ;第二預(yù)設(shè)字符具體為0x6F ;
[0274]步驟103-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟103-11 ;
[0275]步驟103-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟103-11 ;
[0276]步驟103-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟103-11。
[0277]本實(shí)施例中的設(shè)備預(yù)先定義該設(shè)備只支持一種通訊協(xié)議,具體通過IO通訊標(biāo)識(shí)預(yù)先進(jìn)行設(shè)置,在枚舉過程中給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,具體返回的IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,優(yōu)選的第二預(yù)設(shè)值為3,則表示設(shè)備支持的USB接口通訊協(xié)議為HID協(xié)議,步驟103的實(shí)現(xiàn)過如圖3所示;
[0278]步驟103-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟103-23,如為接收狀態(tài)則執(zhí)行步驟103-22 ;
[0279]具體的,在本實(shí)施例中,步驟103-21中判斷狀態(tài)機(jī)標(biāo)識(shí),如為I則表示發(fā)送狀態(tài),如為2則表示接收狀態(tài);
[0280]步驟103-22:根據(jù) HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟103-25,如為其他則返回步驟103-21 ;
[0281]具體的,在本實(shí)施例中,第一字符串為0x210x09 ;
[0282]步驟103-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟103-25,如為第二字符串則執(zhí)行步驟103-24,如為其他則返回步驟103-21 ;
[0283]具體的,在本實(shí)施例中,第一字符串為0x210x09,第二字符串為OxAIOxOI ;
[0284]步驟103-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟103-21 ;
[0285]步驟103-25 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟103-26,否則執(zhí)行步驟103-27 ;
[0286]本實(shí)施例中,判斷解析結(jié)果的前五個(gè)字節(jié)數(shù)據(jù)是否為預(yù)設(shè)數(shù)據(jù),是則為熱復(fù)位指令,否則不為熱復(fù)位指令;本實(shí)施例中的預(yù)設(shè)數(shù)據(jù)具體為0x460x540x520x530x54 ;
[0287]步驟103-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟103-21 ;
[0288]本實(shí)施例中的復(fù)位參數(shù)包括等待時(shí)間、通訊速率等;將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài)具體為:將狀態(tài)機(jī)標(biāo)識(shí)設(shè)為2 ;
[0289]步驟103-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟103-21 ;
[0290]該步驟中的將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài)具體為:將狀態(tài)機(jī)標(biāo)識(shí)設(shè)為2。
[0291]本實(shí)施例中的設(shè)備中預(yù)先定義只支持一種USB接口通訊協(xié)議,在枚舉過程中給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,具體返回的IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,優(yōu)選的第三預(yù)設(shè)值為5,則表示設(shè)備支持的USB接口通訊協(xié)議為SCSI協(xié)議,步驟103的實(shí)現(xiàn)過如圖4所示;
[0292]步驟103-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0293]步驟103-32:根據(jù)解析結(jié)果判斷接收到的該指令是否為合法SCSI指令,是則執(zhí)行步驟103-33,否則返回步驟103-31 ;
[0294]具體的,本實(shí)施例中,判斷解析結(jié)果的前四個(gè)字節(jié)數(shù)據(jù)是否為0x55534243,是則合法的,否則不合法;
[0295]步驟103-33:根據(jù)解析結(jié)果判斷該指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟103-34,否則執(zhí)行步驟103-35 ;
[0296]具體的,在本實(shí)施例中,通過判斷解析結(jié)果中的第16字節(jié)上的數(shù)據(jù)是否大于OxFC,是則該指令是標(biāo)準(zhǔn)SCSI指令,否則該指令不是標(biāo)準(zhǔn)SCSI指令;
[0297]步驟103-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 103-31 ;
[0298]步驟103-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟103_36,如是接收則執(zhí)行步驟 103-37 ;
[0299]步驟103-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟103-31 ;
[0300]步驟103-37:將解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)解析結(jié)果判斷該指令是否為熱復(fù)位指令,是則執(zhí)行步驟103-38,否則執(zhí)行步驟103-39 ;
[0301]步驟103-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟103-31 ;
[0302]步驟103-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟103-31。
[0303]步驟104:判斷超時(shí)標(biāo)識(shí)是否置位,是則執(zhí)行步驟105,否則返回步驟102 ;
[0304]具體的,在本實(shí)施例中,判斷超時(shí)標(biāo)識(shí)是否為true,是則置位,否則未置位;
[0305]步驟105:設(shè)置通訊模式為串口通訊,關(guān)閉定時(shí)器,將超時(shí)標(biāo)識(shí)復(fù)位,執(zhí)行步驟106 ;
[0306]步驟106:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟106 ;
[0307]在本實(shí)施例中,步驟106的實(shí)現(xiàn)過程如圖5所示,包括:
[0308]步驟106-0:當(dāng)通過串口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)串口協(xié)議對(duì)第一緩存區(qū)中的指令進(jìn)行解析;
[0309]步驟106-1:判斷解析結(jié)果中第一字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟106-2,否則返回步驟106-0 ;
[0310]具體的,本實(shí)施例中的第一預(yù)設(shè)數(shù)據(jù)為0xF5 ;
[0311]步驟106-2:判斷解析結(jié)果中第三字節(jié)上的數(shù)據(jù)是否為第二預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟106-3,否則執(zhí)行步驟106-4 ;
[0312]本實(shí)施例中的第二預(yù)設(shè)數(shù)據(jù)為0x03 ;[0313]步驟106-3:對(duì)解析結(jié)果進(jìn)行處理并將處理結(jié)果返回給主機(jī),返回步驟106-0 ;
[0314]步驟106-4:檢測(cè)解析結(jié)果中第四字節(jié)上的數(shù)據(jù),如為第三預(yù)設(shè)數(shù)據(jù)則執(zhí)行步驟106-5,如為第四預(yù)設(shè)數(shù)據(jù)則執(zhí)行步驟106-6,如為其他則返回步驟106-0 ;
[0315]具體的,本實(shí)施例中的第三預(yù)設(shè)數(shù)據(jù)為0x02,第四預(yù)設(shè)數(shù)據(jù)為0x01 ;
[0316]步驟106-5:輸出電量不足信息,結(jié)束;
[0317]步驟106-6:設(shè)置響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟106-0 ;
[0318]具體的,在本實(shí)施例中,該步驟中的響應(yīng)數(shù)據(jù)包括設(shè)備與主機(jī)的通訊波特率和傳輸數(shù)據(jù)的長(zhǎng)度。
[0319]在本實(shí)施例中,當(dāng)在識(shí)別通訊模式過程中檢測(cè)到其他中斷信號(hào)時(shí),則進(jìn)行其他中斷處理,其他中斷處理完成后繼續(xù)工作,其他中斷處理過程如圖6所示,包括:
[0320]步驟B1:判斷中斷類型,如為USB中斷則執(zhí)行步驟B2,如為串口中斷則執(zhí)行步驟B6 ;
[0321 ] 具體的,在本實(shí)施例中,根據(jù)中斷標(biāo)志寄存器中的標(biāo)志位判斷中斷類型,如標(biāo)志位的值為I則為USB中斷,如標(biāo)志位的值為2則為串口中斷;
[0322]步驟B2:關(guān)閉USB中斷;
[0323]具體的,步驟B2為:將中斷標(biāo)志寄存器中的標(biāo)志位的值設(shè)為O ;
[0324]步驟B3:判斷是否已設(shè)置通訊模式,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ;
[0325]具體的,本實(shí)施例中判斷通訊標(biāo)識(shí)是否為0,是則執(zhí)行步驟B4,否則執(zhí)行步驟B5 ;
[0326]步驟B4:設(shè)置通訊模式為USB接口通訊,執(zhí)行步驟B5 ;
[0327]具體的,本實(shí)施例中步驟B4為:將通訊標(biāo)識(shí)置為2 ;
[0328]步驟B5:打開USB中斷,進(jìn)行USB枚舉,枚舉完成后退出USB中斷;
[0329]在本實(shí)施例中,枚舉過程具體為:給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,優(yōu)選的,返回的是IO通訊標(biāo)識(shí)的值,如IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值則表示設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議,即設(shè)備可以解析處理CCID協(xié)議的指令;如IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值則表示設(shè)備支持的USB接口通訊協(xié)議為HID協(xié)議,即設(shè)備可解析處理HID協(xié)議的指令;如IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值則表示設(shè)備支持的USB接口通訊協(xié)議為SCSI協(xié)議,即設(shè)備可解析處理SCSI協(xié)議的指令;優(yōu)選的,第一預(yù)設(shè)值為1,第二預(yù)設(shè)值為3,第三預(yù)設(shè)值為5 ;
[0330]步驟B6:關(guān)閉串口中斷;
[0331]具體的,步驟B6為:將中斷標(biāo)志寄存器中的標(biāo)志位的值設(shè)為O ;
[0332]步驟B7:判斷是否已設(shè)置通訊模式,是則打開串口中斷,退出中斷,否則執(zhí)行步驟B8 ;
[0333]具體的,本實(shí)施例中檢測(cè)通訊標(biāo)識(shí),如為2則為USB接口通訊,如為I則為串口通訊,如為O則未設(shè)置通訊模式;
[0334]步驟B8:將通訊模式設(shè)置為串口通訊,打開串口中斷,退出中斷。
[0335]具體的,本實(shí)施例中,將通訊模式設(shè)置為串口通訊為:將通訊標(biāo)識(shí)置為I。
[0336]本實(shí)施例的步驟106包括:當(dāng)接收到設(shè)置通訊模式指令時(shí)設(shè)置通訊模式為串口通訊;對(duì)應(yīng)的步驟B8替換為:扔掉第一個(gè)數(shù)據(jù)包,打開串口中斷,退出串口中斷。
[0337]本實(shí)施例中也可預(yù)先定義該設(shè)備支持多種USB接口通訊協(xié)議,如支持CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的其中兩種協(xié)議或者三種協(xié)議,枚舉過程中給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī),如IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,表示所述設(shè)備支持CCID協(xié)議;如IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,表示所述設(shè)備支持HID協(xié)議;如IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,表示所述設(shè)備支持SCSI協(xié)議。
[0338]對(duì)應(yīng)的,本實(shí)施例中的步驟103包括:
[0339]步驟103-41:檢測(cè)IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則根據(jù)CCID協(xié)議對(duì)收到的指令進(jìn)行操作,如為第二預(yù)設(shè)值則根據(jù)HID協(xié)議對(duì)收到的指令進(jìn)行操作,如為第三預(yù)設(shè)值則根據(jù)SCSI協(xié)議對(duì)收到的指令進(jìn)行操作;
[0340]具體的,本實(shí)施例中根據(jù)CCID協(xié)議對(duì)收到的指令進(jìn)行操作參見上述步驟103-11至步驟103-15 ;根據(jù)HID協(xié)議對(duì)收到的指令進(jìn)行操作參見上述步驟103-21至步驟103-27 ;根據(jù)SCSI協(xié)議對(duì)收到的指令進(jìn)行操作參見上述步驟103-31至步驟103-39。在此不再贅述根據(jù)各協(xié)議對(duì)接收到的指令進(jìn)行操作的具體實(shí)現(xiàn)過程。
[0341]實(shí)施例二
[0342]本發(fā)明實(shí)施例二提供一種通訊模式的識(shí)別方法,如圖7所示,包括:
[0343]步驟601:設(shè)備上電,進(jìn)行初始化,打開中斷;
[0344]本實(shí)施例中設(shè)備進(jìn)行初始化包括:將通訊標(biāo)識(shí)的值置為0,開啟定時(shí)器;
[0345]具體的,本實(shí)施例中的打開中斷包括:打開串口中斷、USB中斷、時(shí)鐘中斷;
[0346]步驟602:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟613,否則執(zhí)行步驟
603;
[0347]具體的,本實(shí)施例中步驟602為:判斷通訊標(biāo)識(shí)的值是否為1,是則為USB接口通訊模式,否則不為USB接口通訊模式;
[0348]步驟603:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟604,否則返回步驟602 ;
[0349]步驟604:將接收到的數(shù)據(jù)存儲(chǔ)到第一緩存區(qū)中,判斷存儲(chǔ)在第一緩存區(qū)中的第一字節(jié)數(shù)據(jù)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟606,否則執(zhí)行步驟605 ;
[0350]在本實(shí)施例中,第一預(yù)設(shè)值具體為OxOF ;
[0351]步驟605:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟613,否則返回步驟
604;
[0352]步驟606:當(dāng)通過串口接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到第一緩存區(qū)中,對(duì)第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟607,否則返回步驟603 ;
[0353]在本實(shí)施例中,對(duì)緩存區(qū)中除第一字節(jié)數(shù)據(jù)和最后一個(gè)字節(jié)數(shù)據(jù)外的剩余數(shù)據(jù)進(jìn)行計(jì)算,判斷計(jì)算結(jié)果是否與最后一個(gè)字節(jié)數(shù)據(jù)相同,是則校驗(yàn)通過,否則校驗(yàn)未通過;
[0354]步驟607:設(shè)置串口通訊波特率,設(shè)置通訊模式為第一串口通訊;
[0355]在本實(shí)施例中,設(shè)置通訊模式為第一串口通訊具體為:將通訊標(biāo)識(shí)的值設(shè)為4 ;在第一串口通訊模式下接收到的數(shù)據(jù)為握手命令;
[0356]步驟608:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟610,否則執(zhí)行步驟609 ;
[0357]本實(shí)施例中步驟608具體為:判斷通訊標(biāo)識(shí)的值是否為4,是則執(zhí)行步驟610,否則執(zhí)行步驟609 ;[0358]步驟609:設(shè)置通訊模式為第二串口通訊,執(zhí)行步驟612 ;
[0359]在本實(shí)施例中,步驟609具體為:將通訊標(biāo)識(shí)的值設(shè)為2 ;
[0360]本實(shí)施例中,設(shè)備的通訊模式為第二串口通訊時(shí)標(biāo)識(shí)當(dāng)前可接收串口數(shù)據(jù)并根據(jù)串口協(xié)議進(jìn)行處理;
[0361]步驟610:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟611,否則等待接收數(shù)據(jù),返回步驟610 ;
[0362]步驟611:當(dāng)接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到第一緩存區(qū)中,對(duì)第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟612,否則返回步驟610;
[0363]本實(shí)施例中該步驟的校驗(yàn)方法與步驟606中的校驗(yàn)方法相同,在此不再贅述;
[0364]步驟612:根據(jù)串口協(xié)議對(duì)第一緩存區(qū)中的數(shù)據(jù)進(jìn)行處理,返回步驟608 ;
[0365]如圖8所示,在本實(shí)施例中,步驟612的處理過程包括:
[0366]步驟612-1:從第一緩存區(qū)中提取前七個(gè)字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)字符串,是則執(zhí)行步驟612-2,否則給主機(jī)返回錯(cuò)誤信息,返回步驟 609 ;
[0367]具體的,本實(shí)施例中的第一預(yù)設(shè)字符串為0xF5、0x54 ;
[0368]步驟612-2:檢測(cè)第四字節(jié)上低四位的數(shù)據(jù),如為第一設(shè)定值則執(zhí)行步驟612-3,如為第二設(shè)定值則執(zhí)行步驟612-4,如為第三設(shè)定值則執(zhí)行步驟612-5,如為其他則給主機(jī)返回錯(cuò)誤信息,返回步驟609;
[0369]在本實(shí)施例中,第一設(shè)定值、第二設(shè)定值、第三設(shè)定值均為十六進(jìn)制數(shù),分別為0χ02λ0χ07λ0χ03 ;
[0370]步驟612-3:給主機(jī)返回包含串口通訊波特率的握手信息,返回步驟609 ;
[0371]步驟612-4:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟609 ;
[0372]步驟612-5:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,計(jì)算該APDU數(shù)據(jù)的長(zhǎng)度,判斷計(jì)算得到的APDU數(shù)據(jù)的長(zhǎng)度與提取的數(shù)據(jù)長(zhǎng)度是否相同,是則給主機(jī)返回接收數(shù)據(jù)正確響應(yīng),執(zhí)行步驟612-6,否則給主機(jī)返回接收數(shù)據(jù)錯(cuò)誤信息,返回步驟609 ;
[0373]步驟612-6:根據(jù)串口協(xié)議對(duì)APDU數(shù)據(jù)進(jìn)行處理并將處理結(jié)果存儲(chǔ)到第二緩存區(qū)中,返回步驟609 ;
[0374]步驟613:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟613 ;
[0375]本實(shí)施例中步驟613的具體實(shí)現(xiàn)過程與實(shí)施例一中步驟103相同,在此不再贅述。
[0376]在本實(shí)施例中,在識(shí)別通訊模式的過程中如檢測(cè)到中斷信號(hào)時(shí),則進(jìn)行中斷處理,如圖9所示,處理過程具體包括:
[0377]步驟Al:判斷是否為USB中斷,是則執(zhí)行步驟Α2,否則退出中斷;
[0378]具體的,本實(shí)施例中判斷中斷標(biāo)志寄存器中的標(biāo)志位的值是否為1,是則為USB中斷,否則不為USB中斷;
[0379]步驟Α2:關(guān)閉USB中斷;
[0380]具體的,步驟Α2為:將中斷標(biāo)志寄存器中的標(biāo)志位的值設(shè)為O ;
[0381]步驟A3:判斷是否已設(shè)置通訊模式,是則執(zhí)行步驟Α5,否則執(zhí)行步驟Α4 ;
[0382]具體的,本實(shí)施例中判斷通訊標(biāo)識(shí)的值是否為0,是則未設(shè)置通訊模式,否則設(shè)置了通訊模式;
[0383]步驟A4:將通訊模式設(shè)置為USB接口通訊,執(zhí)行步驟A5 ;
[0384]具體的,本實(shí)施例中步驟A4為:將通訊標(biāo)識(shí)置為I ;
[0385]步驟A5:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷;
[0386]具體的,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:給主機(jī)返回設(shè)備IO通訊標(biāo)識(shí)的值,如IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,表示所述設(shè)備支持CCID協(xié)議;如IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,表示所述設(shè)備支持HID協(xié)議;如IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,表示所述設(shè)備支持SCSI協(xié)議;
[0387]本實(shí)施例中設(shè)備支持的USB接口通訊協(xié)議可預(yù)先進(jìn)行設(shè)置,預(yù)先設(shè)置設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的一種或者兩種或三種。
[0388]當(dāng)設(shè)備支持CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的兩種或者三種時(shí),則步驟613包括:
[0389]步驟613-41:檢測(cè)IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟613_42,如為第二預(yù)設(shè)值則執(zhí)行步驟613-47,如為第三預(yù)設(shè)值則執(zhí)行步驟613-54 ;
[0390]優(yōu)選的,第一預(yù)設(shè)值為1,第二預(yù)設(shè)值為3,第三預(yù)設(shè)值為5 ;
[0391]步驟613-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令;
[0392]步驟613-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟613-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟613-45 ;如為其他則執(zhí)行步驟613-46 ;
[0393]步驟613-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟613-42 ;
[0394]步驟613-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟613-42;
[0395]步驟613-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟613-42 ;
[0396]步驟613-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟613-49,如為接收狀態(tài)則執(zhí)行步驟613-48 ;
[0397]步驟613-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟613-51,如為其他則返回步驟613-47 ;
[0398]步驟613-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟613-51,如為第二字符串則執(zhí)行步驟613-50,如為其他則返回步驟613-47 ;
[0399]步驟613-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟613-47 ;
[0400]步驟613-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟613-52,否則執(zhí)行步驟613-53 ;
[0401]步驟613-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到所述第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟613-47 ;
[0402]步驟613-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟613-47 ;
[0403]步驟613-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析;
[0404]步驟613-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟613-56,否則返回步驟613-54 ;
[0405]步驟613-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟613-57,否則執(zhí)行步驟613-58 ;
[0406]步驟613-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟 613-54 ;
[0407]步驟613-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟613_59,如是接收則執(zhí)行步驟 613-60 ;
[0408]步驟613-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟613-54 ;
[0409]步驟613-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟613-61,否則執(zhí)行步驟613-62 ;
[0410]步驟613-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到所述第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟613-54 ;
[0411]步驟613-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到所述第二緩存區(qū)中,返回步驟613-54。
[0412]實(shí)施例三
[0413]本發(fā)明實(shí)施例三提供了一種通訊模式的識(shí)別方法,如圖10所示,包括:
[0414]步驟900:設(shè)備上電,進(jìn)行初始化;
[0415]在本實(shí)施例中,進(jìn)行初始化包括:將通訊標(biāo)識(shí)的值設(shè)為O ;
[0416]本實(shí)施例中,設(shè)備上電后的默認(rèn)通訊模式為串口通訊;
[0417]步驟901:打開串口中斷、USB中斷、時(shí)鐘中斷和定時(shí)器;
[0418]步驟902:判斷是否觸發(fā)串行中斷,是則執(zhí)行步驟903,否則進(jìn)入其他中斷進(jìn)行處理,退出中斷后繼續(xù)執(zhí)行步驟903 ;
[0419]具體的,在本實(shí)施例中,進(jìn)入其他中斷具體處理過程包括:
[0420]步驟Dl:判斷是否觸發(fā)USB中斷,是則執(zhí)行步驟A2,否則退出中斷;
[0421]步驟D2:關(guān)閉USB中斷,判斷是否通過端點(diǎn)O接收到Set up數(shù)據(jù)包,是則執(zhí)行步驟D3,否則打開USB中斷,執(zhí)行步驟D4 ;
[0422]步驟D3:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,執(zhí)行步驟D4 ;
[0423]本實(shí)施中預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議為CCID、HID、SCSI中的一種或多種,每種協(xié)議對(duì)應(yīng)的IO通訊標(biāo)識(shí)的值不同,如IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,表示所述設(shè)備支持CCID協(xié)議;如IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,表示所述設(shè)備支持HID協(xié)議;如IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,表示所述設(shè)備支持SCSI協(xié)議;給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議具體為:將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī);優(yōu)選的,本實(shí)施例中以設(shè)備只支持一種協(xié)議為例進(jìn)行說明;
[0424]步驟D4:設(shè)置通訊模式為USB接口通訊,退出USB中斷;
[0425]具體的,設(shè)置通訊模式為USB接口通訊包括:將通訊標(biāo)識(shí)的值設(shè)為I ;
[0426]步驟903:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟904,否則返回步驟905 ;
[0427]在本實(shí)施例中,步驟903具體為:判斷通訊標(biāo)識(shí)的值是否為1,是則為USB接口通訊,否則不為USB接口通訊;
[0428]步驟904:接收主機(jī)下發(fā)的指令,并根據(jù)設(shè)備支持的USB接口通訊協(xié)議對(duì)接收到的指令進(jìn)行處理,處理完成后繼續(xù)等待接收主機(jī)下發(fā)的指令,返回步驟904 ;
[0429]在本實(shí)施例中,根據(jù)設(shè)備支持的USB接口通訊協(xié)議對(duì)接收到的指令進(jìn)行處理的實(shí)現(xiàn)過程與實(shí)施例一中的步驟103處理過程相同,在此不再贅述
[0430]步驟905:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟906,否則執(zhí)行步驟907 ;
[0431]具體的,步驟905為:判斷通訊標(biāo)識(shí)的值是否為4,是則為第一串口通訊,否則不為
第一串口通訊;
[0432]步驟906:等待主機(jī)下發(fā)指令,當(dāng)接收指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟906 ;
[0433]根據(jù)串口通訊協(xié)議對(duì)接收到的數(shù)據(jù)進(jìn)行相應(yīng)操作,如圖11所示,包括:
[0434]步驟906-1:接收串口數(shù)據(jù)并將其存儲(chǔ)到第一緩存區(qū)中;
[0435]步驟906-2:從第一緩存區(qū)的串口數(shù)據(jù)中提取前七個(gè)字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)字符串,是則執(zhí)行步驟906-3,否則清除通訊模式,給主機(jī)返回錯(cuò)誤信息,返回步驟902 ;
[0436]具體的,本實(shí)施例中的第一預(yù)設(shè)字符串為0xF5、0x54 ;
[0437]步驟906-3:檢測(cè)第四字節(jié)上低四位的數(shù)據(jù),如為第一設(shè)定值則執(zhí)行步驟906-4,如為第二設(shè)定值則執(zhí)行步驟906-5,如為第三設(shè)定值則執(zhí)行步驟906-6 ;
[0438]在本實(shí)施例中,第一設(shè)定值、第二設(shè)定值、第三設(shè)定值分別為0χ02、0χ07、0χ03 ;
[0439]步驟906-3中如判斷第四字節(jié)上低四位的數(shù)據(jù)為其他則給主機(jī)返回錯(cuò)誤信息,返回步驟902 ;
[0440]步驟906-4:給主機(jī)返回包含串口通訊波特率的握手信息,返回步驟902 ;
[0441]步驟906-5:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟902 ;
[0442]步驟906-6:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,計(jì)算該APDU數(shù)據(jù)的長(zhǎng)度;
[0443]步驟906-7:判斷計(jì)算得到的APDU數(shù)據(jù)的長(zhǎng)度與提取的數(shù)據(jù)長(zhǎng)度是否相同,是則給主機(jī)返回接收數(shù)據(jù)正確響應(yīng),執(zhí)行步驟906-8,否則給主機(jī)返回接收數(shù)據(jù)錯(cuò)誤信息,返回步驟902 ;
[0444]步驟906-8:根據(jù)串口協(xié)議對(duì)APDU數(shù)據(jù)進(jìn)行處理并將處理結(jié)果存儲(chǔ)到第二緩存區(qū)中,返回步驟902 ;
[0445]步驟907:檢測(cè)串口信號(hào),等待主機(jī)下發(fā)握手?jǐn)?shù)據(jù)包;
[0446]步驟908:判斷是否檢測(cè)到串口信號(hào),是則執(zhí)行步驟909,否則返回步驟902 ;[0447]步驟909:接收主機(jī)下發(fā)的第一個(gè)字節(jié)數(shù)據(jù)并將其存儲(chǔ)在第一緩存區(qū)中,判斷第一字節(jié)數(shù)據(jù)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟910,否則返回步驟902 ;
[0448]在本實(shí)施例中,第一預(yù)設(shè)值具體為OxOF ;
[0449]步驟910:當(dāng)通過串口接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到第一緩存區(qū)中,對(duì)第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟911,否則返回步驟902 ;
[0450]步驟911:設(shè)置串口通訊波特率,設(shè)置通訊模式為第一串口通訊,返回步驟902 ;
[0451]在本實(shí)施例中,設(shè)置通訊模式為第一串口通訊,具體為:將通訊標(biāo)識(shí)的值設(shè)為4 ;
[0452]在本實(shí)施例中,設(shè)備設(shè)置了通訊波特率在接收到主機(jī)下發(fā)的獲取波特率指令時(shí)將該波特率發(fā)送給主機(jī),然后與主機(jī)以該波特率進(jìn)行通訊。
[0453]本實(shí)施例中的設(shè)備也可預(yù)先定義設(shè)備支持CCID協(xié)議、HID協(xié)議和SCSI協(xié)議中的至少兩種USB接口通訊協(xié)議,其實(shí)現(xiàn)過程與實(shí)施例二相同,在此不再贅述。
[0454]本發(fā)明實(shí)施例提供的方法即可在現(xiàn)有產(chǎn)品上通用,也適用于老版本的串口產(chǎn)品,可提高產(chǎn)品的整體兼容性、繼承性,也避免了更新淘汰市場(chǎng)上大量老產(chǎn)品而產(chǎn)生的巨額開銷,節(jié)省了大量人力、物力、財(cái)力成本。
[0455]以上所述,僅為本發(fā)明較佳的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種通訊模式的識(shí)別方法,其特征在于,包括: 步驟S1:設(shè)備上電,進(jìn)行初始化,打開中斷和定時(shí)器,所述定時(shí)器開始計(jì)時(shí); 當(dāng)所述定時(shí)器計(jì)時(shí)到達(dá)預(yù)設(shè)值時(shí),進(jìn)入時(shí)鐘中斷處理,時(shí)鐘中斷處理包括:關(guān)閉所述定時(shí)器,將超時(shí)標(biāo)識(shí)置位,打開所述定時(shí)器,退出時(shí)鐘中斷; 當(dāng)檢測(cè)到其他中斷信號(hào)時(shí),執(zhí)行步驟B1-步驟B8 ; 步驟B1:判斷中斷類型,如為USB中斷則執(zhí)行步驟B2,如為串口中斷則執(zhí)行步驟B6 ; 步驟B2:關(guān)閉USB中斷; 步驟B3:判斷是否已設(shè)置通訊模式,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ; 步驟B4:設(shè)置通訊模式為USB接口通訊,執(zhí)行步驟B5 ; 步驟B5:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷; 步驟B6:關(guān)閉串口中斷; 步驟B7:判斷是否已設(shè)置通訊模式,是則打開串口中斷,退出串口中斷,否則執(zhí)行步驟B8 ; 步驟B8:根據(jù)接收到的第一個(gè)數(shù)據(jù)包設(shè)置通訊模式為串口通訊,打開串口中斷,退出串口中斷;` 步驟S2:檢測(cè)通訊模式的類型,如為USB接口通訊,則關(guān)閉所述定時(shí)器,執(zhí)行步驟S3,如為串口通訊,則關(guān)閉所述定時(shí)器,執(zhí)行步驟S6,如未設(shè)置通訊模式則執(zhí)行步驟S4 ; 步驟S3:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟S3 ; 步驟S4:判斷所示超時(shí)標(biāo)識(shí)是否置位,是則執(zhí)行步驟S5,否則返回步驟S2 ; 步驟S5:設(shè)置通訊模式為串口通訊,關(guān)閉所述定時(shí)器,將超時(shí)標(biāo)識(shí)復(fù)位,執(zhí)行步驟S6 ;步驟S6:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟S6。
2.如權(quán)利要求1所述的方法,其特征在于,還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議; 所述步驟B5中的給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī)。
3.如權(quán)利要求2所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,所述步驟S3包括: 步驟S3-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟S3-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟S3-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟S3-14 ;如為其他則執(zhí)行步驟S3-15 ; 步驟S3-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟S3-11 ; 步驟S3-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟S3-11 ; 步驟S3-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟S3-11。
4.如權(quán)利要求2所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,所述步驟S3包括: 步驟S3-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-23,如為接收狀態(tài)則執(zhí)行步驟S3-22 ;步驟S3-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為其他則返回步驟S3-21 ; 步驟S3-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-25,如為第二字符串則執(zhí)行步驟S3-24,如為其他則返回步驟S3-21 ; 步驟S3-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟S3-21 ; 步驟S3-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟S3-26,否則執(zhí)行步驟S3-27 ; 步驟S3-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21 ; 步驟S3-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的 狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-21。
5.如權(quán)利要求2所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,所述步驟S3包括: 步驟S3-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析; 步驟S3-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-33,否則返回步驟S3-31 ; 步驟S3-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟S3-34,否則執(zhí)行步驟S3-35 ; 步驟S3-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟S3-31 ; 步驟S3-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-36,如是接收則執(zhí)行步驟S3-37 ; 步驟S3-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟S3-31 ; 步驟S3-37:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟S3-38,否則執(zhí)行步驟S3-39 ; 步驟S3-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟S3-31 ; 步驟S3-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟S3-31。
6.如權(quán)利要求1所述的方法,其特征在于,還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議;所述步驟B5中的給主機(jī)返回設(shè)備支持的USB通訊USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī)。
7.如權(quán)利要求6所述的方法,其特征在于,所述步驟S3包括: 步驟S3-41:檢測(cè)所述IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟S3-42,如為第二預(yù)設(shè)值則執(zhí)行步驟S3-47,如為第三預(yù)設(shè)值則執(zhí)行步驟S3-54 ; 步驟S3-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟S3-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟S3-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟S3-45 ;如為其他則執(zhí)行步驟S3-46 ; 步驟S3-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟S3-42 ; 步驟S3-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟S3-42 ; 步驟S3-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟S3-42 ; 步驟S3-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟S3-49,如為接收狀態(tài)則執(zhí)行步驟S3-48 ;步驟S3-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為其他則返回步驟S3-47 ; 步驟S3-49:根據(jù)HID協(xié)議解 析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟S3-51,如為第二字符串則執(zhí)行步驟S3-50,如為其他則返回步驟S3-47 ; 步驟S3-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟S3-47 ; 步驟S3-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟S3-52,否則執(zhí)行步驟S3-53 ; 步驟S3-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ; 步驟S3-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟S3-47 ; 步驟S3-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析; 步驟S3-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟S3-56,否則返回步驟S3-54 ; 步驟S3-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟S3-57,否則執(zhí)行步驟S3-58 ; 步驟S3-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟S3-54 ; 步驟S3-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟S3-59,如是接收則執(zhí)行步驟S3-60 ; 步驟S3-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟S3-54 ; 步驟S3-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟S3-61,否則執(zhí)行步驟S3-62 ; 步驟S3-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟S3-54; 步驟S3-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟S3-54。
8.如權(quán)利要求1所述的方法,其特征在于,所述步驟S6包括: 步驟S6-1:當(dāng)通過串口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)串口協(xié)議對(duì)所述第一緩存區(qū)中的指令進(jìn)行解析并判斷解析結(jié)果中第一字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟S6-2,否則返回步驟S6-1 ; 步驟S6-2:判斷所述解析結(jié)果中第三字節(jié)上的數(shù)據(jù)是否為第二預(yù)設(shè)數(shù)據(jù),是則執(zhí)行步驟S6-3,否則執(zhí)行步驟S6-4 ; 步驟S6-3:對(duì)所述解析結(jié)果進(jìn)行處理并將處理結(jié)果返回給主機(jī),返回步驟S6-1 ; 步驟S6-4:檢測(cè)所述解析結(jié)果中第四字節(jié)上的數(shù)據(jù),如為第三預(yù)設(shè)數(shù)據(jù)則執(zhí)行步驟S6-5,如為第四預(yù)設(shè)數(shù)據(jù)則執(zhí)行步驟S6-6,如為其他則返回步驟S6-1 ; 步驟S6-5:輸出電量不足信息,進(jìn)入死機(jī)狀態(tài),結(jié)束; 步驟S6-6:設(shè)置響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟S6-1 ;所述響應(yīng)數(shù)據(jù)包括設(shè)備與主機(jī)的通訊波特率和傳輸數(shù)據(jù)的長(zhǎng)度。
9.如權(quán)利要求1所述的方法,其特征在于,所述初始化包括:將通訊標(biāo)識(shí)的值設(shè)為O; 所述檢測(cè)通訊模式的類型,具體為:檢查所述通訊標(biāo)識(shí)的值,若所述通訊標(biāo)識(shí)的值為I則當(dāng)前通訊模式為USB接口通訊,若所述通訊標(biāo)識(shí)的值為2則當(dāng)前通訊模式為串口通訊,若所述通訊標(biāo)識(shí)的值為O則未設(shè)置通訊模式; 所述設(shè)置通訊模式為串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為2 ; 所述設(shè)置通訊模式為USB接口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為I。
10.一種通訊模式的識(shí)別方法,其特征在于,包括: 步驟Pl:設(shè)備上電,進(jìn)行初始化,打開中斷; 當(dāng)檢測(cè)到中斷信號(hào)時(shí),進(jìn)行中斷處理,所述中斷處理包括: 步驟Al:判斷是否為USB中斷,是則執(zhí)行步驟A2,否則退出中斷; 步驟A2:關(guān)閉USB中斷; 步驟A3:判斷是否已設(shè)置通訊模式,是則執(zhí)行步驟A5,否則執(zhí)行步驟A4 ; 步驟A4:將通訊模式設(shè)置為USB接口通訊,執(zhí)行步驟A5 ; 步驟A5:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,枚舉完成后退出USB中斷; 步驟P2:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則執(zhí)行步驟P3 ; 步驟P3:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P4,否則返回步驟P2 ; 步驟P4:將接收到的數(shù)據(jù)存儲(chǔ)到第一緩存區(qū)中,判斷存儲(chǔ)在所述第一緩存區(qū)中的第一字節(jié)數(shù)據(jù)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟P6,否則執(zhí)行步驟P5 ;步驟P5:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟P13,否則返回步驟P4 ;步驟P6:當(dāng)通過串口接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到所述第一緩存區(qū)中,對(duì)所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟P7,否則返回步驟P3 ; 步驟P7:設(shè)置串口通訊波特率,設(shè)置通訊模式為第一串口通訊; 步驟P8:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟P10,否則執(zhí)行步驟P9 ; 步驟P9:設(shè)置通訊模式為第二串口通訊,執(zhí)行步驟P12 ; 步驟PlO:判斷是否通過串口接收到數(shù)據(jù),是則執(zhí)行步驟P11,否則等待接收數(shù)據(jù),返回步驟PlO ; 步驟Pll:當(dāng)接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到所述第一緩存區(qū)中,對(duì)所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟P12,否則返回步驟PlO ;步驟P12:根據(jù)串口協(xié)議對(duì)所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行處理; 步驟P13:等待主機(jī)下發(fā)指令,當(dāng)接收到指令時(shí)根據(jù)設(shè)備支持的USB接口通訊協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟P13。
11.如權(quán)利要求10所述的方法,其特征在于,所述初始化包括:將通訊標(biāo)識(shí)的值設(shè)為0 所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為1,是則為USB接口通訊,否則不為USB接口通訊; 所述設(shè)置通訊模式為第一串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為4 ; 所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為4,是則為第一串口通訊,否則不為第一串口通訊; 所述設(shè)置通訊模式為第二串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為2。
12.如權(quán)利要求10所述的方法,其特征在于,所述步驟P12具體包括: 步驟P12-1:從第一緩存區(qū)中提取前七個(gè)字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)字符串,是則執(zhí)行步驟P12-2,否則給主機(jī)返回錯(cuò)誤信息,返回步驟P9 ; 步驟P12-2:檢測(cè)第四字節(jié)上低四位的數(shù)據(jù),若為第一設(shè)定值則執(zhí)行步驟P12-3,若為第二設(shè)定值則執(zhí)行步驟P12-4,若為第三設(shè)定值則執(zhí)行步驟P12-5,若為其他則給主機(jī)返回錯(cuò)誤信息,返回步驟P9; 步驟P12-3:給主機(jī)返回包含所述串口通訊波特率的握手信息,返回步驟P9 ; 步驟P12-4:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟P9 ; 步驟P12-5:從第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,計(jì)算該APDU數(shù)據(jù)的長(zhǎng)度,判斷計(jì)算得到的APDU數(shù)據(jù)的長(zhǎng)度與提取的數(shù)據(jù)長(zhǎng)度是否相同,是則給主機(jī)返回接收數(shù)據(jù)正確響應(yīng),執(zhí)行步驟P12-6,否則給主機(jī)返回接收數(shù)據(jù)錯(cuò)誤信息,返回步驟P9 ; 步驟P12-6:根據(jù)串口協(xié)議對(duì)APDU數(shù)據(jù)進(jìn)行處理并將處理結(jié)果存儲(chǔ)到所述第二緩存區(qū)中,返回步驟P9。
13.如權(quán)利要求10所述的方法,其特征在于,還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議; 所述步驟A5中給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī)。
14.如權(quán)利要求13所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,所述步驟P13包括: 步驟P13-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟P13-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟P13-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟P13-14 ;如為其他則執(zhí)行步驟P13-15 ; 步驟P13-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟P13-11 ; 步驟P13-14:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟P13-11 ; 步驟P13-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟P13-11。
15.如權(quán)利要求13所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,所述步驟P13包括: 步驟P13-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-23,如為接收狀態(tài)則執(zhí)行步驟P13-22 ; 步驟P13-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為其他則返回步驟P13-21 ; 步驟P13-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-25,如為第二字符串則執(zhí)行步驟P13-24,如為其他則返回步驟 P13-21 ; 步驟P13-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟P13-21 ; 步驟P13-25 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟P13-26,否則執(zhí)行步驟P13-27 ; 步驟P13-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21 ; 步驟P13-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-21。
16.如權(quán)利要求13所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,所述步驟P13包括: 步驟P13-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析; 步驟P13-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-33,否則返回步驟P13-31 ; 步驟P13-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟P13-34,否則執(zhí)行步驟P13-35 ;步驟P13-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟P13-31 ; 步驟P13-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-36,如是接收則執(zhí)行步驟P13-37 ; 步驟P13-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟P13-31 ; 步驟P13-37:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟P13-38,否則執(zhí)行步驟P13-39 ; 步驟P13-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟P13-31 ; 步驟P13-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟P13-31。
17.如權(quán)利要求10所述的方法,其特征在于,還包括:所述設(shè)備預(yù)先定義的設(shè)備支持USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議; 所述步驟B5中的給主機(jī)返回設(shè)備支持的USB通訊USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī)。
18.如權(quán)利要求17所述的方法,其特征在于,所述步驟P13包括: 步驟P13-41:檢測(cè)所述IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟P13-42,如為第二預(yù)設(shè)值則執(zhí)行步驟P13-47,如為第三預(yù)設(shè)值則執(zhí)行步驟P13-54 ; 步驟P13-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟P13-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟P13-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟P13-45 ;如為其他則執(zhí)行步驟P13-46 ; 步驟P13-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟P13-42 ; 步驟P13-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟P13-42 ; 步驟P13-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟P13-42 ; 步驟P13-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟P13-49,如為接收狀態(tài)則執(zhí)行步驟PI3-48 ; 步驟P13-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為其他則返回步驟P13-47 ; 步驟P13-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟P13-51,如為第二字符串則執(zhí)行步驟P13-50,如為其他則返回步驟 P13-47 ; 步驟P13-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟P13-47 ; 步驟P13-51 ^fSet up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟P13-52,否則執(zhí)行步驟P13-53 ; 步驟P13-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ; 步驟P13-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟P13-47 ; 步驟P13-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析; 步驟P13-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟P13-56,否則返回步驟P13-54 ; 步驟P13-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟P13-57,否則執(zhí)行步驟P13-58 ; 步驟P13-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟P13-54 ; 步驟P13-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟P13-59,如是接收則執(zhí)行步驟P13-60 ; 步驟P13-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟P13-54 ; 步驟P13-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令`,是則執(zhí)行步驟P13-61,否則執(zhí)行步驟P13-62 ; 步驟P13-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟P13-54 ; 步驟P13-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟P13-54。
19.一種通訊模式的識(shí)別方法,其特征在于,包括: 步驟L1:設(shè)備上電,進(jìn)行初始化,打開中斷; 步驟L2:判斷是否觸發(fā)串行中斷,是則執(zhí)行步驟L3,否則進(jìn)入其他中斷進(jìn)行處理,退出中斷后繼續(xù)執(zhí)行步驟L3; 步驟L3:判斷通訊模式是否為USB接口通訊,是則執(zhí)行步驟L4,否則執(zhí)行步驟L5 ;步驟L4:接收主機(jī)下發(fā)的指令,并根據(jù)設(shè)備支持的USB接口通訊協(xié)議對(duì)接收到的指令進(jìn)行處理,處理完成后繼續(xù)等待接收主機(jī)下發(fā)的指令,返回步驟L4 ; 步驟L5:判斷通訊模式是否為第一串口通訊,是則執(zhí)行步驟L6,否則執(zhí)行步驟L7 ;步驟L6:等待主機(jī)下發(fā)指令,當(dāng)接收指令時(shí)根據(jù)串口協(xié)議進(jìn)行相應(yīng)操作,操作完成后返回步驟L6 ; 步驟L7:檢測(cè)串口信號(hào),等待主機(jī)下發(fā)握手?jǐn)?shù)據(jù)包; 步驟L8:判斷是否檢測(cè)到串口信號(hào),是則執(zhí)行步驟L9,否則返回步驟L2 ; 步驟L9:接收主機(jī)下發(fā)的第一個(gè)字節(jié)數(shù)據(jù)并將其存儲(chǔ)在第一緩存區(qū)中,判斷第一字節(jié)數(shù)據(jù)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟L10,否則返回步驟L2 ; 步驟LlO:當(dāng)通過串口接收到主機(jī)下發(fā)的全部數(shù)據(jù)后將其存儲(chǔ)到第一緩存區(qū)中,對(duì)第一緩存區(qū)中的數(shù)據(jù)進(jìn)行校驗(yàn)并判斷校驗(yàn)是否通過,是則執(zhí)行步驟L11,否則返回步驟L2;步驟Lll:設(shè)置串口通訊波特率,設(shè)置通訊模式為第一串口通訊,返回步驟L2 ;所述進(jìn)入其他中斷進(jìn)行處理包括: 步驟Dl:判斷是否觸發(fā)USB中斷,是則執(zhí)行步驟D2,否則退出中斷; 步驟D2:關(guān)閉USB中斷,判斷是否通過端點(diǎn)O接收到Set up數(shù)據(jù)包,是則執(zhí)行步驟D3,否則打開USB中斷,執(zhí)行步驟D4 ; 步驟D3:打開USB中斷,進(jìn)行USB枚舉,給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,執(zhí)行步驟D4 ; 步驟D4:設(shè)置通訊模式為USB接口通訊,退出USB中斷。
20.如權(quán)利要求19所述的方法,其特征在于,所述進(jìn)行初始化包括:將通訊標(biāo)識(shí)的值設(shè)為O ; 所述判斷通訊模式是否為USB接口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為1,是則為USB接口通訊,否則不為USB接口通訊; 所述設(shè)置通訊模式為第一串口通訊,具體為:將所述通訊標(biāo)識(shí)的值設(shè)為4 ; 所述判斷通訊模式是否為第一串口通訊,具體為:判斷所述通訊標(biāo)識(shí)的值是否為4,是則為第一串口通訊,否則不為第一串口通訊。
21.如權(quán)利要求19所述的方法,其特征在于,所述步驟L6具體包括: 步驟L6-1:接收串口數(shù)據(jù)并將其存儲(chǔ)到第一緩存區(qū)中; 步驟L6-2:從所述第一緩存區(qū)的串口數(shù)據(jù)中提取前七個(gè)字節(jié)數(shù)據(jù),并判斷第一字節(jié)與第二字節(jié)上的數(shù)據(jù)是否為第一預(yù)設(shè)字符串,是則執(zhí)行步驟L6-3,否則清除通訊模式,給主機(jī)返回錯(cuò)誤信息,返回步驟L2; 步驟L6-3:檢測(cè)第四字節(jié)上低四位的數(shù)據(jù),如為第一設(shè)定值則執(zhí)行步驟L6-4,如為第二設(shè)定值則執(zhí)行步驟L6-5,如為第三設(shè)定值則執(zhí)行步驟L6-6 ; 步驟L6-4:給主機(jī)返回包含串口通訊波特率的握手信息,返回步驟L2 ; 步驟L6-5:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟L2 ;步驟L6-6:從所述第一緩存區(qū)中提取APDU數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,計(jì)算該APDU數(shù)據(jù)的長(zhǎng)度;步驟L6-7:判斷計(jì)算得到的APDU數(shù)據(jù)的長(zhǎng)度與提取的數(shù)據(jù)長(zhǎng)度是否相同,是則給主機(jī)返回接收數(shù)據(jù)正確響應(yīng),執(zhí)行步驟L6-8,否則給主機(jī)返回接收數(shù)據(jù)錯(cuò)誤信息,返回步驟L2 ;步驟L6-8:根據(jù)串口協(xié)議對(duì)APDU數(shù)據(jù)進(jìn)行處理并將處理結(jié)果存儲(chǔ)到所述第二緩存區(qū)中,返回步驟L2。
22.如權(quán)利要求19所述的方法,其特征在于,還包括:所述設(shè)備預(yù)先定義設(shè)備支持支持的USB接口通訊協(xié)議為CCID協(xié)議或HID協(xié)議或SCSI協(xié)議,所述步驟D3中的給主機(jī)返回設(shè)備支持的USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)的值發(fā)送給主機(jī)。
23.如權(quán)利要求22所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第一預(yù)設(shè)值,所述步驟L4包括: 步驟L4-11:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟L4-12:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟L4-13,如為第二預(yù)設(shè)字符則執(zhí)行步驟L4-14 ;如為其他則執(zhí)行步驟L4-15 ; 步驟L4-13:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟L4-11 ;步驟L4-14:將解析結(jié)果中的ALDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟L4-11 ; 步驟L4-15:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟L4-11。
24.如權(quán)利要求22所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第二預(yù)設(shè)值,所述步驟L4包括: 步驟L4-21:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-23,如為接收狀態(tài)則執(zhí)行步驟L4-22 ;步驟L4-22:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為其他則返回步驟L4-21 ; 步驟L4-23:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-25,如為第二字符串則執(zhí)行步驟L4-24,如為其他則返回步驟L4-21 ; 步驟L4-24:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟L4-21 ; 步驟L4-25:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟L4-26,否則執(zhí)行步驟L4-27 ; 步驟L4-26:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到所述第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21 ; 步驟L4-27:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-21。
25.如權(quán)利要求22所述的方法,其特征在于,所述IO通訊標(biāo)識(shí)的值為第三預(yù)設(shè)值,所述步驟L4包括: 步驟L4-31:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析; 步驟L4-32:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-33,否則返回步驟L4-31 ; 步驟L4-33:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟L4-34,否則執(zhí)行步驟L4-35 ; 步驟L4-34:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟L4-31 ; 步驟L4-35:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-36,如是接收則執(zhí)行步驟L4-37 ; 步驟L4-36:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟L4-31 ; 步驟L4-37:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟L4-38,否則執(zhí)行步驟L4-39 ; 步驟L4-38:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟L4-31 ; 步驟L4-39:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟L4-31。
26.如權(quán)利要求19所述的方法,其特征在于,還包括:所述設(shè)備預(yù)先定義設(shè)備支持的USB接口通訊協(xié)議包括CCID協(xié)議、HID協(xié)議、SCSI協(xié)議中的至少兩種協(xié)議; 所述步驟B5中的給主機(jī)返回設(shè)備支持的USB通訊USB接口通訊協(xié)議,包括:所述設(shè)備將IO通訊標(biāo)識(shí)發(fā)送給主機(jī)。
27.如權(quán)利要求26所述的方法,其特征在于,所述步驟L4包括: 步驟L4-41:檢測(cè)所述IO通訊標(biāo)識(shí)的值,如為第一預(yù)設(shè)值則執(zhí)行步驟L4-42,如為第二預(yù)設(shè)值則執(zhí)行步驟L4-47,如為第三預(yù)設(shè)值則執(zhí)行步驟L4-54 ; 步驟L4-42:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)將其存儲(chǔ)到第一緩存區(qū)中,根據(jù)CCID協(xié)議解析所述第一緩存區(qū)中的指令; 步驟L4-43:判斷解析結(jié)果中的第一字節(jié)數(shù)據(jù),如為第一預(yù)設(shè)字符則執(zhí)行步驟L4-44,如為第二預(yù)設(shè)字符則執(zhí)行步驟L4-45 ;如為其他則執(zhí)行步驟L4-46 ; 步驟L4-44:對(duì)解析結(jié)果進(jìn)行相應(yīng)操作,并將操作結(jié)果存儲(chǔ)到第二緩存區(qū),將操作結(jié)果返回給主機(jī),返回步驟L4-42 ; 步驟L4-45:將解析結(jié)果中的APDU數(shù)據(jù)發(fā)送給命令層進(jìn)行處理,接收到處理結(jié)果時(shí)將其存儲(chǔ)到第二緩存區(qū),將處理結(jié)果返回給主機(jī),返回步驟L4-42 ; 步驟L4-46:組織消息錯(cuò)誤響應(yīng)并將其存儲(chǔ)到第二緩存區(qū),將所述消息錯(cuò)誤響應(yīng)返回給主機(jī),返回步驟L4-42 ; 步驟L4-47:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到八個(gè)字節(jié)大小的Set up數(shù)據(jù)包時(shí),判斷狀態(tài)機(jī)的狀態(tài),如為發(fā)送狀態(tài)則執(zhí)行步驟L4-49,如為接收狀態(tài)則執(zhí)行步驟L4-48 ;步驟L4-48:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為其他則返回步驟L4-47 ; 步驟L4-49:根據(jù)HID協(xié)議解析Set up數(shù)據(jù)包,并檢測(cè)解析結(jié)果的前兩個(gè)字節(jié)數(shù)據(jù),如為第一字符串則執(zhí)行步驟L4-51,如為第二字符串則執(zhí)行步驟L4-50,如為其他則返回步驟L4-47 ; 步驟L4-50:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),將所述狀態(tài)機(jī)的狀態(tài)設(shè)為接收狀態(tài),返回步驟L4-47 ; 步驟L4-51:將Set up數(shù)據(jù)包的解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,根據(jù)解析結(jié)果判斷指令類型是否為熱復(fù)位指令,是則執(zhí)行步驟L4-52,否則執(zhí)行步驟L4-53 ; 步驟L4-52:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將所述狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ; 步驟L4-53:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,將狀態(tài)機(jī)的狀態(tài)改為發(fā)送狀態(tài),返回步驟L4-47 ; 步驟L4-54:等待主機(jī)下發(fā)指令,當(dāng)通過USB接口接收到指令時(shí)根據(jù)SCSI協(xié)議對(duì)該指令進(jìn)行解析; 步驟L4-55:根據(jù)解析結(jié)果判斷所述接收到的指令是否為合法SCSI指令,是則執(zhí)行步驟L4-56,否則返回步驟L4-54 ; 步驟L4-56:根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為標(biāo)準(zhǔn)SCSI指令,是則執(zhí)行步驟L4-57,否則執(zhí)行步驟L4-58 ;步驟L4-57:根據(jù)標(biāo)準(zhǔn)SCSI指令進(jìn)行相應(yīng)操作,并將操作結(jié)果返回給主機(jī),返回步驟L4-54 ; 步驟L4-58:判斷數(shù)據(jù)傳輸方向,如是發(fā)送則執(zhí)行步驟L4-59,如是接收則執(zhí)行步驟L4-60 ; 步驟L4-59:將第二緩存區(qū)中的響應(yīng)數(shù)據(jù)返回給主機(jī),返回步驟L4-54 ; 步驟L4-60:將所述解析結(jié)果存儲(chǔ)到第一緩存區(qū)中,并根據(jù)所述解析結(jié)果判斷所述接收到的指令是否為熱復(fù)位指令,是則執(zhí)行步驟L4-61,否則執(zhí)行步驟L4-62 ; 步驟L4-61:設(shè)置包含復(fù)位參數(shù)的響應(yīng)數(shù)據(jù),并將其存儲(chǔ)到第二緩存區(qū)中,將數(shù)據(jù)傳輸方向設(shè)置為發(fā)送,返回步驟L4-54; 步驟L4-62:將解析結(jié)果發(fā)送給命令層進(jìn)行處理,接收處理結(jié)果并將其存儲(chǔ)到第二緩存區(qū)中,返回步驟L4-54。`
【文檔編號(hào)】G06F13/42GK103631747SQ201310585970
【公開日】2014年3月12日 申請(qǐng)日期:2013年11月20日 優(yōu)先權(quán)日:2013年11月20日
【發(fā)明者】陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
孙吴县| 唐河县| 龙口市| 常州市| 福清市| 阿拉善左旗| 泰来县| 周宁县| 乌拉特前旗| 筠连县| 齐河县| 岑巩县| 济阳县| 铜川市| 肃南| 五莲县| 蓬溪县| 海林市| 孟连| 肇东市| 林口县| 崇文区| 阿尔山市| 河源市| 公安县| 鄄城县| 威宁| 赤水市| 冕宁县| 揭西县| 土默特左旗| 达拉特旗| 凤台县| 高平市| 卓尼县| 汶上县| 荆门市| 富民县| 庆阳市| 三都| 汉中市|