不知道如何用c# pcsc将数据写入NFC类型4标签



我正在c# .net中编写一个应用程序,需要与nfc阅读器(ACR122U或内置windows WUDC)进行通信。阅读器将发送/接收数据到腕带,其行为类似于4型标签。我使用pcsc锐利库:https://github.com/danm-de/pcsc-sharp。通信采用NDEF协议,单文本记录,可用于从腕带获取数据。文本记录格式为G:{nameOfParameter}。例如G:IDG: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更新过程为:

  1. 如果要写入的NDEF消息的长度大于Maximum NDEF size-2(参见5.1.2.1节中的NFC文件控制TLV),则NDEF更新过程终止。否则转到第2项。
  2. 使用NDEF Update命令在NLEN字段中写入0000h值(见表9)。
  3. 使用一个或多个NDEF Update命令在NDEF消息字段中写入NDEF消息(见表9)。
  4. 使用NDEF Update命令在NLEN字段中写入NDEF消息的长度(见表9)。

似乎NLEN字段有一个大小那么你的偏移量不应该是零但是2h

我还没有尝试过这种类型的4标签,但认为规范可能会帮助你。

相关内容

  • 没有找到相关文章

最新更新