Jste zde

Jak rychle implementovat NFC do libovolné aplikace

Aby bylo možné uspokojit rostoucí poptávku po komunikačních schopnostech na bázi technologie NFC je nutné zrychlit vývoj. Standartní postupy jsou pomalé, protože se během vývoje potýkáme s problémy, jako je optimalizace obvodů RF, řízení protokolů NFC a také nároky na prostor. Nelehkým úkolem je vytvořit aplikaci s minimální spotřebou energie.

Společnost NXP představila integrované obvody, hardware a software, které poskytují jednodušší cestu k implementací NFC do aplikace. Tím se odstraní všechny výše zmíněné problémy s návrhem. Tento článek bude stručně informovat o tom, jak se NFC vyvinula a proč se tak masivně rozšířila. Zaměříme se na řešení pomocí LPC8N04. Jak využít jeho vlastností k vytvoření efektivního návrhu NFC, které bude schopno podporovat širokou škálu aplikací.

Proč NFC

NFC technologie se ukázala jako efektivní řešení pro získávání informací, kontrolu spotřebičů v domácnosti i průmyslu. Masivní rozšíření této technologie v mobilních telefonech umožňuje její využití nad rámec původního použití (platební transakce).

Jednoduše a bezpečně konfigurujete a řídíte konkrétní zařízení tím, že přiblížíte mobilní telefon. RF pole inteligentního telefonu (Iniciátor), nazývané proximity coupling device (PCD), napájí cíl, nazývaný proximity inductive coupling card (PICC). Tím může každá PCD a PICC kompatibilní s ISO 14443 provádět obousměrnou komunikaci pomocí modulace RF pole, které nese data a kódovací schémata uvedené ve standardu.

Mikroprocesor s NFC

Mikroprocesor LPC8N04 nabízí výhodné řešení pro technologii NFC. Srdcem je jádro Arm Cortex-M0+ a je integrována kompletní funkcionalita NFC / RFID. Nesmí chybět několik pinů pro GPIO a 32 kbitů Flash paměť, 8 kbitů SRAM a 4 Kbytes EEPROM. Vše je ukryto v pouzdře o velikosti 4 x 4 mm s 24 piny. Splňuje náročné požadavky na nízkou spotřebu a je schopný pracovat výhradně s využitím RF energie.  Proto je vhodná pro bezdrátové systémy, inteligentní tagy ve standalone systémech nebo pro libovolnou aplikaci vyžadující technologii NFC.

LPC8N04 má integrovaný řadič vektorového přerušení (NVIC- Arm Nested Vectored Interrupt Controller) a podporu ladění (SWD- Serial Wire Debug). Disponuje dvěma komparátory hodin a čtyřmi breakpoint komparátory. SWD poskytuje obousměrné datové připojení pro JTAG a ladění a přístup k systémové paměti za běhu kódu bez potřeby dalšího softwaru. Navíc firmware LPC8N04 obsahuje kompletní sadu API funkcí pro vymazání sektorů ve flash paměti, zápis dat do paměti, vyčtení továrního jedinečného sériového čísla zařízení a další.

Samozřejmostí jsou funkce podporující subsystém NFC. Poskytuje kompletní obousměrnou komunikaci NFC se signalizací přiblížení na frekvenci 13,56 MHz. Zařízení je kompatibilní se širokou škálou specifikací NFC, včetně standardů NFC / RFID ISO 14443A, NFC Forum Type 2 a MIFARE Ultralight EV1 PICC. Podsystém poskytuje jednoduchý model rozhraní pro hardwarové i softwarové připojení (obrázek 1). Interní kapacita subsystému je 50 pF, což je kompatibilní se standardními anténami NFC, jako je  1462360021 od Molexu. Tuto anténu připojíme přímo k pinům LA a LB. Zařízení navíc využívá hodiny z RF pole, čímž eliminuje potřebu dodatečných hodinových komponent.

Obrázek 1: NXP LPC8N04 MCU s integrovaným subsystémem NFC umožňuje přímé připojení antény na piny LA-LB. Má integrované softwarové rozhraní, které umožňuje přistup k registrům a SRAM paměti. (Zdroj obrázku: NXP)

Registry CMDIN, DATAOUT, SR a paměť SRAM, které se používají v operacích NFC READ / WRITE, jsou namapovány na sdílenou paměť spravovanou integrovanou rozhodující jednotkou. Iniciátor NFC / RFID - (PCD) během komunikace automaticky čte a zapisuje do registrů či SRAM paměti.

Firmware běžící na jádře Arm Cortex-M0+ přistupuje k registrům a paměti SRAM, analyzuje zprávy a odpovídá podle potřeby. Chcete-li zvýšit bezpečnost komunikačního kanálu můžete využít metodu autentizace pomocí hesla, která je součástí protokolu MIFARE, a tím povolit nebo blokovat přístup.

Celá komunikační sekvence se spustí, když RF pole PCD se dostane do dosahu LPC8N04. RF pole probudí LPC8N04 z režimů spánku a slouží jako jediný zdroj energie, jak je popsáno níže.

Řízení spotřeby

Spotřeba energie je obvykle v těchto aplikacích kritická. V minulosti se často volil kompromis mezi výkonem a funkcionalitou, aby se minimalizovala spotřeba energie. Software LPC8N04 nám pomůže najít správný kompromis mezi výkonem a spotřebou, abychom splnili náročné požadavky. Mezi typické cesty k omezení výkonu patří změna frekvence systémových hodin. Což vede k výraznému snížení spotřeby energie (obrázek 2). Při maximální kmitočtové frekvenci 8 MHz LPC8N04 spotřebovává přibližně 900 μA. Snížení hodin na 1 MHz klesá spotřeba energie na přibližně 200 μA. Kromě nastavení frekvence systémových hodin můžeme využít řady různých režimů napájení, které snižují spotřebu energie selektivním vypnutím jednotlivých částí LPC8N04.

Obrázek 2: Můžeme výrazně snížit spotřebu LPC8N04 snížením frekvence systémových hodin z maximální frekvence 8 MHz (křivka 6) na 4 MHz (5), 2 MHz (4), 1 MHz (3), 500 kHz (2) nebo dokonce na 250 kHz (1). (Zdroj obrázku: NXP)

Subsystémy jsou rozděleny do různých napájecích částí. A to na paměti a analogové periferie, digitální jádro a periferie, hodiny reálného času (RTC) a detektor výpadku napájení(BOD), které musí být trvale napájeno (obrázek 3). Jednotka řízení spotřeby (PMU) umožňuje povolit či zakázat regulátory napájení (LDO), které napájí analogové a digitální části.

Obrázek 3: V architektuře napájení LPC8N04 je jednotka pro správu napájení (PMU), která podporuje několik režimů nízkého výkonu tím, že selektivně povoluje nebo vypíná regulátory (LDO), které napájí analogové a digitální výkonové části. (Zdroj obrázku: NXP)

Pomocí registru PCON lze naprogramovat PMU do tří různých napájecích režimů:

  • Režim spánku: PMU udržuje napájení obou částí - poskytuje snížení výkonu a umožňuje rychlé obnovení funkce procesoru a provádění instrukcí.
  • Režim hlubokého spánku: PMU deaktivuje pouze analogovou část - poskytuje režim s nejnižším výkonem. Uchovává aktivní procesor, periferní registry a interní SRAM, ale vyžaduje delší dobu zapnutí pro přístup k nezávislé paměti.
  • Režim hlubokého vypnutí: PMU vypíná jak analogovou, tak digitální část. Což snižuje spotřebu energie pouze na 3 μA , ale za cenu delšího času pro obnovení stavu procesoru a provádění instrukcí.

Ve všech třech režimech PMU se vypne procesorové jádro. Výsledkem toho je, že přibude doba nutná k probuzení a návratu do plného aktivního režimu. Samozřejmě, že doba probuzení se prodlužuje s hlubšími režimy. V praxi jsou však časy probuzení dostatečně rychlé pro většinu aplikací NFC. V nejhorším případě je celková doba probuzení pro dosažení aktivního režimu zhruba 2,5 ms.

RF energy harvesting

Relativně rychlý čas probuzení LPC8N04 poskytuje příležitost využít schopnosti zařízení získat energii ze samotného RF pole. Když VNFC (napětí získané z RF pole) stoupne nad prahovou hodnotu, selektor zdroje v architektuře napájení automaticky přepne zdroj napájení z akumulátoru na přívod energie (viz obrázek 3). LPC8N04 tak můžeme provozovat výhradně z tohoto zdroje nebo energii z RF pole využít jako záložní zdroj baterie. Přestože selektor automaticky vybírá nejlepší zdroj, můžeme si vynutit výběr VBAT nebo VNFC, jak to vyžadují požadavky aplikace.

Množství získané RF energie závisí na intenzitě pole vysílané externí čtečkou a účinnosti obvodu přijímací antény připojené k LPC8N04. Vhodná anténa se připojuje k pinům LA a LB. V praxi však maximální přijatá energie závisí na optimálně navrženém obvodu antény.

Stejně jako u všech konstrukcí RFID / NFC, indukčnost a kapacita antény vytváří rezonanční obvod. Celkový odpor této sestavy definuje Q faktor, který se týká výkonu rezonance a intenzity pole. Například vyšší odpor připojení snižuje Q faktor, čímž se snižuje efektivní přenosový rozsah pro RF vysílač.

Další komplikace při navrhování vhodné antény vyplývá ze závislosti vstupní kapacity a vstupního odporu na vstupním napětí (VLA-LB pro LPC8N04). Při změnách vstupního napětí se mění vstupní kapacita, a tím i rezonanční frekvence. Změna vstupního odporu vede ke změně faktoru kvality. Při návrhu antény se obvykle kvůli tomu počítá s minimální možnou hodnotou vstupního napětí.

Rychlá platforma pro vývoj

Spíše než vytvářet vlastní systém, můžeme okamžitě začít vyvíjet aplikace NFC tím, že použijeme vývojovou desku OM40002, která je postavena na MCU LPC8N04. Kombinace LPC8N04 a příslušného softwarového balíčku od NXP poskytuje okamžité řešení pro NFC, stejně jako platformu pro vytváření vlastních návrhů hardwaru a softwarových aplikací.

Deska OM40002 se skládá ze dvou sektorů, které lze oddělit odlomením (viděno jako svislá čára mezi zářezy na obr. 4). Hlavní sektor s procesorem (MP) obsahuje LPC8N04 na horní straně desky (obr. 4A, vpravo) a integrovanou anténu na spodní straně (obr. 4B, vpravo). Sektor ladění (DP) obsahuje zařízení Arm Cortex-M0 LPC11U35FHI33 a zdroje ladění (obrázek 4A, vlevo). Na spodní straně sektoru ladění (obrázek 4B, vlevo) je 5 x 7 pole LED a SMD reproduktor. Ukázková aplikace uživatelského rozhraní, která je součástí softwarového balíčku, využívá právě tyto komponenty. U vlastního návrhu můžeme použít celou desku k ladění aplikačního softwaru a později odpojit procesorový sektor MP, který se použije jako samostatný subsystém NFC.

Obrázek 4. Deska NXP OM40002 kombinuje ladící sektor (DP) (levá strana A a B) a hlavní sektor s procesorem (MP), který lze oddělit a použít ho jako kompletní NFC subsystém k vlastním návrhům. (Zdroj obrázku: NXP)

Deska je dodávána s nahraným ukázkovým firmware v MCU LPC11U35FHI33. Aplikace využívá LED pole a reproduktor, aby nám ukázala obousměrnou výměnu dat NFC (NDEF) mezi zařízením LPC8N04 a smartphonem, kde je spuštěna bezplatná aplikace od společností NXP. NDEF je jednoduchý formát, který zapouzdřuje libovolná data do jedné zprávy. Pomocí ukázkové aplikace pro Android mohou vývojáři lépe pochopit typ a velikost dat, které lze vyměňovat prostřednictvím NDEF mezi smartphony a deskou OM40002. Pro vytvoření vlastní aplikace pro Android můžete využít speciální knihovnu TapLinx od NXP.

Zpracování NDEF

Ukázková aplikace poskytuje klíčové vzory pro zpracování zpráv NDEF. Součástí balíčku NXP pro vývoj jsou nízkoúrovňové servisní rutiny -  zpracování transakce na úrovni registru, zatímco vzorová aplikace ilustruje operace vyšší úrovně. Hlavní rutina ukazuje, jak by se měl inicializovat hardware LPC8N04 a přidružené softwarové struktury před hlavní smyčkou (výpis 1).

int main(void)
{
                int temp;
                uint16_t decPosition, digit, prevDigit, index, textSize;
                uint32_t tempSpeed;
                bool initDispStarted = false;
                PMU_DPD_WAKEUPREASON_T wakeupReason;
    Init();
    wakeupReason = Chip_PMU_PowerMode_GetDPDWakeupReason();
    if(wakeupReason == PMU_DPD_WAKEUPREASON_RTC) {
                /* Blink LED for second */
                LPC_GPIO->DATA[0xFFF] = 0xE60U;
                Chip_TIMER_SetMatch(LPC_TIMER32_0, 2, 1000*100 + Chip_TIMER_ReadCount(LPC_TIMER32_0));
                Chip_TIMER_ResetOnMatchDisable(LPC_TIMER32_0, 2);
                Chip_TIMER_StopOnMatchDisable(LPC_TIMER32_0, 2);
                Chip_TIMER_MatchEnableInt(LPC_TIMER32_0, 2);
                __WFI();
    }
    else {
    . . .
      /* Wait for a command. Send responses based on these commands. */
      while (hostTicks < hostTimeout) {
    . . .
        if ((sTargetWritten) && takeMemSemaphore())  {
          sTargetWritten = false;
          if (NDEFT2T_GetMessage(sNdefInstance, sData, sizeof(sData))) {
            char * data;
            uint8_t *binData;
            int length;
            NDEFT2T_PARSE_RECORD_INFO_T recordInfo;
            while (NDEFT2T_GetNextRecord(sNdefInstance, &recordInfo)) {
              if ((recordInfo.type == NDEFT2T_RECORD_TYPE_TEXT) && (strncmp((char *)recordInfo.pString, "en", 2) == 0)) {
                data = NDEFT2T_GetRecordPayload(sNdefInstance, &length);
                strncpy(g_displayText, data, (size_t)length);
                g_displayText[length] = 0;
                g_displayTextLen = (uint8_t)length;
                eepromWriteTag(EE_DISP_TEXT, (uint8_t *)g_displayText, (uint16_t)(((uint16_t)length+4) & 0xFFFC));
                startLEDDisplay(true);
              }
              else if((recordInfo.type == NDEFT2T_RECORD_TYPE_MIME) && (strncmp((char *)recordInfo.pString, "application/octet-stream", 24) == 0)) {
                binData = NDEFT2T_GetRecordPayload(sNdefInstance, &length);
                if(binData[0] == 0x53) {
                  extractMusic(&binData[1]);
                  eepromWriteTag(EE_MUSIC_TONE, (uint8_t *)&binData[1], (uint16_t)(((uint16_t)length+2) & 0xFFFC));
                  if(musicInProgress) {
                    stopMusic();
                    startMusic();
                  }
                }
                else if(binData[0] == 0x51) {
                  Chip_TIMER_MatchDisableInt(LPC_TIMER32_0, 0);
                  desiredSpeed = (uint8_t)(binData[1] + 5U);
                  if((desiredSpeed < 5) || (desiredSpeed > 30)) {
                    desiredSpeed = 20;
                  }
                  Chip_TIMER_SetMatch(LPC_TIMER32_0, 0, 1000*LED_REFRESH_RATE_MS + Chip_TIMER_ReadCount(LPC_TIMER32_0));
                  Chip_TIMER_MatchEnableInt(LPC_TIMER32_0, 0);
                  eepromWriteTag(EE_SCROLL_SPEED, (uint8_t *)&binData[1], (uint16_t)(((uint16_t)length+3) & 0xFFFC));
                }
              }
            }
          }
          releaseMemSemaphore();
    . . .

Výpis 1: Vývojový softwarový balíček NXP poskytuje kompletní sadu knihoven a ukázkový aplikační software se základními vzory pro klíčové operace NFC. (Zdroj kódu: NXP)

Při prvním volání se hlavní rutina nejprve zkontroluje, zda se spustila kvůli určitému eventu od RTC (wakeupReason == PMU_DPD_WAKEUPREASON_RTC), který indikuje, že wake-up counter vypršel. Pokud tomu tak není, rutina vstoupí do hlavní smyčky, prochází různé příkazy od čtečky a provádí příslušné odpovědi. Rutina se ukončí, pokud nedojde k žádné aktivitě NFC, protože například smartphone není v dosahu.

Jak je znázorněno ve Výpisu 1, hlavním cyklem vzorové aplikace je sekvence operací pro práci se zprávami NDEF. Při normálním provozu vzhled nové zprávy NDEF ve sdílené paměti LPC8N04 vyvolá přerušení, které nastaví příznak (sTargetWritten). V této architektuře založené na semaforu, hlavní rutina čeká, aby mohla přepnout semafor (takeMemSemaphore ()) před odesláním zprávy do vyrovnávací paměti (NDEFT2T_GetMessage). Rutina pracuje prostřednictvím zprávy NDEF (NDEFT2T_GetNextRecord), extrahuje užitečná data(payload) a analyzuje výsledek.

V této aplikaci jsou užitečná data(payload) textový řetězec. Zapíše data do EEPROM (eepromWriteTag) a spustí LED displej (startLEDDisplay). Pokud je namísto užitečných dat kódová zpráva typu "application / octet-stream", zkontroluje hodnotu binData [0], zda data odpovídají hudbě (binData [0] == 0x53) nebo se jedná o nastavení rychlosti posuvu (binData [0] = = 0x51). Pokud se jedná o první možnost extrahuje hudební data (extractMusic), zapíše data do EEPROM a restartuje hudební přehrávač (startMusic) - uživatel má spuštěný hudební přehrávač. Pokud se jedná o druhou možnost, tak uloží novou rychlost posuvu v paměti EEPROM.

Softwarový balíček poskytuje kompletní zdrojový kód pro aplikační a servisní rutiny. Například vývojáři mohou prozkoumat zdrojový kód a zjistit specifika čtení a zpracování zpráv NDEF ve funkcích NDEFT2T_GetMessage () a NDEFT2T_GetNextRecord (). V mnoha případech budou vývojáři pravděpodobně schopni využívat rutiny bez modifikací a místo toho se zaměří na rutinu main () a věnovat se vlastní aplikaci.

Závěr

Aplikace s technologií NFC se rozšiřuje do všech oblastí. Vývoj celého systému je zdlouhavý, a navíc ho provází nemalé problémy (optimalizace výkonu RF při minimální spotřebě energie, návrh antény atd). Integrací kompletního NFC subsystému pomocí procesoru LPC8N04 eliminuje složitost návrhu NFC. Ideální volba pro ty, kteří hledají rychlé řešení, je použití vývojové desky OM40002 a softwarového balíčeku od NXP. Poskytují kompletní aplikaci připravenou k okamžitému použití a vývojovou platformu pro vytváření vlastních řešení NFC.

Článek vyšel v originále " How to Rapidly Add NFC Capability to Any Application"  na webu DigiKey.com

Hodnocení článku: