首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACR1252 Felica仿真

ACR1252 Felica仿真
EN

Stack Overflow用户
提问于 2020-06-15 12:59:09
回答 1查看 384关注 0票数 2

我正在使用连接到windows笔记本电脑的ACR1252设备,并试图模拟带有URL标签的卡片。我能够使用Mifare模拟模式(@michael在基于USB-NFC读取器的访问卡仿真模式中描述的方式)发送一个标记。但不幸的是,对android设备来说,标签的读取并不稳定(只在15次尝试中读取一次)。我决定试试Felica卡模拟。根据ACR1252的文档,必须更改命令中NFCMode的字节:

代码语言:javascript
复制
 NfcMode 1 byte. NFC Device Mode. 
 01h = MIFARE Ultralight Card
 03h = FeliCa Card Emulation Mode

写命令指定如下:写卡仿真数据命令格式

但似乎这还不够,因为Felica有着不同的记忆结构。我的android手机读取标签,但无法识别NDEF信息的内容。有谁知道如何更改信息以使其可被识别吗?任何建议都是非常感谢的。

当我发送

E0 00 60 1C 01 03 00 18 E1 10 06 00 03 F D1 01 0B 55 01 67 6F 6F 67 6C 65 2E 63 6F 6D FE 00

对费利卡我看到了这个

EN

回答 1

Stack Overflow用户

发布于 2021-02-14 09:08:43

也有同样的问题。我通过发送标签3属性块,然后发送NDEF消息来解决这个问题。

如何构造属性块签出1.1.pdf#page=23&zoom=100,117,344

关于NDEF消息,它需要没有TLV块包装器。

代码语言:javascript
复制
NdefRecord[] records = {
            createTextRecord("en", value)
    };
    NdefMessage message = new NdefMessage(records);

    byte[] ndefMessage = message.toByteArray();

    StringBuilder hexMessage = new StringBuilder();
    for (byte b : ndefMessage) {
        hexMessage.append(String.format("%02X", b));
    }

对于属性块:

代码语言:javascript
复制
byte[] type3AttributeBlock = {
            (byte) 0x10, // version
            (byte) numberOfBlocks[3], // number of blocks
            (byte) numberOfBlocks[3], // blocks to update
            (byte) 0x00, // H blocks available
            (byte) 0x09, // L block available
            (byte) 0x00, // byte 5 unused
            (byte) 0x00, // byte 6 unused
            (byte) 0x00, // byte 7 unused
            (byte) 0x00, // byte 8 unused
            (byte) 0x00, // writeF (00: finished)
            (byte) 0x00, // RW flag (00: read only)
            (byte) messageLengthBytes[1], // ln upper
            (byte) messageLengthBytes[2], // ln middle
            (byte) messageLengthBytes[3], // ln lower
            (byte) 0x00, // H checksum
            (byte) 0x00, // L checksum
    };

    byte[] checkSum = calculateCheckSum(type3AttributeBlock, 14);

    type3AttributeBlock[14] = checkSum[2];
    type3AttributeBlock[15] = checkSum[3];

然后将它们组合在一起,然后用control发送给读者。

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

https://stackoverflow.com/questions/62388740

复制
相关文章

相似问题

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