关于NTAG213卡、NTAG215卡和NTAG216卡的区别,网上搜到的信息大多只是说到容量的区别,即NTAG213卡用户可用144字节(byte),NTAG215可用504字节,NTAG216可用888字节
下面向广大程序员朋友介绍如何让程序自动识别区分NTAG213卡、NTAG215卡和NTAG216卡。
卡厂提供了60H指令,也就是GET_VERSION指令来查询NTAG的版本数据(8个字节),如下表
字节编号
|
说明
|
NTAG213
|
NTAG215
|
NTAG216
|
解释
|
0
|
固定标头
|
00h
|
00h
|
00h
|
|
1
|
供应商ID
|
04h
|
04h
|
04h
|
|
2
|
产品类型
|
04h
|
04h
|
04h
|
NTAG
|
3
|
产品子类型
|
02h
|
02h
|
02h
|
|
4
|
主要产品版本
|
01h
|
01h
|
01h
|
|
5
|
次要产品版本
|
00h
|
00h
|
00h
|
|
6
|
存储大小
|
0Fh
|
11h
|
13h
|
|
7
|
协议类型
|
03h
|
03h
|
03h
|
符合ISO/IEC 14443-3标准
|
第6字节表示存储大小,以此可区分NTAG213卡、NTAG215卡和NTAG216卡。
下图为本公司的例子软件
提供了读取版本数据的函数piccgetversion_ntag,以下为VB6.0的例子代码
Private Sub Command8_Click()
Dim status As Byte '存放返回值
Dim mypiccversiondata(0 To 7) As Byte '卡版本信息
Dim i As Integer
Dim str As String
status = piccgetversion_ntag(VarPtr(mypiccversiondata(0)))
str = ""
Select Case status
Case 0:
For i = 0 To 7
str = str + Right("0" + Hex(mypiccversiondata(i)), 2)
Next i
str = str + "属于"
If mypiccversiondata(6) = &HF Then
str = str + "NTAG213系列卡"
ElseIf mypiccversiondata(6) = &H11 Then
str = str + "NTAG215系列卡"
ElseIf mypiccversiondata(6) = &H13 Then
str = str + "NTAG216系列卡"
Else
str = str + "无法识别的卡"
End If
MsgBox "卡版本信息:" + str
Case 8:
MsgBox "请将卡放在感应区"
Case 13
MsgBox "读卡失败,请先执行第一步读卡序列号!"
Case 23: '没有动态库
MsgBox "请连上USB 读写器"
Case Else
MsgBox "异常" + CStr(status)
End Select
End Sub
|