主要内容

近场通信(NFC)

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

介绍

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

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

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

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

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

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

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

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

系统设置

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

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

引发剂= nfcInitiator
initiator = Fc: 13560000 SamplesPerSymbol: 64 t1: 32 AppLayer: [] UserData: 'Hello, from MathWorks.'EnableVisualization: 1
目标= nfcTarget
target = Fc: 13560000 Fs: 847500 SamplesPerSymbol: 64 UID: '11aa22bb' AppLayer: [] ReceivedUserData: " EnableVisualization: 1 . txt " target = Fc: 13560000 Fs: 847500 SamplesPerSymbol: 64 UID: '11aa22bb' AppLayer: [] ReceivedUserData: " EnableVisualization: 1 . txt
%信噪比,单位为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通信
nfcInitialization(引发剂、目标、snrdB);

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

目标传输ATQA响应REQA启动器接收到的ATQA目标支持位帧防撞目标的UID大小:single金宝app
nfcAnticollisionLoop(引发剂、目标、snrdB);
防碰撞循环启动级联Level-1发起者发送防碰撞命令目标接收级联Level-1 SEL代码

图Load Modulation包含一个轴和其他类型的uiflowcontainer, uimenu, uitoolbar对象。标题为目标信号频谱的轴包含一个类型为line的对象。这个对象表示通道1。

Target transmit full UID Initiator received CL1 UID without collision Complete UID received: 0x11aa22bb Initiator transmit SELECT command Target received Cascade Level-1 SEL code Target selection confirmed Target transmit SAK with UID Complete flag Initiator received SAK UID Complete。防撞退出循环。目标符合NFCIP-1。继续传输协议激活
nfcProtocolActivation(引发剂、目标、snrdB);
Start of Transport Protocol Activation Initiator transmit ATR_REQ Target received ATR_REQ Target transmit ATR_RES in response to ATR_REQ Initiator received ATR_RES Initiator transmit PSL_REQ in response to ATR_REQ已选发送速率:106kbps已选接收速率:10kbps Target received PSL_REQ Target sent PSL_RES in response to PSL_REQ Initiator received PSL_RES PSL_RES validated已确认所有选定速率传输协议激活结束
nfcDataExchangeProtocol(引发剂、目标、snrdB);
Start of Data Exchange Protocol (DEP) Initiator transmit an Information PDU in DEP_REQ Initiator PNI: 0 Target received an Information PDU in DEP_REQ MI chain not activated in received Information PDU received Initiator PNI: 0 Target PNI:0 Target发送一个Information PDU in DEP_RES in response to DEP_REQ Initiator received an Information PDU in DEP_RES received Target PNI: 0所有从Initiator发送到Target的数据。数据交换协议(DEP)结束
snrdB nfcProtocolDeactivation(引发剂、目标)
Start of Transport Protocol Deactivation Initiator transmit RLS_REQ Target received RLS_REQ Target transmit RLS_RES in response to RLS_REQ Initiator received RLS_RES Target released End of Transport Protocol Deactivation .传输协议去激活结束
nfcPrint.End ();
启动器和目标器之间的NFC通信结束
nfcPrint。消息(目标从启动器接收到的消息:);
目标从启动器接收到的消息:
nfcPrint.Message (target.ReceivedUserData);
你好,从MathWorks。
nfcPrint.NewLine;%恢复RNG状态rng(年代);
函数snrdB nfcInitialization(引发剂、目标)%初始化和防撞%参考:ISO/IEC 14443-3,第6节txREQA = transmitREQA(引发剂);rxREQA = awgn(txREQA, snrdB,“测量”);txATQA = receiveREQA(target, rxREQA);rxATQA = awgn(txATQA, snrdB,“测量”);[isATQAValid, isCollisionDetected, isTargetCompliant] =...rxATQA receiveATQA(引发剂);coder.internal.errorIf (~ isATQAValid,通讯:NFC: InvalidATQA);coder.internal.errorIf (isCollisionDetected通讯:NFC: CollisionATQA);coder.internal.errorIf (~ isTargetCompliant,通讯:NFC: TargetNotCompliant);结束函数snrdB nfcAnticollisionLoop(引发剂、目标)%防撞环%参考:ISO/IEC 14443-3,第6节nfcPrint.NewLine;nfcPrint。Heading1 (“开始防撞循环”);开始反碰撞循环cascadeLevel = 1;targetRxAC = [];nfcPrint.CascadeLevel (cascadeLevel);[initiatorTxAC, newCascadeLevel, uidComplete, isoCompliantTarget] =...antiCollisionLoop(发起者,targetRxAC cascadeLevel);(newCascadeLevel <= 3) && ~uidComplete nfcPrint。CascadeLevel (newCascadeLevel CascadeLevel);cascadeLevel = newCascadeLevel;targetRxAC = awgn(initiatorTxAC, snrdB,“测量”);%目标的反碰撞循环targetTxAC = anti - collision - loop (target, targetRxAC);initiatorRxAC = awgn(targetTxAC, snrdB,“测量”);启动器的反碰撞循环[initiatorTxAC, newCascadeLevel, uidComplete, isoCompliantTarget] =...antiCollisionLoop(发起者,initiatorRxAC cascadeLevel);结束coder.internal.errorIf (~ uidComplete,通讯:NFC: IncompleteUID);coder.internal.errorIf (~ isoCompliantTarget,...通讯:NFC: TargetNotCompliantWithNFCIP1);nfcPrint。Heading1 (“防撞循环结束”);nfcPrint.NewLine;nfcPrint。Heading1 ([“目标符合NFCIP-1。”...“继续激活传输协议”]);结束函数snrdB nfcProtocolActivation(引发剂、目标)% 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(target, rxATR_REQ);rxATR_RES = awgn(txATR_RES, snrdB,“测量”);txPSL_REQ = receiveATR_RES(启动器,rxATR_RES);rxPSL_REQ = awgn(txPSL_REQ, snrdB,“测量”);txPSL_RES = receivePSL_REQ(target, rxPSL_REQ);status = receivePSL_RES(initiator, txPSL_RES); / /启动器coder.internal.errorIf(~状态,通讯:NFC: TPActivationFailed);nfcPrint。Heading1 (“传输协议激活结束”);结束函数snrdB nfcDataExchangeProtocol(引发剂、目标)数据交换协议%参考:ISO/IEC 18092第12.6节nfcPrint.NewLine;nfcPrint。Heading1 (“启动数据交换协议(DEP)”);status = nfcDEP(启动器,目标器,snrdB);coder.internal.errorIf(~状态,“nfc: nfc: DEPFailed”);nfcPrint。Heading1 (“数据交换协议(DEP)的结束”);nfcPrint.NewLine;结束函数snrdB nfcProtocolDeactivation(引发剂、目标)%传输协议失效%参考: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(initiator, rxRLS_RES); / /启动器状态coder.internal.errorIf(~状态,通讯:NFC: TPDeactivationFailed);nfcPrint。Heading1 (“传输协议失效结束”);结束

探索

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

参考文献

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

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

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

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