Около полевой коммуникации (NFC)

Этот пример показывает вам, как смоделировать связь между двумя устройствами Около полевой коммуникации (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® или обмена данными в форме виртуальных визитных карточек и фотографий.

Системный Setup

Этот пример иллюстрирует протокол 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

Figure Load Modulation contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Target Signal Spectrum contains an object of type line. This object represents Channel 1.

				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, чтобы видеть, как они влияют на систему.

Ссылки

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

  2. ISO/IEC 14443-2 Удостоверения личности - Бесконтактные карты интегральной схемы - карты Близости - Часть 2: степень Радиочастоты и интерфейс сигнала

  3. ISO/IEC 14443-3 Удостоверения личности - Бесконтактные карты интегральной схемы - карты Близости - Часть 3: Инициализация и антистолкновение

  4. Информационные технологии ISO/IEC 18092 - Телекоммуникации и обмен информацией между системами - Около Полевой Коммуникации - Интерфейс и Протокол (NFCIP-1)