Этот пример показывает вам, как смоделировать связь между двумя устройствами Около полевой коммуникации (NFC).
Около полевой коммуникации (NFC) является стандартизированной ближней технологией беспроводного подключения, спроектированной для интуитивной и простой связи между двумя электронными устройствами. NFC действует на центральной частоте на 13,56 МГц (ФК) на уровнях в пределах от 106 Кбит/с к 424 Кбит/с, и его типичный рабочий диапазон составляет 10 см или меньше. NFC всегда вовлекает Инициатора и Цель - Инициатор активно генерирует электромагнитное поле, которое может привести в действие пассивную Цель.
ISO®/IEC 18092 (Телекоммуникации и Обмен информацией Между Системами - Около Полевой Коммуникации - Интерфейсом и Протоколом), также называемый NFCIP-1 (Около Полевой Коммуникации - Интерфейс и Спецификация Протокола), является управляющим международным стандартом для NFC. Это основано на ISO/IEC 14443. ISO/IEC 18092 включает два коммуникационных режима:
Пассивный элемент: устройство Инициатора генерирует поле несущей и ответы Целевого устройства путем модуляции существующего поля. В этом режиме Целевое устройство потребляет свою рабочую энергию от обеспеченного Инициаторами электромагнитного поля.
Активный: И Инициатор и Целевое устройство связываются путем альтернативной генерации их собственных полей. Устройство деактивировало свое поле RF, в то время как оно ожидает данных. В этом режиме оба устройства обычно имеют источники питания.
В двух режимах коммуникации существует три режима работы, заданные в ISO/IEC 18092:
Чтение-запись: В этом режиме устройство NFC может считать данные из или записать данные к любому из поддерживаемых тегов NFC (бесконтактные карты) в стандартном формате данных NFC. Приложения включают информацию чтения, хранившую в недорогие теги NFC, встроенные в метки или умные плакаты.
Эмуляция карты: устройство NFC может также действовать как тег NFC для других читателей. Это позволяет поддерживающим NFC устройствам как смартфоны действовать как смарт-карты, чтобы выполнить транзакции, такие как платежи или покупка билетов.
Одноранговый: Два устройства NFC могут обмениваться данными. Приложения включают совместное использование WiFi или ссылки Bluetooth® или обмена данными в форме виртуальных визитных карточек и фотографий.
Этот пример иллюстрирует протокол NFC и команды, требуемые передать данные от Инициатора к Цели. Пассивный коммуникационный режим используется здесь, посредством чего Инициатор обеспечивает электромагнитное поле, и Цель передает информацию обратно путем модуляции этого поля. Инициатор действует в качестве средства записи и Цели как эмулятор карты или тег. Инициатор и Цель используют Тип воздушный интерфейс, заданный в ISO/IEC 14443-2 (Удостоверения личности - Бесконтактные карты интегральной схемы - карты Близости - Часть 2: степень Радиочастоты и интерфейс сигнала), и действуют на уровне 106 Кбит/с. Инициатор использует Модифицированного Миллера, кодирующего с 100% ASK, как показано в осциллографе Времени ниже. Цель генерирует поднесущую с частотой 847,5 кГц (Фс), через модуляцию загрузки, с помощью поля Инициатора и затем модулирует данные на несущую частоту Инициатора с помощью этой поднесущей. Спектр Анализатор иллюстрирует модуляцию загрузки ниже. Чтобы подсветить поднесущую на уровне 847,5 кГц, выберите Tools-> Measurements-> Peak Finder в спектре окно анализатора. Цель использует Манчестерское кодирование с 10% ASK как показано в осциллографе Времени ниже. Обратите внимание на то, что сигналы области времени, показанные в два Раза, когда осциллографы являются сгенерированными модулированными сигналами i.e сигнал несущей на 13,56 МГц, разделяются.
Объект nfcInitiator представляет Инициатора. Свойство UserData содержит данные, которые будут переданы к Цели. Объект nfcTarget представляет Цель, и ReceivedUserData содержит данные, полученные от Инициатора. Из-за малой дальности устройств NFC, системный ОСШ очень высок.
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
% Signal to noise ratio, in dB snrdB = 50; % Reset the RNG for reproducible results s = rng(0);
Инициатор и Цель следуют за инициализацией и последовательностями антистолкновения, чтобы установить линию связи. Рисунок 9 (Инициализация и блок-схема антистолкновения для PCD) и рисунок 10 (цикл Антистолкновения, блок-схема для PCD) в ISO/IEC 14443-3 (Удостоверения личности - Бесконтактные карты интегральной схемы - карты Близости, Часть 3: Инициализация и антистолкновение), иллюстрируют соответствующие блок-схемы. Разделите 6 (Тип A - Инициализация, и антистолкновение) ISO/IEC 14443-3 описывает команды и протокол подробно. Функции nfcInitialization () и nfcAnticollisionLoop () реализуют соответствующую последовательность команд и протокола. Пример распечатывает состояние и действия Инициатора и Целевых устройств, наряду с важной информацией, которой обмениваются, чтобы указать на поток команд.
Как описано в ISO/IEC 18092 Транспортный протокол имеет три части -
Активация протокола: Различные параметры протокола, как битрейты, согласованы и выбраны во время этой фазы. Разделите 12.5 (Активация протокола) ISO/IEC 18092 детально описывает эту фазу. Функция nfcProtocolActivation () реализует последовательность команд, требуемых во время этой фазы.
Протокол Обмена данными: информацией обмениваются во время этой фазы с помощью полудуплексного протокола, который поддерживает блочно-ориентированную передачу данных с обработкой ошибок. Смотрите раздел 12.6 (Протокол Обмена данными) ISO/IEC 18092 для деталей. Функция nfcDataExchangeProtocol () показывает, как реализовать обмен данными, как предписано ISO/IEC 18092.
Деактивация Протокола: После завершающегося обмена данными Инициатор деактивировал протокол и связь с Целью. Функция nfcProtocolDeactivation () реализует последовательность, описанную в разделе 12.7 (Деактивация протокола) ISO/IEC 18092.
nfcPrint.Message('The message to transmit from Initiator to Target:');
The message to transmit from Initiator to Target:
nfcPrint.Message(initiator.UserData);
Hello, from MathWorks.
nfcPrint.Start();
Start of NFC Communication between Initiator and Target
nfcInitialization(initiator, target, snrdB);
Initiator transmitted REQA Target received REQA
Target transmitted ATQA in response to REQA Initiator received ATQA Target supports bit frame anticollision Target's UID size: single
nfcAnticollisionLoop(initiator, target, snrdB);
Start of Anticollision loop Cascade Level-1 Initiator transmitted ANTICOLLISION 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. Exit Anticollision loop. End of Anticollision loop Target compliant with NFCIP-1. Continue with Transport Protocol Activation
nfcProtocolActivation(initiator, target, snrdB);
Start of Transport Protocol Activation Initiator transmitted ATR_REQ Target received ATR_REQ Target transmitted ATR_RES in response to ATR_REQ Initiator received ATR_RES Initiator transmitted PSL_REQ in response to ATR_REQ Selected send rate: 106 Kbps Selected receive rate: 106 Kbps Target received PSL_REQ Target transmitted PSL_RES in response to PSL_REQ Initiator received PSL_RES PSL_RES validated. All selected rates confirmed End of Transport Protocol Activation
nfcDataExchangeProtocol(initiator, target, snrdB);
Start of Data Exchange Protocol (DEP) Initiator transmitted an Information PDU in DEP_REQ Initiator PNI: 0 Target received an Information PDU in DEP_REQ MI chaining not activated in received information PDU Received Initiator PNI: 0 Target PNI: 0 Target transmitted an Information PDU in DEP_RES in response to DEP_REQ Initiator received an Information PDU in DEP_RES Received Target PNI: 0 All data transmitted from Initiator to Target. Exit DEP. End of Data Exchange Protocol (DEP)
nfcProtocolDeactivation(initiator, target, snrdB)
Start of Transport Protocol Deactivation Initiator transmitted RLS_REQ Target received RLS_REQ Target transmitted RLS_RES in response to RLS_REQ Initiator received RLS_RES Target released End of Transport Protocol Deactivation
nfcPrint.End();
End of NFC Communication between Initiator and Target
nfcPrint.Message('The message received by Target from Initiator:');
The message received by Target from Initiator:
nfcPrint.Message(target.ReceivedUserData);
Hello, from MathWorks.
nfcPrint.NewLine;
% Restore RNG state
rng(s);
function nfcInitialization(initiator, target, snrdB) % Initialization and anticollision % Reference: ISO/IEC 14443-3, section 6 txREQA = transmitREQA(initiator); rxREQA = awgn(txREQA, snrdB, 'measured'); txATQA = receiveREQA(target, rxREQA); rxATQA = awgn(txATQA, snrdB, 'measured'); [isATQAValid, isCollisionDetected, isTargetCompliant] = ... receiveATQA(initiator, rxATQA); coder.internal.errorIf(~isATQAValid, 'comm:NFC:InvalidATQA'); coder.internal.errorIf(isCollisionDetected, 'comm:NFC:CollisionATQA'); coder.internal.errorIf(~isTargetCompliant, 'comm:NFC:TargetNotCompliant'); end function nfcAnticollisionLoop(initiator, target, snrdB) % Anticollision Loop % Reference: ISO/IEC 14443-3, section 6 nfcPrint.NewLine; nfcPrint.Heading1('Start of Anticollision loop'); % Start anticollision loop cascadeLevel = 1; targetRxAC = []; nfcPrint.CascadeLevel(cascadeLevel); [initiatorTxAC, newCascadeLevel, uidComplete, isoCompliantTarget] = ... antiCollisionLoop(initiator, targetRxAC, cascadeLevel); while (newCascadeLevel <= 3) && ~uidComplete nfcPrint.CascadeLevel(newCascadeLevel, cascadeLevel); cascadeLevel = newCascadeLevel; targetRxAC = awgn(initiatorTxAC, snrdB, 'measured'); % Target's anticollision loop targetTxAC = antiCollisionLoop(target, targetRxAC); initiatorRxAC = awgn(targetTxAC, snrdB, 'measured'); % Initiator's anticollision loop [initiatorTxAC, newCascadeLevel, uidComplete, isoCompliantTarget] = ... antiCollisionLoop(initiator, initiatorRxAC, cascadeLevel); end coder.internal.errorIf(~uidComplete, 'comm:NFC:IncompleteUID'); coder.internal.errorIf(~isoCompliantTarget, ... 'comm:NFC:TargetNotCompliantWithNFCIP1'); nfcPrint.Heading1('End of Anticollision loop'); nfcPrint.NewLine; nfcPrint.Heading1(['Target compliant with NFCIP-1. '... 'Continue with Transport Protocol Activation']); end function nfcProtocolActivation(initiator, target, snrdB) % NFCIP-1 Transport Protocol Activation % Reference: ISO/IEC 18092, section 12.5 nfcPrint.NewLine; nfcPrint.Heading1('Start of Transport Protocol Activation'); txATR_REQ = transmitATR_REQ(initiator); rxATR_REQ = awgn(txATR_REQ, snrdB, 'measured'); txATR_RES = receiveATR_REQ(target, rxATR_REQ); rxATR_RES = awgn(txATR_RES, snrdB, 'measured'); txPSL_REQ = receiveATR_RES(initiator, rxATR_RES); rxPSL_REQ = awgn(txPSL_REQ, snrdB, 'measured'); txPSL_RES = receivePSL_REQ(target, rxPSL_REQ); status = receivePSL_RES(initiator, txPSL_RES); coder.internal.errorIf(~status, 'comm:NFC:TPActivationFailed'); nfcPrint.Heading1('End of Transport Protocol Activation'); end function nfcDataExchangeProtocol(initiator, target, snrdB) % Data Exchange Protocol % Reference: ISO/IEC 18092, section 12.6 nfcPrint.NewLine; nfcPrint.Heading1('Start of Data Exchange Protocol (DEP)'); status = nfcDEP(initiator, target, snrdB); coder.internal.errorIf(~status, 'nfc:NFC:DEPFailed'); nfcPrint.Heading1('End of Data Exchange Protocol (DEP)'); nfcPrint.NewLine; end function nfcProtocolDeactivation(initiator, target, snrdB) % Transport Protocol Deactivation % Reference: ISO/IEC 18092, section 12.7 nfcPrint.NewLine; nfcPrint.Heading1('Start of Transport Protocol Deactivation'); txRLS_REQ = transmitRLS_REQ(initiator); rxRLS_REQ = awgn(txRLS_REQ, snrdB, 'measured'); txRLS_RES = receiveRLS_REQ(target, rxRLS_REQ); rxRLS_RES = awgn(txRLS_RES, snrdB, 'measured'); status = receiveRLS_RES(initiator, rxRLS_RES); coder.internal.errorIf(~status, 'comm:NFC:TPDeactivationFailed'); nfcPrint.Heading1('End of Transport Protocol Deactivation'); end
Исследуйте различные методы nfcInitiator, и nfcTarget возражает, чтобы изучить различные команды и протоколы, описанные стандартами NFC. Экспериментируйте с различными системными параметрами как ОСШ, тип UID (Один или Двойной), значение UID, SamplesPerSymbol, чтобы видеть, как они влияют на систему.
ISO/IEC 14443-2 Удостоверения личности - Бесконтактные карты интегральной схемы - карты Близости - Часть 2: степень Радиочастоты и интерфейс сигнала
ISO/IEC 14443-3 Удостоверения личности - Бесконтактные карты интегральной схемы - карты Близости - Часть 3: Инициализация и антистолкновение
Информационные технологии ISO/IEC 18092 - Телекоммуникации и обмен информацией между системами - Около Полевой Коммуникации - Интерфейс и Протокол (NFCIP-1)