專利名稱:一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通訊技術(shù)領(lǐng)域,特別涉及一種增強非接觸卡與讀卡器穩(wěn)定性的方法。
背景技術(shù):
非接觸卡是一種新型的智能卡,結(jié)合了射頻技術(shù)和IC卡技術(shù),其功能與接觸ID卡、IC卡一樣,只是它無需電源,由接收天線從讀卡器磁場感應(yīng)取電,并工作運算數(shù)據(jù),反饋到讀卡器。與接觸式IC卡相比較非接觸卡具有可靠性高、操作方便、防沖突、適合多種應(yīng)用、加密性能好等優(yōu)點,因此被廣泛使用。發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺點現(xiàn)有的非接觸讀卡器與非接觸卡之間的通訊容易受到外來射頻的干擾,穩(wěn)定性較差,且當(dāng)雙方接收到錯誤 數(shù)據(jù)幀后會直接進行錯誤處理,如報錯、重發(fā)等,使得在干擾頻繁的情況下多次接收數(shù)據(jù),成功率低。
發(fā)明內(nèi)容
鑒于現(xiàn)有技術(shù)的不足,為了有效的解決現(xiàn)有技術(shù)的不足,本發(fā)明提出一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法。本發(fā)明方法是通過下述技術(shù)方案實現(xiàn)的一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法,包括步驟a :讀卡器啟動超時計時和接收器,等待接收卡片返回的數(shù)據(jù);步驟b :判斷是否超時,是則關(guān)閉接收器,向上位機發(fā)送超時錯誤提示,否則執(zhí)行步驟c ;步驟c :判斷是否檢測到副載波,是則停止超時計時,接收數(shù)據(jù)幀,執(zhí)行步驟d,否則返回執(zhí)行步驟b,其中,所述副載波為讀卡器檢測到的外界的載波信號;步驟d :判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則執(zhí)行步驟e ;步驟e :判斷所述接收到的數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否均正確,是則執(zhí)行步驟h,否則執(zhí)行步驟f;步驟f :判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則執(zhí)行步驟g ;步驟g :判斷所述接收到的數(shù)據(jù)幀是否完整,是則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤提示,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b ;步驟h:判斷所述接收到的數(shù)據(jù)幀是否存在其他錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則關(guān)閉接收器,將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機。其中,所述步驟f可替換為判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟g,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b ;
相應(yīng)地,所述步驟g可替換為判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤的提示;所述幀錯誤包括未接收到數(shù)據(jù)幀或接收到的數(shù)據(jù)幀的幀頭錯誤或幀尾錯誤或接收到的數(shù)據(jù)幀為空幀;所述判斷所述接收到的數(shù)據(jù)幀是否完整具體為判斷所述接收到的數(shù)據(jù)幀的位數(shù)是否為8的整數(shù)倍,若為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀完整,若不為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀不完整;所述其他錯誤包括數(shù)據(jù)幀的長度超過協(xié)議規(guī)定的長度或少于協(xié)議規(guī)定的最短長度;所述向上位機發(fā)送超時錯誤提示具體為以USB中斷管道方式向上位機發(fā)送超時錯誤提示;
所述向上位機發(fā)送傳輸錯誤提示具體為以USB中斷管道方式向上位機發(fā)送傳輸錯誤提不;所述將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機具體為將接收到的卡片返回的數(shù)據(jù)以USB中斷管道方式發(fā)送給上位機;所述讀卡器啟動超時計時和接收器之前還包括讀卡器上電初始化,待接收到有效指令后判斷指令類型若所述有效指令為通知尋卡指令則執(zhí)行尋卡操作并判斷尋卡操作是否成功,若成功則向卡片發(fā)送請求選擇應(yīng)答指令,并在接收到卡片返回的選擇應(yīng)答響應(yīng)時將所述選擇應(yīng)答指令發(fā)送給上位機,將卡片在射頻場響應(yīng)以USB中斷管道方式通知上位機;若不成功則將卡片離開射頻場響應(yīng)以USB中斷管道方式通知上位機;若所述有效指令為APDU指令則按指定格式向卡片發(fā)送所述APDU指令,執(zhí)行所述步驟a ;若所述有效指令為擴展指令則執(zhí)行所述擴展指令并將操作結(jié)果以USB中斷管道方式發(fā)送給上位機。一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法,包括步驟A :讀卡器啟動超時計時和接收器,等待接收卡片返回的數(shù)據(jù);步驟B :判斷是否超時,是則關(guān)閉接收器,向上位機發(fā)送超時錯誤提示,否則執(zhí)行步驟C ;步驟C :判斷是否檢測到副載波,是則停止超時計時,接收數(shù)據(jù)幀,執(zhí)行步驟D,否則返回執(zhí)行步驟B,其中,所述副載波為讀卡器檢測到的外界的載波信號;步驟D :判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則執(zhí)行步驟E ;步驟E :判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則執(zhí)行步驟F ;步驟F :判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟G,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B ;步驟G :判斷所述接收到的數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否均正確,是則執(zhí)行步驟H,否則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤提示;步驟H :判斷數(shù)據(jù)幀是否存在其他錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則關(guān)閉接收器,將關(guān)閉接收器,將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機;其中,所述步驟E可替換為判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟F,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B ;相應(yīng)地,所述步驟F可替換為判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤的提示;所述幀錯誤包括未接收到數(shù)據(jù)幀或接收到的數(shù)據(jù)幀的幀頭錯誤或幀尾錯誤或接 收到的數(shù)據(jù)幀為空幀;所述判斷所述接收到的數(shù)據(jù)幀是否完整具體為判斷所述接收到的數(shù)據(jù)幀的位數(shù)是否為8的整數(shù)倍,若為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀完整,若不為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀不完整;所述其他錯誤包括數(shù)據(jù)幀的長度超過協(xié)議規(guī)定的長度或少于協(xié)議規(guī)定的最短長度;所述向上位機發(fā)送超時錯誤提示具體為以USB中斷管道方式向上位機發(fā)送超時錯誤提示;所述向上位機發(fā)送傳輸錯誤提示具體為以USB中斷管道方式向上位機發(fā)送傳輸錯誤提不;所述將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機具體為將接收到的卡片返回的數(shù)據(jù)以USB中斷管道方式發(fā)送給上位機;所述讀卡器啟動超時計時和接收器之前還包括讀卡器上電初始化,待接收到有效指令后判斷指令類型若所述有效指令為通知尋卡指令則執(zhí)行尋卡操作并判斷尋卡操作是否成功,若成功則向卡片發(fā)送請求選擇應(yīng)答指令,并在接收到卡片返回的選擇應(yīng)答響應(yīng)時將所述選擇應(yīng)答指令發(fā)送給上位機,將卡片在射頻場響應(yīng)以USB中斷管道方式通知上位機;若不成功則將卡片離開射頻場響應(yīng)以USB中斷管道方式通知上位機;若所述有效指令為APDU指令則按指定格式向卡片發(fā)送所述APDU指令,執(zhí)行所述步驟A ;若所述有效指令為擴展指令則執(zhí)行所述擴展指令并將操作結(jié)果以USB中斷管道方式發(fā)送給上位機。本發(fā)明方法的有益效果在于對比已有技術(shù),本發(fā)明方法能夠?qū)崿F(xiàn)讀卡器在接收數(shù)據(jù)過程中識別煩擾、濾除干擾,具有提高通訊穩(wěn)定性的效果。
為了更清楚的說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本發(fā)明實施例一提供的一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法流程圖;圖2為本發(fā)明實施例一提供的另一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法流程圖;圖3為本發(fā)明實施例二提供的一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法流程圖;圖4為本發(fā)明實施例二提供的 另一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法流程圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。—種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法,當(dāng)接收方在接收到數(shù)據(jù)幀且校驗數(shù)據(jù)(如CRC、奇偶校驗等)報錯時增加判斷長度字節(jié)以及判斷尾部是否含有不完整字節(jié),以此來識別此數(shù)據(jù)幀是否為干擾或被煩擾到的數(shù)據(jù)幀,當(dāng)識別出數(shù)據(jù)幀為干擾時濾除接收到的數(shù)據(jù)幀,等待接收正確的數(shù)據(jù)幀;當(dāng)識別出數(shù)據(jù)幀為被干擾到的數(shù)據(jù)幀時進行報錯或重發(fā)等一般出錯處理流程。例如,若讀卡器接收到具有以下錯誤的數(shù)據(jù)幀則拋棄錯誤的數(shù)據(jù)幀,繼續(xù)超時計時I、接收到的數(shù)據(jù)幀為空幀;2、接收到的數(shù)據(jù)幀頭或幀尾中代表數(shù)據(jù)幀起始或結(jié)束的數(shù)據(jù)不符合協(xié)議的規(guī)定;3、接收到的數(shù)據(jù)幀奇偶校驗和/或CRC校驗錯誤且數(shù)據(jù)幀長度小于4個字節(jié);4、接收到的數(shù)據(jù)幀奇偶校驗和/或CRC校驗錯誤且數(shù)據(jù)位數(shù)不是8的整數(shù)倍;若讀卡器接收到的數(shù)據(jù)滿足以下條件,則以USB中斷管道方式向上位機發(fā)送傳輸錯誤提不5、接收到的數(shù)據(jù)幀不為空幀;6、接收到的數(shù)據(jù)幀頭或幀尾中代表數(shù)據(jù)幀起始或結(jié)束的數(shù)據(jù)符合協(xié)議的規(guī)定;7、接收到的數(shù)據(jù)幀奇偶校驗和/或CRC校驗錯誤;8、接收到的數(shù)據(jù)幀長度不小于4個字節(jié)且數(shù)據(jù)位為8的整數(shù)倍。實施例一參見圖1,本發(fā)明實施例提供了一種增強非接觸卡與讀卡器通訊穩(wěn)定性的具體實現(xiàn)方法,所述方法具體為讀卡器上電初始化后等待接收上位機發(fā)送的指令;本實施例中,讀卡器接收從緩沖區(qū)中以USB中斷管道方式發(fā)送的指令,如果指令的第一字節(jié)在預(yù)設(shè)范圍內(nèi)(0x01—0x03),則為收到了有效指令,如果讀卡器未接收到或接收到的指令的第一字節(jié)不滿足預(yù)設(shè)值,則收到的指令不是有效指令;讀卡器接收到有效指令后執(zhí)行以下操作-S ^ ] Jt .V / 4 J—I (
〔0076〕 οι^οδ§ ^1^ ^Ξα^ SCIsnhs_,^M^^l味鎇 >3,詢莒#誅濃淳,洚^味鎇 S7 ^
〔0077〕 斛書,UIDl ^ 44Jl·請誅沭lasl降畫沛燁鈽?gòu)?amp;^沐咎釩1旰昆鼐駕燁,SCI ^UIDl昆效餿喵請。
〔0078〕 味鎇A3 :哥^沐鈽陳&燁鈽oxsox7PUIDrBBCl-^HPCRCl降鉺3燁鈽曲,進繹跏詢輒洚埋誅沐陡回s[t_ SI CRCl昆鋮1菡矣逾_,跏莒洚^味鎇>4,詢莒#誅濃淳,洚§ ;
〔0079UΚΦ, CRCl 餿銥簦涵,SItiiKilmFif孫。
〔0080〕 味鎇A4:翁鋮1 Λ#τ_<1ΙΤ畫沛燁鈽0840陳匈此陸犍,進繹陸犍雒湘跏詢^0&0,跏莒#誅鉺鈺,_窈誅沐昆*萊谿漁^I,翁窈掛繈7Φ岡書,洚匈味鎇
SW-^MSl>^;
〔0081〕 PS^^^M-0ss I 0i^aiiM^s^_#r_^UIDl 昆詠輯 4->喵請燁鈽。
〔0082〕味鎇 A5 0x95 苦 0x20
回s[t_ UID2 SC2昆||川菡_,跏莒洚^味鎇>6,詢莒#誅濃淳,洚^味鎇S7 ^
〔0083〕κ , UID2 ^ 4降畫沛燁鈽?gòu)?amp;^沐咎釩1旰昆鼐^燁,SC2 ^UID2S效餿喵請。
〔0084〕 味鎇Α6 :哥^沐鈽陳&燁鈽0X950X7PUID5°BBC2^CRC2降鉺3燁鈽曲,進繹跏詢輒洚埋誅沐陡回s[t_ S2 苦 CRC2s,
§ ;
〔0085〕 κ . CRC2^效餿銥簦涵,S2tiiKilmFJF孫。
〔0086〕 味鎇A7:翁鋮π Λ#τ_<1ΙΤ畫沛燁鈽0840陳匈此陸犍,進繹陸犍雒湘跏詢^0&0,跏莒#誅鉺鈺,_窈誅沐昆*萊谿漁^2,翁窈誅昆誅_逾_鉺掛繈茗岡書,洚匈味鎇
SW-^MSl>α;
〔0087〕)Ν容S, *sss 2 UIDlS飾 3->喵請燁鈽此UID2SW>^4->喵請燁鈽昆降φ。
〔0088〕味鎇 AS 0x97 苦 0x20
9回的包含WD3和BBC3的第四響應(yīng),是則執(zhí)行步驟A9,否則尋卡失敗,執(zhí)行步驟107 ;其中,UID3為4字節(jié)卡號段的一組固定數(shù)據(jù)或由卡片動態(tài)產(chǎn)生的隨機數(shù),BBC3為UID3的校驗字節(jié)。步驟A9 :向卡片發(fā)送由數(shù)據(jù)(^97、(^70、瓜03、8803和0^3組成的數(shù)據(jù)包,判斷是否接收到卡片返回的包含S3和CRC3的第二確認信息,是則執(zhí)行步驟A10,否則尋卡失敗,執(zhí)行步驟107 ;其中,CRC3為校驗檢測碼,S3標識通信開始。步驟A10:將第三確認信息與固定數(shù)據(jù)0x40進行與運算,判斷運算結(jié)果是否為0x00,是則尋卡成功,且該卡片的串聯(lián)級別為3,將該卡的卡號信息放在緩沖區(qū)中,執(zhí)行步驟103,否則尋卡失敗,執(zhí)行步驟107。 具體的,當(dāng)卡片串聯(lián)級別為3時所述該卡的卡號信息為WDl的后3個字節(jié)數(shù)據(jù)、UID2的后3個字節(jié)數(shù)據(jù)以及WD3的全部4字節(jié)數(shù)據(jù)的組合。具體地,對于B型卡,步驟102具體為步驟則向卡片發(fā)送8型請求指令(^05、(^00、(^08、0^(2字節(jié));步驟B2 :判斷是否接收到卡片返回的B型請求響應(yīng)0xld、PUPI (4字節(jié))、0x00、0x08、0x01、0x00、CRC(2字節(jié)),是則尋卡成功,執(zhí)行步驟103,否則尋卡失敗,執(zhí)行步驟107。其中,PUPI表不卡號信息。步驟103 :向卡片發(fā)送請求選擇應(yīng)答指令;具體的,在本實施例中,請求選擇應(yīng)答指令為E0、80、CRC。步驟104 :判斷是否接收到卡片返回的選擇應(yīng)答響應(yīng),是則執(zhí)行步驟105,否則執(zhí)行步驟107 ;步驟105 :將選擇應(yīng)答響應(yīng)以USB中斷管道方式發(fā)送給上位機;步驟106 :將卡片在射頻場響應(yīng)以USB中斷管道方式通知上位機,等待接收指令,且在接收到有效指令后執(zhí)行步驟101 ;步驟107 :將卡片離開射頻場相應(yīng)以USB中斷管道方式通知上位機,等待接收指令,且在接收到有效指令后執(zhí)行步驟101 ;步驟108 :按指定格式向卡片發(fā)送接收到的APDU指令;具體的,在本實施例中,所述指定格式為PCB、NAD、CID、APDU指令、CRC,其中PCB為協(xié)議控制字節(jié),NAD為節(jié)點地址,CID為卡標識符,CRC為校驗檢測碼。步驟109 :啟動超時計時和接收器,等待接收卡片返回的數(shù)據(jù);步驟110 :判斷是否超時,是則執(zhí)行步驟111,否則執(zhí)行步驟112 ;步驟111 :關(guān)閉接收器,以USB中斷管道方式向上位機發(fā)送超時錯誤提示,等待接收指令,且在接收到有效指令后執(zhí)行步驟101 ;步驟112 :判斷是否檢測到副載波,是則執(zhí)行步驟113,否則返回執(zhí)行步驟110 ;其中,在本實施例中,定義讀卡器向外發(fā)送的信號為載波,讀卡器檢測到的外界信號為副載波。步驟113 :停止超時計時,接收數(shù)據(jù)幀;步驟114 :判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,是則執(zhí)行步驟121,否則執(zhí)行步驟 115 ;
具體的,在本實施例中,判斷接收到的數(shù)據(jù)幀是否存在幀錯誤包括,判斷是否接收到數(shù)據(jù)幀,判斷數(shù)據(jù)幀的幀頭是否錯誤、判斷幀尾是否錯誤以及判斷接收到的數(shù)據(jù)幀是否為空幀,若上述四個判斷中至少有一個判斷結(jié)果為是則接收到的數(shù)據(jù)幀錯誤,若上述四個判斷的判斷結(jié)果均為否則接收到的數(shù)據(jù)幀正確。幀頭錯誤或幀尾錯誤具體為幀頭或幀尾的代表數(shù)據(jù)幀起始或結(jié)束的數(shù)據(jù)不符合協(xié)議的規(guī)定;空幀具體為只包含幀頭和幀尾沒有數(shù)據(jù)部分的數(shù)據(jù)幀;其中,在本實施例中0x10代表幀頭,0x01代表幀尾。步驟115 :判斷接收到的數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否正確,是則執(zhí)行步驟119,否則執(zhí)行步驟116;步驟116 :判斷數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則執(zhí)行步驟121,否則執(zhí)行步驟 117 ;優(yōu)選地,在本實施例中,所述預(yù)設(shè)字節(jié)為4字節(jié)。
步驟117 :判斷數(shù)據(jù)幀是否完整,是則執(zhí)行步驟118,否則執(zhí)行步驟121 ;具體地,在本實施例中,所述判斷數(shù)據(jù)幀是否完整具體為判斷數(shù)據(jù)幀的位數(shù)是否為8的整數(shù)倍,若為8的整數(shù)倍則數(shù)據(jù)幀完整,若不為8的整數(shù)倍則數(shù)據(jù)幀不完整。步驟118 :關(guān)閉接收器,以USB中斷管道方式向上位機發(fā)送傳輸錯誤提示,等待接收指令,且在接收到有效指令后執(zhí)行步驟101 ;步驟119 :判斷數(shù)據(jù)幀是否存在其他錯誤,是則執(zhí)行步驟121,否則執(zhí)行步驟120 ;其中,所述其它錯誤如數(shù)據(jù)幀長度超過協(xié)議規(guī)定的長度或少于協(xié)議規(guī)定的最短長度。步驟120 :關(guān)閉接收器,將接收到的卡片返回的數(shù)據(jù)以USB中斷管道方式發(fā)送給上位機,等待接收指令,且在接收到有效指令后執(zhí)行步驟101 ;步驟121 :拋棄錯誤的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟110 ;步驟122 :根據(jù)接收到的指令執(zhí)行相應(yīng)操作,并將操作結(jié)果以USB中斷管道方式發(fā)送給上位機。本實施例以請求亮燈指令為例,讀卡器接收到上位機發(fā)送的請求亮燈指令后,進行亮燈操作,并將操作成功信息或操作失敗信息以USB中斷管道方式發(fā)送給上位機。操作成功信息為0x00,操作失敗信息為0x01。參見圖2,圖I中的步驟116和步驟117還可以替換為步驟116丨和步驟117丨,具體如下步驟116丨:判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟117丨,否則執(zhí)行步驟121 ;步驟117丨:判斷數(shù)據(jù)幀的的長度是否小于預(yù)設(shè)字節(jié),是則執(zhí)行步驟121,否則執(zhí)行步驟118 ;優(yōu)選地,在本實施例中,所述預(yù)設(shè)字節(jié)為4字節(jié)。實施例二參見圖3,本發(fā)明實施例提供了一種增強非接觸卡與讀卡器通訊穩(wěn)定性的具體實現(xiàn)方法,所述方法具體為讀卡器上電初始化后等待接收上位機發(fā)送的指令;本實施例中,讀卡器接收從緩沖區(qū)中以USB中斷管道方式發(fā)送的指令,如果指令的第一字節(jié)在預(yù)設(shè)范圍內(nèi)(0x01—0x03),則為收到了有效指令,如果讀卡器未接收到或接收到的指令的第一字節(jié)不滿足預(yù)設(shè)值,則收到的指令不是有效指令;讀卡器接收到有效指令后執(zhí)行以下操作步驟201 :判斷指令類型,若為通知尋卡指令則執(zhí)行步驟202,若為APDU指令則執(zhí)行步驟208,若為擴展指令則執(zhí)行步驟222 ;優(yōu)選地,在本實施例中,讀卡器判斷接收到的指令的第一個字節(jié),若為0x01則所述指令為通知尋卡指令,若為0x02則所述指令為APDU指令,若為0x03則所述指令擴展指令,其中,擴展指令可以為開射頻場指令、關(guān)射頻場指令、開燈指令、關(guān)燈指令、蜂鳴指令等。步驟202 :執(zhí)行尋卡操作并判斷尋卡操作是否成功,是則執(zhí)行步驟203,否則執(zhí)行步驟207 ;具體地,對于A型卡,步驟202具體為 步驟Al :向卡片發(fā)送第一請求指令0x52,判斷是否接收到卡片做出的第一響應(yīng)0x02、0x00,是則執(zhí)行步驟A2,否則尋卡失敗,執(zhí)行步驟207 ;具體的,所述第一響應(yīng)為預(yù)設(shè)數(shù)據(jù),與第一請求指令相對應(yīng),并不限于本實施例提供的數(shù)據(jù)。步驟A2 :向卡片發(fā)送由數(shù)據(jù)0x93、0x20組成的數(shù)據(jù)包,判斷是否接收到包含WDl和BBCl的第二響應(yīng),是則執(zhí)行步驟A3,否則尋卡失敗,執(zhí)行步驟207 ;其中,UIDl為4字節(jié)卡號段的一組固定數(shù)據(jù)或由卡片動態(tài)產(chǎn)生的隨機數(shù),BBCl為UIDl的校驗字節(jié)。步驟A3 :向卡片發(fā)送由數(shù)據(jù)0x93、0x70、HDl、BBCl和CRCl組成的數(shù)據(jù)包,判斷是否接收到卡片返回的包含SI和CRCl的第一確認信息,是則執(zhí)行步驟A4,否則尋卡失敗,執(zhí)行步驟207 ;其中,CRCl為校驗檢測碼,SI標識通信開始。步驟A4:將第一確認信息與固定數(shù)據(jù)0x40進行與運算,判斷運算結(jié)果是否為0x00,是則尋卡成功,且該卡片的串聯(lián)級別為1,將該卡的卡號信息放在緩沖區(qū)中,執(zhí)行步驟203,否則執(zhí)行步驟A5 ;具體的,當(dāng)卡片串聯(lián)級別為I時所述該卡的卡號信息為WDl的全部4個字節(jié)數(shù)據(jù)。步驟A5 :向卡片發(fā)送由數(shù)據(jù)0x95和0x20組成的數(shù)據(jù)包,判斷是否接收到卡片返回的包含WD2和BBC2的第三響應(yīng),是則執(zhí)行步驟A6,否則尋卡失敗,執(zhí)行步驟207 ;其中,UID2為4字節(jié)卡號段的一組固定數(shù)據(jù)或由卡片動態(tài)產(chǎn)生的隨機數(shù),BBC2為UID2的校驗字節(jié)。步驟A6 :向卡片發(fā)送由數(shù)據(jù)(^95、(^70、瓜02、8802和0^2組成的數(shù)據(jù)包,判斷是否接收到卡片返回的包含S2和CRC2的第二確認信息,是則執(zhí)行步驟A7,否則尋卡失敗,執(zhí)行步驟207 ;其中,CRC2為校驗檢測碼,S2標識通信開始。步驟A7:將第二確認信息與固定數(shù)據(jù)0x40進行與運算,判斷運算結(jié)果是否為0x00,是則尋卡成功,且該卡片的串聯(lián)級別為2,將該卡的卡號信息放在緩沖區(qū)中,執(zhí)行步驟203,否則執(zhí)行步驟A8 ;具體的,當(dāng)卡片串聯(lián)級別為2時所述該卡的卡號信息為WDl的后3個字節(jié)數(shù)據(jù)與WD2的全部4個字節(jié)數(shù)據(jù)的組合。步驟AS :向卡片發(fā)送由數(shù)據(jù)0x97和0x20組成的數(shù)據(jù)包,判斷是否接收到卡片返回的包含WD3和BBC3的第四響應(yīng),是則執(zhí)行步驟A9,否則尋卡失敗,執(zhí)行步驟207 ;其中,UID3為4字節(jié)卡號段的一組固定數(shù)據(jù)或由卡片動態(tài)產(chǎn)生的隨機數(shù),BBC3為UID3的校驗字節(jié)。步驟A9 :向卡片發(fā)送由數(shù)據(jù)(^97、(^70、瓜03、8803和0^3組成的數(shù)據(jù)包,判斷是否接收到卡片返回的包含S3和CRC3的第二確認信息,是則執(zhí)行步驟A10,否則尋卡失敗,執(zhí)行步驟207 ;其中,CRC3為校驗檢測碼,S3標識通信開始。
步驟A10:將第三確認信息與固定數(shù)據(jù)0x40進行與運算,判斷運算結(jié)果是否為0x00,是則尋卡成功,且該卡片的串聯(lián)級別為3,將該卡的卡號信息放在緩沖區(qū)中,執(zhí)行步驟203,否則尋卡失敗,執(zhí)行步驟207。具體的,當(dāng)卡片串聯(lián)級別為3時所述該卡的卡號信息為WDl的后3個字節(jié)數(shù)據(jù)、UID2的后3個字節(jié)數(shù)據(jù)以及WD3的全部4字節(jié)數(shù)據(jù)的組合。具體地,對于B型卡,步驟202具體為步驟則向卡片發(fā)送8型請求指令(^05、(^00、(^08、0^(2字節(jié));步驟B2 :判斷是否接收到卡片返回的B型請求響應(yīng)0xld、PUPI (4字節(jié))、0x00、0x08、0x01、0x00、CRC(2字節(jié)),是則尋卡成功,執(zhí)行步驟203,否則尋卡失敗,執(zhí)行步驟207。其中,PUPI表不卡號信息。步驟203 :向卡片發(fā)送請求選擇應(yīng)答指令;具體的,在本實施例中,請求選擇應(yīng)答指令為E0、80、CRC。步驟204 :判斷是否接收到卡片返回的選擇應(yīng)答響應(yīng),是則執(zhí)行步驟205,否則執(zhí)行步驟207 ;步驟205 :將選擇應(yīng)答響應(yīng)以USB中斷管道方式發(fā)送給上位機;步驟206 :將卡片在射頻場響應(yīng)以USB中斷管道方式通知上位機,等待接收指令,且在接收到有效指令后執(zhí)行步驟201 ;步驟207 :將卡片離開射頻場相應(yīng)以USB中斷管道方式通知上位機,等待接收指令,且在接收到有效指令后執(zhí)行步驟201 ;步驟208 :按指定格式向卡片發(fā)送接收到的APDU指令;具體的,在本實施例中,所述指定格式為PCB、NAD、CID、APDU指令、CRC,其中PCB為協(xié)議控制字節(jié),NAD為節(jié)點地址,CID為卡標識符,CRC為校驗檢測碼。步驟209 :啟動超時計時和接收器,等待接收卡片返回的數(shù)據(jù);步驟210 :判斷是否超時,是則執(zhí)行步驟211,否則執(zhí)行步驟212 ;步驟211 :關(guān)閉接收器,以USB中斷管道方式向上位機發(fā)送超時錯誤提示,等待接收指令,且在接收到有效指令后執(zhí)行步驟201 ;步驟212 :判斷是否檢測到副載波,是則執(zhí)行步驟213,否則返回執(zhí)行步驟210 ;其中,在本實施例中,定義讀卡器向外發(fā)送的信號為載波,讀卡器檢測到的外界信號為副載波。步驟213 :停止超時計時,接收數(shù)據(jù)幀;
步驟214 :判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,是則執(zhí)行步驟221,否則執(zhí)行步驟 215 ;判斷接收到的數(shù)據(jù)幀是否存在幀錯誤包括,判斷是否接收到數(shù)據(jù)幀,判斷數(shù)據(jù)幀的幀頭是否錯誤、判斷幀尾是否錯誤以及判斷接收到的數(shù)據(jù)幀是否為空幀,若上述四個判斷中至少有一個判斷結(jié)果為是則接收到的數(shù)據(jù)幀錯誤,若上述四個判斷的判斷結(jié)果均為否則接收到的數(shù)據(jù)幀正確。幀頭錯誤或幀尾錯誤如幀頭或幀尾中代表數(shù)據(jù)幀起始或結(jié)束的數(shù)據(jù)不符合協(xié)議的規(guī)定;空幀為只包含幀頭和幀尾沒有數(shù)據(jù)部分的數(shù)據(jù)幀,具體地,在本實施例中0x10代表幀頭,0x01代表幀尾。步驟215:判斷數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則執(zhí)行步驟221,否則執(zhí)行步驟 216 ;優(yōu)選地,在本實施例中,所述預(yù)設(shè)字節(jié)為4字節(jié)。 步驟216 :判斷數(shù)據(jù)幀是否完整,是則執(zhí)行步驟217,否則執(zhí)行步驟221 ;具體地,在本實施例中,所述判斷數(shù)據(jù)幀是否完整為判斷數(shù)據(jù)幀的位數(shù)是否為8的整數(shù)倍,若為8的整數(shù)倍則數(shù)據(jù)幀完整,若不為8的整數(shù)倍則數(shù)據(jù)幀不完整。步驟217 :判斷接收到的數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否正確,是則執(zhí)行步驟219,否則執(zhí)行步驟218 ;步驟218 :關(guān)閉接收器,以USB中斷管道方式向上位機發(fā)送傳輸錯誤提示,等待接收指令,且在接收到有效指令后執(zhí)行步驟201 ;步驟219 :判斷數(shù)據(jù)幀是否存在其他錯誤,是則執(zhí)行步驟221,否則執(zhí)行步驟220 ;其中,所述其它錯誤如數(shù)據(jù)幀長度超過協(xié)議規(guī)定的長度或少于協(xié)議規(guī)定的最短長度。步驟220 :關(guān)閉接收器,將接收到的卡片返回的數(shù)據(jù)以USB中斷管道方式發(fā)送給上位機,等待接收指令,且在接收到有效指令后執(zhí)行步驟201 ;步驟221 :拋棄錯誤的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟210 ;步驟222 :根據(jù)接收到的指令執(zhí)行相應(yīng)操作,并將操作結(jié)果以USB中斷管道方式發(fā)送給上位機。本實施例以請求亮燈指令為例,讀卡器接收到上位機發(fā)送的請求亮燈指令后,進行亮燈操作,并將操作成功或操作失敗信息以USB中斷管道方式發(fā)送給上位機。操作成功信息為0x00,操作失敗信息為0x01。參見圖4,步驟215和步驟216還可以替換為步驟215 ^和步驟2W,具體如下步驟215':判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟216 ',否則執(zhí)行步驟221 ;步驟216丨:判斷數(shù)據(jù)幀的的長度是否小于預(yù)設(shè)字節(jié),是則執(zhí)行步驟221,否則執(zhí)行步驟217 ;優(yōu)選地,在本實施例中,所述預(yù)設(shè)字節(jié)為4字節(jié)。以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準。
權(quán)利要求
1.一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法,其特征在于,包括 步驟a :讀卡器啟動超時計時和接收器,等待接收卡片返回的數(shù)據(jù); 步驟b :判斷是否超時,是則關(guān)閉接收器,向上位機發(fā)送超時錯誤提示,否則執(zhí)行步驟c ; 步驟c :判斷是否檢測到副載波,是則停止超時計時,接收數(shù)據(jù)幀,執(zhí)行步驟山否則返回執(zhí)行步驟b,其中,所述副載波為讀卡器檢測到的外界的載波信號; 步驟d :判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則執(zhí)行步驟e ; 步驟e :判斷所述接收到的數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否均正確,是則執(zhí)行步驟h,否則執(zhí)行步驟f; 步驟f :判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則執(zhí)行步驟g ; 步驟g :判斷所述接收到的數(shù)據(jù)幀是否完整,是則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤提示,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b ; 步驟h :判斷所述接收到的數(shù)據(jù)幀是否存在其他錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則關(guān)閉接收器,將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述步驟f替換為判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟g,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b; 相應(yīng)地,所述步驟g替換為判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟b,否則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤的提不。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,所述幀錯誤包括未接收到數(shù)據(jù)幀或接收到的數(shù)據(jù)幀的幀頭錯誤或幀尾錯誤或接收到的數(shù)據(jù)幀為空幀。
4.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,所述判斷所述接收到的數(shù)據(jù)幀是否完整具體為判斷所述接收到的數(shù)據(jù)幀的位數(shù)是否為8的整數(shù)倍,若為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀完整,若不為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀不完整。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述其他錯誤包括數(shù)據(jù)幀的長度超過協(xié)議規(guī)定的長度或少于協(xié)議規(guī)定的最短長度。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于 所述向上位機發(fā)送超時錯誤提示具體為以USB中斷管道方式向上位機發(fā)送超時錯誤提不; 所述向上位機發(fā)送傳輸錯誤提示具體為以USB中斷管道方式向上位機發(fā)送傳輸錯誤提不; 所述將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機具體為將接收到的卡片返回的數(shù)據(jù)以USB中斷管道方式發(fā)送給上位機。
7.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述讀卡器啟動超時計時和接收器之前還包括讀卡器上電初始化,待接收到有效指令后判斷指令類型 若所述有效指令為通知尋卡指令則執(zhí)行尋卡操作并判斷尋卡操作是否成功,若成功則向卡片發(fā)送請求選擇應(yīng)答指令,并在接收到卡片返回的選擇應(yīng)答響應(yīng)時將所述選擇應(yīng)答指令發(fā)送給上位機,將卡片在射頻場響應(yīng)以USB中斷管道方式通知上位機;若不成功則將卡片離開射頻場響應(yīng)以USB中斷管道方式通知上位機; 若所述有效指令為APDU指令則按指定格式向卡片發(fā)送所述APDU指令,執(zhí)行所述步驟a ; 若所述有效指令為擴展指令則執(zhí)行所述擴展指令并將操作結(jié)果以USB中斷管道方式發(fā)送給上位機。
8.一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法,其特征在于包括 步驟A :讀卡器啟動超時計時和接收器,等待接收卡片返回的數(shù)據(jù); 步驟B :判斷是否超時,是則關(guān)閉接收器,向上位機發(fā)送超時錯誤提示,否則執(zhí)行步驟C ; 步驟C :判斷是否檢測到副載波,是則停止超時計時,接收數(shù)據(jù)幀,執(zhí)行步驟D,否則返回執(zhí)行步驟B,其中,所述副載波為讀卡器檢測到的外界的載波信號; 步驟D :判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則執(zhí)行步驟E ; 步驟E :判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則執(zhí)行步驟F ; 步驟F :判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟G,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B ; 步驟G :判斷所述接收到的數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否均正確,是則執(zhí)行步驟H,否則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤提示; 步驟H :判斷數(shù)據(jù)幀是否存在其他錯誤,是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則關(guān)閉接收器,將關(guān)閉接收器,將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述步驟E替換為判斷所述接收到的數(shù)據(jù)幀是否完整,是則執(zhí)行步驟F,否則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B; 相應(yīng)地,所述步驟F替換為判斷所述接收到的數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),是則拋棄所述接收到的數(shù)據(jù)幀,繼續(xù)超時計時,返回執(zhí)行步驟B,否則關(guān)閉接收器,向上位機發(fā)送傳輸錯誤的提不。
10.根據(jù)權(quán)利要求8或9所述的方法,其特征在于,所述幀錯誤包括未接收到數(shù)據(jù)幀或接收到的數(shù)據(jù)幀的幀頭錯誤或幀尾錯誤或接收到的數(shù)據(jù)幀為空幀。
11.根據(jù)權(quán)利要求8或9所述的方法,其特征在于,所述判斷所述接收到的數(shù)據(jù)幀是否完整具體為判斷所述接收到的數(shù)據(jù)幀的位數(shù)是否為8的整數(shù)倍,若為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀完整,若不為8的整數(shù)倍則所述接收到的數(shù)據(jù)幀不完整。
12.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述其他錯誤包括數(shù)據(jù)幀的長度超過協(xié)議規(guī)定的長度或少于協(xié)議規(guī)定的最短長度。
13.根據(jù)權(quán)利要求8所述的方法,其特征在于 所述向上位機發(fā)送超時錯誤提示具體為以USB中斷管道方式向上位機發(fā)送超時錯誤提不; 所述向上位機發(fā)送傳輸錯誤提示具體為以USB中斷管道方式向上位機發(fā)送傳輸錯誤提不; 所述將接收到的卡片返回的數(shù)據(jù)發(fā)送給上位機具體為將接收到的卡片返回的數(shù)據(jù)以USB中斷管道方式發(fā)送給上位機。
14.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述讀卡器啟動超時計時和接收器之前還包括 讀卡器上電初始化,待接收到有效指令后判斷指令類型 若所述有效指令為通知尋卡指令則執(zhí)行尋卡操作并判斷尋卡操作是否成功,若成功則向卡片發(fā)送請求選擇應(yīng)答指令,并在接收到卡片返回的選擇應(yīng)答響應(yīng)時將所述選擇應(yīng)答指令發(fā)送給上位機,將卡片在射頻場響應(yīng)以USB中斷管道方式通知上位機;若不成功則將卡片離開射頻場響應(yīng)以USB中斷管道方式通知上位機; 若所述有效指令為APDU指令則按指定格式向卡片發(fā)送所述APDU指令,執(zhí)行所述步驟A ; 若所述有效指令為擴展指令則執(zhí)行所述擴展指令并將操作結(jié)果以USB中斷管道方式發(fā)送給上位機。
全文摘要
本發(fā)明公開一種增強非接觸卡與讀卡器通訊穩(wěn)定性的方法,屬于通訊技術(shù)領(lǐng)域,包括讀卡器啟動超時計時和接收器,等待接收數(shù)據(jù),當(dāng)尚未超時且檢測到副載波時停止超時計時,接收數(shù)據(jù)并判斷接收到的數(shù)據(jù)幀是否存在幀錯誤,若存在則拋棄所述數(shù)據(jù)幀,繼續(xù)超時計時,若不存在則判斷所述數(shù)據(jù)幀的CRC校驗和/或奇偶校驗是否正確,若正確則判斷所述數(shù)據(jù)幀是否存在其他錯誤,若存在則拋棄所述數(shù)據(jù)幀,繼續(xù)超時計時,若不存在則關(guān)閉接收器,將接收到的數(shù)據(jù)發(fā)送給上位機,若不正確則判斷所述數(shù)據(jù)幀的長度是否小于預(yù)設(shè)字節(jié),若小于則拋棄所述數(shù)據(jù)幀,繼續(xù)超時計時,若不小于則判斷所述數(shù)據(jù)幀是否完整,是則關(guān)閉接收器,否則拋棄所述數(shù)據(jù)幀,繼續(xù)超時計時。
文檔編號G06K7/00GK102880842SQ20121029165
公開日2013年1月16日 申請日期2012年8月16日 優(yōu)先權(quán)日2012年8月16日
發(fā)明者陸舟, 于華章 申請人:飛天誠信科技股份有限公司