主要内容

近场通信(NFC)

这个例子向您展示了如何建模两个近场通信(NFC)设备之间的通信。

简介

近场通信(NFC)是一种基于标准的短距离无线连接技术,旨在实现两个电子设备之间直观而简单的通信。NFC工作在13.56 MHz的中心频率(Fc),速率从106 kbps到424 kbps,其典型工作范围为10厘米或更小。NFC总是涉及一个启动器和一个目标-启动器主动产生一个电磁场,可以为被动目标供电。

ISO®/IEC 18092(系统间的电信和信息交换-近场通信-接口和协议),也被称为NFCIP-1(近场通信-接口和协议规范),是NFC的国际标准。它基于ISO/IEC 14443。ISO/ iec18092包含两种通讯模式:

  • 被动:发起方生成载波字段,目标方通过调制已有的载波字段进行应答。在此模式下,目标设备从启动器提供的电磁场中获取运行功率。

  • 主动:启动器和目标设备通过交替生成各自的字段进行通信。设备在等待数据时停用其射频场。在这种模式下,两台设备通常都有电源供应。

在这两种通信模式中,ISO/IEC 18092定义了三种操作模式:

  • 读/写:在这种模式下,NFC设备可以以标准的NFC数据格式从任何支持的NFC标签(非接触式卡)中读取数据或向其写入数据。金宝app这些应用程序包括读取存储在标签或智能海报中嵌入的廉价NFC标签中的信息。

  • 卡仿真:NFC设备还可以作为其他读取器的NFC标签。这使得支持nfc的设备(如智能手机)可以像智能卡一样执行支付或票务等交易。

  • 点对点:两个NFC设备可以相互交换数据。这些应用包括共享Wi-Fi®或蓝牙®链路,或以虚拟名片和照片的形式交换数据。

系统设置

本例说明了从启动器向目标器传输数据所需的NFC协议和命令。此处采用无源通信模式,启动器提供电磁场,目标器通过调制电磁场将信息发回。启动器作为写入器运行,而目标作为卡片模拟器或标记运行。启动器和目标器使用ISO/IEC 14443-2(识别卡-非接触式集成电路卡-接近卡-第2部分:射频电源和信号接口)中定义的A型空中接口,工作速度为106kbps。启动器使用100% ASK的Modified Miller编码,如下面的时间范围所示。目标通过负载调制,使用启动器的场生成频率为847.5 kHz (Fs)的子载波,然后使用该子载波将数据调制到启动器的载波频率上。频谱分析仪演示了下面的负载调制。要突出显示847.5 kHz的子载波,请在频谱分析仪窗口中选择工具->测量->峰值查找器。Target使用带有10% ASK的Manchester编码,如下所示的Time范围。请注意,两个时间范围中显示的时域信号是基带信号,即13.56 MHz载波信号被剥离。

nfcInitiator对象表示启动器。UserData属性保存要传输到目标的数据。nfcTarget对象表示目标,ReceivedUserData保存从启动器接收到的数据。由于近距离通信设备距离短,系统信噪比很高。

initiator = nfcInitiator
initiator = Fc: 13560000 SamplesPerSymbol: 64 t1: 32 AppLayer: [] UserData: 'Hello, from MathWorks.'EnableVisualization: 1
target = nfcTarget
target = Fc: 13560000 Fs: 847500 SamplesPerSymbol: 64 UID: '11aa22bb' AppLayer: [] ReceivedUserData: " EnableVisualization: 1
%信噪比,单位:dBsnrdB = 50;重置RNG以获得可重复的结果S = rng(0);

初始化和反碰撞

启动器和目标器按照初始化和反碰撞的顺序建立通信链路。ISO/IEC 14443-3(识别卡-非接触式集成电路卡-接近卡,第3部分:初始化和防碰撞)中的图9 (PCD初始化和防碰撞流程图)和图10(防碰撞回路,PCD流程图)给出了相应的流程图。ISO/IEC 14443-3第6节(Type A - Initialization and anti - collision)详细介绍了命令和协议。函数nfcInitialization()和nfcAnticollisionLoop()实现了相应的命令和协议序列。该示例打印启动器和目标设备的状态和操作,以及交换的重要信息,以指示命令流。

传输协议

正如ISO/IEC 18092中所描述的,传输协议有三个部分-

  • 协议激活:在此阶段协商和选择各种协议参数,如比特率。ISO/IEC 18092第12.5节(协议的激活)详细描述了这一阶段。函数nfcProtocolActivation()实现了此阶段所需的命令序列。

  • 数据交换协议:在此阶段使用半双工协议进行信息交换,该协议支持面向块的数据传输和错误处理。金宝app详见ISO/IEC 18092第12.6节(数据交换协议)。函数nfcDataExchangeProtocol()显示了如何实现ISO/IEC 18092规定的数据交换。

  • 停用协议:启动器完成数据交换后,停用与目标器的协议和连接。函数nfcProtocolDeactivation()实现了ISO/IEC 18092第12.7节(协议的停用)中描述的序列。

nfcPrint。消息(从启动器传输到目标器的信息);
从启动器传输到目标器的消息:
nfcPrint.Message (initiator.UserData);
你好,这里是MathWorks。
nfcPrint.Start ();
启动启动器和目标器之间的NFC通信
初始化(启动器,目标器,snrdB);

启动器发送REQA目标器接收REQA

目标发送ATQA响应REQA启动器接收ATQA目标支持位帧防碰撞目标的UID大小:单个金宝app
nfcAnticollisionLoop(启动器,目标,snrdB);
Start of anti - collision loop Cascade Level-1 Initiator transmitted anticcollision command Target received Cascade Level-1 SEL code

Target transmitted full UID Initiator received CL1 UID without collision Complete UID received: 0x11aa22bb Initiator transmitted SELECT command Target received Cascade Level-1 SEL code Target selection confirmed Target transmitted SAK with UID Complete flag Initiator received SAK UID Complete。退出反碰撞循环。防碰撞回路结束目标符合NFCIP-1。继续传输协议激活
nfcProtocolActivation(initiator, target, snrdB);
启动传输协议激活启动器发送ATR_REQ目标接收ATR_REQ目标发送ATR_RES响应ATR_REQ启动器接收ATR_RES启动器发送PSL_REQ响应ATR_REQ选择发送速率:106kbps选择接收速率:106kbps目标接收PSL_REQ目标发送PSL_RES响应PSL_REQ启动器接收PSL_RES PSL_RES已验证。所有选定的速率确认传输协议激活结束
nfcDataExchangeProtocol(initiator, target, snrdB);
启动数据交换协议(DEP)启动器发送一个信息PDU在DEP_REQ启动器PNI: 0目标器收到一个信息PDU在DEP_REQ MI链未激活接收信息PDU收到启动器PNI: 0目标器发送一个信息PDU在DEP_REQ响应启动器收到一个信息PDU在DEP_REQ接收目标PNI: 0所有数据从启动器传输到目标。退出DEP数据交换协议的结束
nfcProtocolDeactivation(initiator, target, snrdB)
启动传输协议去激活启动器发送的RLS_REQ目标接收的RLS_REQ目标发送的RLS_RES响应启动器接收的RLS_RES目标释放的传输协议去激活结束
nfcPrint.End ();
启动器和目标器之间的NFC通信结束
nfcPrint。消息(目标从启动器收到的消息:);
Target从Initiator接收到的消息:
nfcPrint.Message (target.ReceivedUserData);
你好,这里是MathWorks。
nfcPrint.NewLine;恢复RNG状态rng(年代);
函数初始化(启动器,目标器,snrdB)初始化和防碰撞参考:ISO/IEC 14443-3,第6节txREQA = transmitREQA(启动器);* * * * * * * * * * * * * * * *;“测量”);txATQA = receiveREQA(目标,rxREQA);rxATQA = a8g;“测量”);[isATQAValid, isCollisionDetected, isTargetCompliant] =...rxATQA receiveATQA(引发剂);coder.internal.errorIf (~ isATQAValid,通讯:NFC: InvalidATQA);coder.internal.errorIf (isCollisionDetected通讯:NFC: CollisionATQA);coder.internal.errorIf (~ isTargetCompliant,通讯:NFC: TargetNotCompliant);结束函数nfcAnticollisionLoop(启动器,目标器,snrdB)%防碰撞循环参考:ISO/IEC 14443-3,第6节nfcPrint.NewLine;nfcPrint。Heading1 (“反碰撞循环的开始”);启动防碰撞循环cascadeLevel = 1;targetRxAC = [];nfcPrint.CascadeLevel (cascadeLevel);[initiatorTxAC, newCascadeLevel, uidComplete, isocompliantarget] =...antiollisionloop (initiator, targetRxAC, cascade);(newCascadeLevel <= 3) && ~uidComplete nfcPrint.)CascadeLevel (newCascadeLevel CascadeLevel);cascadeLevel = newCascadeLevel;targetRxAC = awgn(initiatorTxAC, snrdB,“测量”);%目标的防碰撞回路targetTxAC = antiCollisionLoop(target, targetRxAC);initiatorRxAC = awgn(targetTxAC, snrdB,“测量”);启动器的防碰撞回路[initiatorTxAC, newCascadeLevel, uidComplete, isocompliantarget] =...antiCollisionLoop(initiator, initiatorRxAC, cascade);结束coder.internal.errorIf (~ uidComplete,通讯:NFC: IncompleteUID);coder.internal.errorIf (~ isoCompliantTarget,...通讯:NFC: TargetNotCompliantWithNFCIP1);nfcPrint。Heading1 (“反碰撞循环结束”);nfcPrint.NewLine;nfcPrint。Heading1 ([“Target符合NFCIP-1标准。”...“继续传输协议激活”]);结束函数nfcProtocolActivation(initiator, target, snrdB)NFCIP-1传输协议激活参考:ISO/IEC 18092,第12.5节nfcPrint.NewLine;nfcPrint。Heading1 (启动传输协议激活);txATR_REQ = transmitATR_REQ(启动器);rxATR_REQ = awgn(txATR_REQ, snrdB,“测量”);txATR_RES = receiveATR_REQ(目标,rxATR_REQ);rxATR_RES = awgn(txATR_RES, snrdB,“测量”);txPSL_REQ = receiveATR_RES(initiator, rxATR_RES);rxPSL_REQ = awgn(txPSL_REQ, snrdB,“测量”);txPSL_RES = receivePSL_REQ(target, rxPSL_REQ);status = receivePSL_RES(启动器,txPSL_RES);coder.internal.errorIf(~状态,通讯:NFC: TPActivationFailed);nfcPrint。Heading1 (“传输协议激活结束”);结束函数nfcDataExchangeProtocol(initiator, target, snrdB)数据交换协议参考:ISO/IEC 18092,第12.6节nfcPrint.NewLine;nfcPrint。Heading1 (开始数据交换协议(DEP));status = nfcDEP(initiator, target, snrdB);coder.internal.errorIf(~状态,“nfc: nfc: DEPFailed”);nfcPrint。Heading1 (数据交换协议(DEP));nfcPrint.NewLine;结束函数nfcProtocolDeactivation(initiator, target, snrdB)%传输协议失效参考:ISO/IEC 18092,第12.7节nfcPrint.NewLine;nfcPrint。Heading1 (“启动传输协议去激活”);txRLS_REQ = transmitRLS_REQ(启动器);rxRLS_REQ = awgn(txRLS_REQ, snrdB,“测量”);txRLS_RES = receiveRLS_REQ(target, rxRLS_REQ);rxRLS_RES = awgn(txRLS_RES, snrdB,“测量”);status = receiveRLS_RES(启动器,rxRLS_RES);coder.internal.errorIf(~状态,通讯:NFC: TPDeactivationFailed);nfcPrint。Heading1 (“传输协议失效的结束”);结束

探索

探索nfcInitiator和nfcTarget对象的各种方法,以理解NFC标准描述的各种命令和协议。实验各种系统参数,如SNR, UID类型(Single或Double), UID值,SamplesPerSymbol,看看它们是如何影响系统的。

参考文献

  1. https://nfc-forum.org/

  2. 识别卡。非接触式集成电路卡。接近卡。第2部分:射频电源和信号接口

  3. 识别卡。非接触式集成电路卡。接近卡。第3部分:初始化和防碰撞

  4. 信息技术。系统间的电信和信息交换。近场通信。接口和协议(NFCIP-1)