首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法找到如何用C# pcsc将数据写入NFC类型4标记。

无法找到如何用C# pcsc将数据写入NFC类型4标记。
EN

Stack Overflow用户
提问于 2021-08-05 20:47:46
回答 1查看 603关注 0票数 0

我正在用c# .net编写一个应用程序,它需要与nfc读取器(ACR122U或已构建的windows )通信。读取器将发送/接收数据到腕带,该腕带的行为类似于类型4标记。我正在使用pcsc库来实现这一点:https://github.com/danm-de/pcsc-sharp。通信采用NDEF协议,采用单文本记录,可用于从腕带获取数据。文本记录格式为G:{nameOfParameter}。例如G:ID,G:MAC。

几天来,我一直在为给腕带写信而挣扎。我能够工作的命令是APDU ReadBinary命令:

代码语言:javascript
复制
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.它包含带有G:ID:65535 (这是一个期望值)的NDEF文本消息。

我试着发送APDU UpdateBinary命令来发送数据(其中数据是单个ndef文本记录,带有enG:ID作为有效负载):

代码语言:javascript
复制
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,根据https://www.eftlab.com/knowledge-base/complete-list-of-apdu-responses/的说法,它转化为“错误的参数P1-P2”

我在android工具应用程序中做了一些测试。我可以在那里创建带有单个文本记录(例如G:MAC或G:ID)的NDEF消息,并将其发送到腕带(使用应用程序UI)。在此之后,下一次读取腕带会给出适当的响应值(ID或MAC,取决于最后发送的命令)。因此,使用NFC工具应用程序进行通信似乎是正确的。

从NFC工具获得的关于标签的其他信息:标签类型: ISO 14443-4技术: IsoDep,NfcA,Ndef数据格式: NFC论坛类型4

有人能给我指明正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 22:50:25

类型4 NDef规范可能会在https://web.archive.org/web/20190827131645/http://apps4android.org/nfc-specifications/NFCForum-TS-Type-4-Tag_2.0.pdf上有所帮助

我想您已经完成了所有的文件选择正确

但是规范中的更新过程是

更新过程是:

  1. 如果NDEF消息的长度(待写入)大于最大NDEF大小-2(请参见5.1.2.1节中的NFC ),则将中止NDEF更新过程。否则,转到第2项。使用NDEF命令在NLEN字段中写入值0000h (请参见表9)。使用commands.
  2. Write更新一个或多个
  3. 在NDEF消息字段中写入
  4. 消息(参见表9)使用NLEN更新命令(请参见表9)。

因为NLEN字段有一个大小,所以偏移量不应该是零,而应该是2h

我还没有尝试过使用Type 4标记,但是我认为规范可能会对您有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68673325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档