非接觸式IC卡讀寫(xiě)器二次開(kāi)發(fā)SDK文檔說(shuō)明-M1卡的讀寫(xiě)操作簡(jiǎn)化流程
- 2019-06-04 14:45:00
- 諾塔斯智能科技 原創(chuàng)
- 7608
首先,感謝選擇并使用諾塔斯智能科技有限公司產(chǎn)品的客戶。為了方便用戶在使用我司非接觸式IC卡讀寫(xiě)器進(jìn)行二次開(kāi)發(fā),我們對(duì)SDK進(jìn)行了優(yōu)化和封裝,開(kāi)發(fā)人員能讀懂我們的開(kāi)發(fā)范例,根據(jù)范例源碼就可以實(shí)現(xiàn)二次開(kāi)發(fā)了。這里我們重點(diǎn)介紹一下如何使用我們的非接觸式IC卡讀寫(xiě)器結(jié)合我們提供的SDK對(duì)M1(S50、S70)非接觸式IC卡進(jìn)行二次開(kāi)發(fā)。
在使用我司提供的SDK進(jìn)行二次開(kāi)發(fā)之前,開(kāi)發(fā)人員應(yīng)該對(duì)M1卡的主要指標(biāo)、存儲(chǔ)結(jié)構(gòu)、工作原理、與讀寫(xiě)器的通信機(jī)制。關(guān)于M1卡的相關(guān)知識(shí)可以理解"M1卡的區(qū)塊讀寫(xiě)控制"和“M1卡的簡(jiǎn)介”。
M1卡與讀寫(xiě)器的通信過(guò)程中主要有:復(fù)位應(yīng)答、防沖突機(jī)制、選擇卡片、三次相互驗(yàn)證、對(duì)數(shù)據(jù)庫(kù)的操作。如下圖所示:
復(fù)位應(yīng)答(Answer to request)
M1射頻卡的通訊協(xié)議和通訊波特率是定義好的,當(dāng)有卡片進(jìn)入讀寫(xiě)器的操作范圍時(shí),讀寫(xiě)器以特定的協(xié)議與它通訊,從而確定該卡是否為M1射頻卡,即驗(yàn)證卡片的卡型。
防沖突機(jī)制 (Anticollision Loop)
當(dāng)有多張卡進(jìn)入讀寫(xiě)器操作范圍時(shí),防沖突機(jī)制會(huì)從其中選擇一張進(jìn)行操作,未選中的則處于空閑模式等待下一次選卡,該過(guò)程會(huì)返回被選卡的序列號(hào)。
選擇卡片(Select Tag)
選擇被選中的卡的序列號(hào),并同時(shí)返回卡的容量代碼。
三次互相確認(rèn)(3 Pass Authentication)
選定要處理的卡片之后,讀寫(xiě)器就確定要訪問(wèn)的扇區(qū)號(hào),并對(duì)該扇區(qū)密碼進(jìn)行密碼校驗(yàn),在三次相互認(rèn)證之后就可以通過(guò)加密流進(jìn)行通訊。(在選擇另一扇區(qū)時(shí),則必須進(jìn)行另一扇區(qū)密碼校驗(yàn)。)
對(duì)數(shù)據(jù)塊的操作
讀 (Read):讀一個(gè)塊;
寫(xiě) (Write):寫(xiě)一個(gè)塊;
加(Increment):對(duì)數(shù)值塊進(jìn)行加值;
減(Decrement):對(duì)數(shù)值塊進(jìn)行減值;
存儲(chǔ)(Restore):將塊中的內(nèi)容存到數(shù)據(jù)寄存器中;
傳輸(Transfer):將數(shù)據(jù)寄存器中的內(nèi)容寫(xiě)入塊中;
中止(Halt):將卡置于暫停工作狀態(tài);
為了方便用戶進(jìn)行快速的二次開(kāi)發(fā),我們將這個(gè)流程進(jìn)行了簡(jiǎn)化,簡(jiǎn)化后的M1卡讀寫(xiě)操作流程如下圖所示:
Request:對(duì)應(yīng)調(diào)用LotusCardRequest函數(shù)
設(shè)備句柄nDeviceHandle為OpenDevice返回值。 M1/CPU/NTAG系列卡片尋卡動(dòng)作。 nRequestType參數(shù)取值: RT_ALL = 0x52; // /< 符合14443A卡片 RT_NOT_HALT = 0x26; // /< 未進(jìn)入休眠狀態(tài)的卡 /** * 尋卡 * * @param nDeviceHandle * 設(shè)備句柄 * @param nRequestType * 請(qǐng)求類型 * @param tLotusCardParam * 結(jié)果值 用里面的卡片類型 * @return true = 成功 */ public native boolean Request(long nDeviceHandle, int nRequestType, LotusCardParam tLotusCardParam);
Anticollission:對(duì)應(yīng)調(diào)用LotusCardAnticoll函數(shù)
設(shè)備句柄nDeviceHandle為OpenDevice返回值。
/**
* 防沖突
*
* @param nDeviceHandle
* 設(shè)備句柄
* @param tLotusCardParam
* 結(jié)果值 用里面的卡號(hào)
* @return true = 成功
*/
public native boolean Anticoll(long nDeviceHandle,
LotusCardParam tLotusCardParam);
Select:對(duì)應(yīng)調(diào)用LotusCardSelect函數(shù)
設(shè)備句柄nDeviceHandle為OpenDevice返回值。 /** * 選卡 * * @param nDeviceHandle * 設(shè)備句柄 * @param tLotusCardParam * 參數(shù)(使用里面的卡號(hào))與結(jié)果值(使用里面的卡容量大小) * @return true = 成功 */ public native boolean Select(long nDeviceHandle, LotusCardParam tLotusCardParam);
Authentication:對(duì)應(yīng)調(diào)用LotusCardAuthentication函數(shù)
M1需要,CPU/NTAG系列不需要
設(shè)備句柄nDeviceHandle為OpenDevice返回值。
nSectionIndex:S50(卡型0x04)為0~15,共16個(gè)扇區(qū)。
S70(卡型0x02)為0~39,共40個(gè)扇區(qū)。
/**
* 密鑰驗(yàn)證
*
* @param nDeviceHandle
* 設(shè)備句柄
* @param nAuthMode
* 驗(yàn)證模式
* @param nSectionIndex
* 扇區(qū)索引
* @param tLotusCardParam
* 參數(shù)(使用里面的卡號(hào))
* @return true = 成功
*/
public native boolean Authentication(long nDeviceHandle, int nAuthMode,
int nSectionIndex, LotusCardParam tLotusCardParam);
Read:對(duì)應(yīng)調(diào)用LotusCardRead函數(shù)
設(shè)備句柄nDeviceHandle為OpenDevice返回值。 特別說(shuō)明:如果是NTAG系列,nAddress參數(shù)為PAGE索引,每次可以讀4個(gè)PAGE,每個(gè)PAGE有4字節(jié),共16字節(jié)。 S50: nAddress = 扇區(qū)索引(0~15) * 4 + 塊(0~3); 如讀取0扇區(qū)2塊,nAddress = 0*4 +2=2; 如讀取5扇區(qū)2塊,nAddress = 5*4 +2=22; S70: 0~31扇區(qū)計(jì)算方式同S50; nAddress = 扇區(qū)索引(0~31) * 4 + 塊(0~3); 如讀取0扇區(qū)2塊,nAddress = 0*4 +2=2; 如讀取5扇區(qū)2塊,nAddress = 5*4 +2=22; 扇區(qū)32~39 每個(gè)扇區(qū)16個(gè)塊 nAddress = 32 * 4 +(扇區(qū)索引-32)*16 + 塊(0~15); 如讀取32扇區(qū)2塊,nAddress = 32*4 +(32-32)*16+2=130; 如讀取37扇區(qū)12塊,nAddress = 32*4 +(37-32)*16 + 12 =220; /** * 讀指定地址數(shù)據(jù) * * @param nDeviceHandle * 設(shè)備句柄 * @param nAddress * 塊地址 * @param tLotusCardParam * 結(jié)果值(讀寫(xiě)緩沖) * @return true = 成功 */ public native boolean Read(long nDeviceHandle, int nAddress, LotusCardParam tLotusCardParam);
Write:對(duì)應(yīng)調(diào)用LotusCardWrite函數(shù)
設(shè)備句柄nDeviceHandle為OpenDevice返回值。 特別說(shuō)明:如果是NTAG系列,nAddress參數(shù)為PAGE索引,每次可以讀4個(gè)PAGE,每個(gè)PAGE有4字節(jié),共16字節(jié)。 S50: nAddress = 扇區(qū)索引(0~15) * 4 + 塊(0~3); 如讀取0扇區(qū)2塊,nAddress = 0*4 +2=2; 如讀取5扇區(qū)2塊,nAddress = 5*4 +2=22; S70: 0~31扇區(qū)計(jì)算方式同S50; nAddress = 扇區(qū)索引(0~31) * 4 + 塊(0~3); 如讀取0扇區(qū)2塊,nAddress = 0*4 +2=2; 如讀取5扇區(qū)2塊,nAddress = 5*4 +2=22; 扇區(qū)32~39 每個(gè)扇區(qū)16個(gè)塊 nAddress = 32 * 4 +(扇區(qū)索引-32)*16 + 塊(0~15); 如讀取32扇區(qū)2塊,nAddress = 32*4 +(32-32)*16+2=130; 如讀取37扇區(qū)12塊,nAddress = 32*4 +(37-32)*16 + 12 =220; /** * 讀指定地址數(shù)據(jù) * * @param nDeviceHandle * 設(shè)備句柄 * @param nAddress * 塊地址 * @param tLotusCardParam * 結(jié)果值(讀寫(xiě)緩沖) * @return true = 成功 */ public native boolean Read(long nDeviceHandle, int nAddress, LotusCardParam tLotusCardParam);
M1卡的讀寫(xiě)操作簡(jiǎn)化流程操作后,函數(shù)可以復(fù)用。方便二次開(kāi)發(fā),提升工作效率。
聯(lián)系人: | 張經(jīng)理 |
---|---|
電話: | 400-023-6659 |
傳真: | 023-68798110 |
Email: | 843718693@qq.com |
QQ: | 843718693 |
微信: | Lotus-Smart |
微博: | lotusreader |
旺旺: | 諾塔斯智能科技有限公司 |
地址: | 重慶市江北區(qū)宏帆路36號(hào)宏帆天地1棟6樓 |