>[0102]步驟112、第一處理器將第二處理器返回的應(yīng)答發(fā)送給上位機,執(zhí)行步驟115 ;
[0103]具體地,第一處理器將第二處理器返回的應(yīng)答通過USB接口以批量傳輸方式發(fā)送給上位機。
[0104]步驟113、第一處理器判斷等待時間是否超過預(yù)設(shè)時間,是則執(zhí)行步驟114,否則返回步驟109 ;
[0105]步驟114、第一處理器向上位機返回超時提示信息,執(zhí)行步驟115 ;
[0106]具體地,第一處理器通過USB接口以批量傳輸方式向上位機發(fā)送超時提示信息。
[0107]步驟115、第一處理器生成并發(fā)送包含查詢卡槽狀態(tài)指令的數(shù)據(jù)包給第二處理器,等待第二處理器返回應(yīng)答,待接收到第二處理器返回的應(yīng)答后執(zhí)行步驟116 ;
[0108]步驟116、第一處理器判斷第二處理器返回的應(yīng)答中是否包含上報標志,是則執(zhí)行步驟117,否則返回步驟103 ;
[0109]步驟117、第一處理器將第二處理器返回的應(yīng)答中的卡槽狀態(tài)上報給上位機,返回步驟103。
[0110]具體地,第一處理器通過USB接口以中斷傳輸方式將第二處理器返回的應(yīng)答中的卡槽狀態(tài)上報給上位機。
[0111]如圖3所示,第二處理器的操作流程包括:
[0112]步驟201、第二處理器進行初始化;
[0113]具體地,本實施例中,第二處理器進行初始化包括:第二處理器初始化硬件寄存器、初始化軟件標志和清空臨時緩存等操作;卡槽的狀態(tài)包括有卡和無卡。
[0114]步驟202、第二處理器判斷是否接收到第一處理器發(fā)送的數(shù)據(jù)包,是則執(zhí)行步驟203,否則重新執(zhí)行步驟202 ;
[0115]步驟203、第二處理器判斷數(shù)據(jù)包中包含的指令的類型,若為握手指令則執(zhí)行步驟204,若為查詢卡槽狀態(tài)指令則執(zhí)行步驟205,否則執(zhí)行步驟212 ;
[0116]具體地,第二處理器判斷數(shù)據(jù)包中包含的指令的類型,包括:第二處理器檢查數(shù)據(jù)包的第一個字節(jié),當數(shù)據(jù)包的第一個字節(jié)為FOh時,判定數(shù)據(jù)包中包含的指令為握手指令,當數(shù)據(jù)包的第一個字節(jié)為65h時,判定數(shù)據(jù)包中包含的指令為查詢卡槽狀態(tài)指令。
[0117]步驟204、第二處理器置位握手成功標志,并向第一處理器返回握手應(yīng)答,返回步驟 202 ;
[0118]步驟205、第二處理器檢查握手成功標志是否被置位,是則執(zhí)行步驟206,否則執(zhí)行步驟208 ;
[0119]步驟206、第二處理器查詢當前時刻卡槽的狀態(tài),向第一處理器返回包含上報標志和查詢到的卡槽狀態(tài)的應(yīng)答,記錄查詢到的卡槽狀態(tài);
[0120]步驟207、第二處理器復(fù)位握手成功標志,返回步驟202 ;
[0121]步驟208、第二處理器查詢當前時刻卡槽的狀態(tài);
[0122]步驟209、第二處理器判斷查詢到的卡槽的狀態(tài)與上一次記錄的卡槽狀態(tài)是否相同,是則執(zhí)行步驟210,否則執(zhí)行步驟211 ;
[0123]步驟210、第二處理器向第一處理器返回包含查詢到的卡槽狀態(tài)的應(yīng)答,返回步驟202 ;
[0124]步驟211、第二處理器向第一處理器返回包含上報標志和查詢到的卡槽狀態(tài)的應(yīng)答,記錄查詢到的卡槽狀態(tài),返回步驟202 ;
[0125]步驟212、第二處理器根據(jù)數(shù)據(jù)包中包含的指令執(zhí)行相應(yīng)操作,向第一處理器返回相應(yīng)應(yīng)答,返回步驟202。
[0126]進一步地,步驟203中還可以包括:
[0127]若數(shù)據(jù)包中包含的指令為設(shè)置參數(shù)指令,則第二處理器根據(jù)設(shè)置參數(shù)指令中的參數(shù)數(shù)據(jù)設(shè)置智能卡接口,并向第一處理器返回應(yīng)答,返回步驟202 ;其中,設(shè)置智能卡接口包括設(shè)置智能卡接口的1和寄存器等;
[0128]和/或若數(shù)據(jù)包中包含的指令為上電指令,則第二處理器初始化智能卡接口,給智能卡上電,接收智能卡返回的ATR(Answer To Reset,復(fù)位應(yīng)答),根據(jù)ATR設(shè)置智能卡接口和傳輸協(xié)議類型,并向第一處理器返回應(yīng)答,返回步驟202 ;其中,初始化智能卡接口包括初始化智能卡接口的1和寄存器等;設(shè)置智能卡接口包括設(shè)置智能卡接口的1和寄存器等;設(shè)置傳輸協(xié)議類型包括:當ATR中不包含預(yù)設(shè)參數(shù)、或者包含預(yù)設(shè)參數(shù)且預(yù)設(shè)參數(shù)的低半字節(jié)為第一預(yù)設(shè)值時,設(shè)置傳輸協(xié)議類型為異步半雙工字符傳輸協(xié)議(T = O),當ATR中包含預(yù)設(shè)參數(shù)且預(yù)設(shè)參數(shù)的低半字節(jié)等于第二預(yù)設(shè)值、或者包含預(yù)設(shè)參數(shù)且預(yù)設(shè)參數(shù)中包含低半字節(jié)等于第二預(yù)設(shè)值的預(yù)設(shè)參數(shù)時,設(shè)置傳輸協(xié)議類型為異步半雙工分組傳輸協(xié)議(T = I);本實施例中,預(yù)設(shè)參數(shù)具體為TD,ATR中可能包含一個或多個按順序編號的預(yù)設(shè)參數(shù),如TD1、TD2、TD3,第一預(yù)設(shè)值具體為0000b,第二預(yù)設(shè)值具體為0001b。
[0129]和/或若數(shù)據(jù)包中包含的指令為下電指令,則第二處理器復(fù)位智能卡接口模塊,給智能卡下電,并向第一處理器返回應(yīng)答,返回步驟202 ;
[0130]和/或若數(shù)據(jù)包中包含的指令為發(fā)送數(shù)據(jù)指令,則第二處理器執(zhí)行如圖4所示的流程:
[0131]步驟1-1、獲取發(fā)送數(shù)據(jù)指令中包含的APDU ;
[0132]步驟1-2、判斷傳輸協(xié)議類型,若為T = O則執(zhí)行步驟1-3,若為T = I則執(zhí)行步驟1-7 ;
[0133]步驟1-3、向智能卡發(fā)送APDU數(shù)據(jù)頭,接收智能卡返回的數(shù)據(jù);
[0134]步驟1-4、判斷智能卡返回的數(shù)據(jù)是否為預(yù)設(shè)過程字節(jié),是則執(zhí)行步驟1-9,否則執(zhí)行步驟1-5 ;
[0135]具體地,預(yù)設(shè)過程字節(jié)為0x60。
[0136]步驟1-5、判斷是否有APDU數(shù)據(jù)域需要發(fā)送,是則執(zhí)行步驟1_6,否則執(zhí)行步驟1-10 ;
[0137]步驟1-6、向智能卡發(fā)送APDU數(shù)據(jù)域,接收智能卡返回的數(shù)據(jù),執(zhí)行步驟1_10 ;
[0138]步驟1-7、向智能卡發(fā)送APDU,接收智能卡返回的數(shù)據(jù);
[0139]步驟1-8、判斷智能卡返回的數(shù)據(jù)是否為延時申請,是則執(zhí)行步驟1-9,否則執(zhí)行步驟1-10 ;
[0140]具體地,判斷智能卡返回的數(shù)據(jù)是否為延時申請,包括:檢查智能卡返回的數(shù)據(jù)的第二個字節(jié),當智能卡返回的數(shù)據(jù)的低5位為00011時,判定智能卡返回的數(shù)據(jù)為延時申請。
[0141]步驟1-9、向第一處理器發(fā)送預(yù)設(shè)類型的應(yīng)答,返回步驟202 ;
[0142]例如,向第一處理器發(fā)送應(yīng)答為80 00 00 00 00 00 01 80 00 03。
[0143]步驟1-10、根據(jù)智能卡返回的數(shù)據(jù)向第一處理器返回相應(yīng)應(yīng)答,返回步驟202。
[0144]本實施例中,第二處理器通過檢查數(shù)據(jù)包的第一個字節(jié)確定數(shù)據(jù)包中包含的指令的類型,當數(shù)據(jù)包的第一個字節(jié)為61h時,確定數(shù)據(jù)包中包含的指令為設(shè)置參數(shù)指令,當數(shù)據(jù)包的第一個字節(jié)為62h時,確定數(shù)據(jù)包中包含的指令為上電指令,當數(shù)據(jù)包的第一個字節(jié)為63h時,確定數(shù)據(jù)包中包含的指令為下電指令,當數(shù)據(jù)包的第一個字節(jié)為6fh時,確定數(shù)據(jù)包中包含的指令為發(fā)送數(shù)據(jù)指令。
[0145]實施例三
[0146]本發(fā)明實施例三在本發(fā)明實施例一的基礎(chǔ)上,提供當本發(fā)明實施例一中所述的讀卡器的第一處理器和第二處理器之間通過串口進行連接時,所述讀卡器的另外一種工作方法,所述方法包括第一處理器的操作流程和第二處理器的操作流程。
[0147]第一處理器的操作流程包括:
[0148]步驟A10、第一處理器判斷是否已完成握手操作,若已完成握手操作則執(zhí)行步驟Al I,若未完成則向第二處理器發(fā)送包含握手指令的數(shù)據(jù)包,直至接收到第二處理器返回的正確握手應(yīng)答后,執(zhí)行步驟Al I ;
[0149]步驟All、第一處理器判斷是否接收到上位機發(fā)送的數(shù)據(jù)包,是則將上位機發(fā)送的數(shù)據(jù)包發(fā)送給第二處理器,并將第二處理器返回的應(yīng)答發(fā)送給上位機,執(zhí)行步驟A12,否則直接執(zhí)行步驟A12 ;
[0150]步驟A12、第一處理器判斷串口接收標志是否被置位,是則將接收緩存中的數(shù)據(jù)發(fā)送給所述上位機,返回步驟All,否則直接返回步驟All ;
[0151]第一處理器的操作流程還包括:當?shù)谝惶幚砥鹘邮盏酱谥袛鄷r,接收第二處理器發(fā)送的最新查詢到的卡槽狀態(tài),并將接收到的卡槽狀態(tài)存放到所述接收緩存中,置位串口接收標志,退出串口中斷;
[0152]第二處理器的操作流程包括:
[0153]步驟A20、第二處理器查詢當前時刻卡槽的狀態(tài),記錄查詢到的卡槽狀態(tài);
[0154]步驟A21、第二處理器判斷是否收到第一處理器發(fā)送的數(shù)據(jù)包,是則執(zhí)行步驟A22,否則重新執(zhí)行步驟A21 ;
[0155]步驟A22、第二處理器判斷接收到的數(shù)據(jù)包中包含的指令的類型,若為握手指令則向第一處理器返回握手應(yīng)答,并發(fā)送最新查詢到的卡槽狀態(tài)給第一處理器,返回步驟A21,否則根據(jù)接收到的數(shù)據(jù)包中包含的指令執(zhí)行相應(yīng)操作,并向第一處理器返回相應(yīng)應(yīng)答,返回步驟A21 ;
[0156]第二處理器的操作流程還包括:第二處理器查詢當前時刻卡槽的狀態(tài),并判斷與上一次記錄的卡槽狀態(tài)是否相同,若相同則返回步驟A21,若不相同則記錄查詢到的卡槽狀態(tài),發(fā)送最新查詢到的卡槽狀態(tài)給上位機,返回步驟A21。
[0157]實施例四
[0158]本發(fā)明實施例四在本發(fā)明實施例三的基礎(chǔ)上,提供當本發(fā)明實施例一中所述的讀卡器的第一處理器和第二處理器之間通過串口進行連接時,所述讀卡器的另外一種具體工作方法,所述方法包括第一處理器的操作流程和第二處理器的操作流程。
[0159]如圖5所示,第一處理器的操作流程包括:
[0160]步驟301、第一處理器進行初始化;
[0161]具體地,第一處理器進行初始化包括:第一處理器初始化硬件寄存器、初始化軟件標志和清空臨時緩存等操作。
[0162]步驟302、第一處理器判斷USB枚舉是否成功,是則執(zhí)行步驟303,否則重新執(zhí)行步驟 302 ;
[0163]步驟303、第一處理器使能串口中斷,檢查握手標志是否被置位,是則執(zhí)行步驟304,否則執(zhí)行步驟307 ;
[0164]具體地,握手標志當?shù)谝惶幚砥鹘邮盏缴衔粰C發(fā)送的SetConfigurat1n指令并執(zhí)行成功時被置位。
[0165]步驟304、第一處理器通過串口向第二處理器發(fā)送包含握手指令的數(shù)據(jù)包,等待第二處理器返回握手應(yīng)答;
[0166]步驟305、第一處理器判斷是否接收到正確的握手應(yīng)答,是則執(zhí)行步驟306,否則返回步驟304 ;
[0167]步驟306、第一處理器復(fù)位握手標志,執(zhí)行步驟307 ;
[0168]步驟307、第一處理器判斷是否接收到上位機發(fā)送的數(shù)據(jù)包,是則執(zhí)行步驟308,否則執(zhí)行步驟315;
[0169]步驟308、第一處理器將上位機發(fā)送的數(shù)據(jù)包通過串口發(fā)送