使用Windows Phone 8 NFC读取Mifare标签?

A-s*_*ent 15 .net c# nfc mifare windows-phone-8

Windows Phone 8 NFC是否支持基于Mifare Ultralight/Classic的标签?我使用此代码访问诺基亚Lumia 920上的NFC设备(代码示例取自NDEF标签阅读器 - NFC NDEF标签阅读器)

public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
        ProximityDevice device = ProximityDevice.GetDefault();
        device.DeviceArrived += DeviceArrived;
        device.DeviceDeparted += DeviceDeparted;
        device.SubscribeForMessage("NDEF", MessageReceived);
    }

    private void DeviceArrived(ProximityDevice sender)
    {
        // this event occurs when I am tapping any of my tags (tried 5 different Mifare Ultralight/Classic)
    }

    private void DeviceDeparted(ProximityDevice sender)
    {
        // this event occurs when I am moving away any tag
    }

    private void MessageReceived(ProximityDevice sender, ProximityMessage message)
    {
        // this event is never fired!!! :(
    }
}
Run Code Online (Sandbox Code Playgroud)

WP8上的NFC有缺陷还是这个代码错了?

更新: 从本文档NFC论坛类型标签您可以发现Mifare Ultralight与NDEF兼容.Android设备可以轻松读取此类型的标签.

Jus*_*gel 14

WP8和Lumia 920支持Mifrare.我猜这里,但很可能你的Mifare NFC标签没有格式化/初始化为NDEF.购买NFC标签时,您可以要求NFC标签为NDEF格式.

Lumia 920芯片(NXP PN544系列)支持以下标签类型(至少):

  • 类型1:黄玉家族
  • 类型2:Mifare Ultralight系列,my-d-move,NTag
  • 类型3:Felica家族
  • Type 4:Desfire家族
  • 非标准化:Mifare标准

关于NFC标签NDEF格式化:

  • WP8仅支持对这些标记的NDEF级别访问,这意味着标记需要是NDEF格式的,或者具有现有的NDEF消息(可以是空的).如果您尝试在非格式化的NFC标签上使用API​​,它们将无法工作(因为WP8缺少对低级Tag Type特定命令/访问的支持)
  • 如果你想要NDEF格式化你的标签你有以下选择:当订购标签要求它们是NDEF格式化(或/和包含空的NDEF消息和要解锁的标签)时,使用NFC USB读/写器硬件用于PC或使用带有NFC编写应用程序的Symbian/MeeGo/Android NFC设备

此致,
- Justin Angel
诺基亚Windows Phone开发人员体验首席工程师


mdb*_*mdb 5

您发布的代码应该从NFC标签读取NDEF消息.

而Mifare也与NFC标签一起使用,这就是相似性结束的地方:它是一种完全不同的协议,具有自己的(专有)数据格式.

所以,这段代码并没有真正错误(WP8上的NFC通常也不是'有缺陷'),但是如果你希望它能读取Mifare标签,这种方法对你来说就不适用了.

我不知道是否可以用WP8读取Mifare标签:这取决于硬件(因为Mifare使用一些非ISO帧)以及API支持.一个快速的谷歌搜索表明,旧版诺基亚手机的Java SDK确实支持Mifare,因此可能存在硬件支持.但是没有为WP8找到任何东西,所以这很可能需要一些广泛的编码,如果它可以工作的话.

为了让您了解所需内容:在获得DeviceArrived事件后(这意味着读者检测到了ISO NFC标签),您需要获取卡的UID.这应该是非常简单的,因为它是标准的ISO功能.

接下来,您需要能够直接向标签发送Mifare身份验证和读/写扇区命令.由于这些命令不是ISO标准,因此事情变得更加棘手且依赖于读者.通过这个阶段真的需要协议文档和手机的Mifare测试工具.最后,大多数Mifare卡完全不可读,除非你至少知道一个扇区密钥,并且应用程序数据格式也是专有的(特定于发卡机构),所以即使在完成所有工作之后,也不能保证你可以获得有用的信息.卡片...