我正在c# .net中编写一个应用程序,需要与nfc阅读器(ACR122U或内置windows WUDC)进行通信。阅读器将发送/接收数据到腕带,其行为类似于4型标签。我使用pcsc锐利库:https://github.com/danm-de/pcsc-sharp。通信采用NDEF协议,单文本记录,可用于从腕带获取数据。文本记录格式为G:{nameOfParameter}。例如G:ID,G:MAC。
这几天我一直在努力向手环发送写信息。我能够使用的命令是APDU ReadBinary command:
using var isoReader = new IsoReader(context, readerName, SCardShareMode.Shared, SCardProtocol.T1);
var command = new CommandApdu(IsoCase.Case2Extended, isoReader.ActiveProtocol)
{
CLA = 0x00,
P1 = 0x00,
P2 = 0x00,
Le = 0x24,
Instruction = InstructionCode.ReadBinary
};
var response = isoReader.Transmit(command);
转换为:00-B0-00-00-00-00-24
接收数据为:00-14-C1-01-00-00-00-0D-54-02-65-6E-47-3A-49-44-3A-36-35-35-33-35-00-00-00-00-00-00-00-00-00-00-00-00 -00-00-00-00-00-00-00-00-00-00。其中包含带有G:ID:65535的NDEF文本消息(这是一个期望值)。
我尝试发送APDU UpdateBinary命令来发送数据(其中数据是单个ndef文本记录,enG:ID作为有效载荷):
new CommandApdu(IsoCase.Case3Extended, protocol)
{
Data = new byte[] { 0xC1, 0x01, 0x06, 0x54, 0x65, 0x6E, 0x47, 0x3A, 0x49, 0x44 },
CLA = 0x00,
P1 = 0x00,
P2 = 0x00,
Instruction = InstructionCode.UpdateBinary // D6
};
但是我得到了0b00,这意味着参数错误p1 - p2 &;根据https://www.eftlab.com/knowledge-base/complete-list-of-apdu-responses/
我已经用android NFC工具应用程序做了一些测试。我可以在那里创建一个带有单个文本记录(例如G:MAC或G:ID)的NDEF消息,并将其发送到腕带(使用应用程序UI)。之后,下一个读取腕带给出适当的值响应(ID或MAC取决于最后发送的命令)。因此,似乎使用NFC工具应用程序的通信工作正常。
我从NFC工具获得的关于标签的其他信息:标签类型:ISO 14443-4技术:IsoDep, NfcA, Ndef数据格式:NFC Forum Type 4
谁能给我指个方向吗?Type 4 NDef Spec可能有帮助https://web.archive.org/web/20190827131645/http://apps4android.org/nfc-specifications/NFCForum-TS-Type-4-Tag_2.0.pdf
我假设你已经正确地完成了所有的文件选择操作
但是规范中的更新过程是
NDEF更新过程为:
- 如果要写入的NDEF消息的长度大于Maximum NDEF size-2(参见5.1.2.1节中的NFC文件控制TLV),则NDEF更新过程终止。否则转到第2项。
- 使用NDEF Update命令在NLEN字段中写入0000h值(见表9)。
- 使用一个或多个NDEF Update命令在NDEF消息字段中写入NDEF消息(见表9)。
- 使用NDEF Update命令在NLEN字段中写入NDEF消息的长度(见表9)。
似乎NLEN字段有一个大小那么你的偏移量不应该是零但是2h
我还没有尝试过这种类型的4标签,但认为规范可能会帮助你。