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