【導讀】為了滿(mǎn)足日益增長(cháng)的近場(chǎng)通信 (NFC) 功能需求,開(kāi)發(fā)人員需要快速構建優(yōu)化的設計。傳統方法拖慢了開(kāi)發(fā)進(jìn)程,因為設計人員需應對各種挑戰,如射頻電路優(yōu)化、NFC 協(xié)議管理、功耗、以及最小化設計封裝。
為了幫助開(kāi)發(fā)人員克服這些困難,NXP 等公司推出了 IC 以及支持性軟硬件,提供了一種更簡(jiǎn)單的方法為應用增加 NFC 功能。
本文將簡(jiǎn)要探討 NFC 如何演變到超越基本收銀機 (POS) 應用范疇。接著(zhù),本文將介紹 NXP LPC8N04 NFC 解決方案,然后討論如何利用它構建高效 NFC 設計以支持各種應用。
為何選擇 NFC
NFC 已超出其原始的收銀機支付應用范圍,發(fā)展成為各種應用的重要特性。如今,開(kāi)發(fā)人員利用智能手機和其他移動(dòng)設備對 NFC 的普遍支持,簡(jiǎn)化消費者產(chǎn)業(yè)、工業(yè)和其他領(lǐng)域的設備控制。
只需將智能手機靠近智能玩具、家用電器或者網(wǎng)絡(luò )設備,用戶(hù)就能輕松、安全地配置并控制目標系統。來(lái)自啟動(dòng)器(稱(chēng)為接近耦合器件,PCD)的智能手機射頻場(chǎng)啟動(dòng)目標(稱(chēng)為接近感應耦合卡,PICC)。
通過(guò)這種方法,任何兼容 ISO 14443 的 PCD 和 PICC 都能根據標準中規定的調制和編碼方案,利用數據調制射頻場(chǎng),進(jìn)行雙向通信。
NFC MCU
NXP LPC8N04 MCU 為 NFC 設計提供了一個(gè)高性?xún)r(jià)比解決方案。這種 4 x 4 mm 24 引腳 MCU 基于 Arm® Cortex®-M0+ 處理器核心,結合了全套 NFC/RFID 子系統和串行接口、GPIO、存儲器,包括 32 Kb 閃存、8 Kb SRAM 以及 4 Kb EEPROM。該產(chǎn)品本身功耗要求低,可以?xún)H通過(guò)采集的射頻能量運作,因而非常適合用于物聯(lián)網(wǎng) (IoT) 無(wú)電池連接系統,獨立式系統中的智能標簽,或者任何需要優(yōu)化 NFC 解決方案的應用。
為了簡(jiǎn)化開(kāi)發(fā),LPC8N04 集成了 Arm 嵌套向量中斷控制器 (NVIC) 和串行線(xiàn)調試 (SWD)。其中的 SWD 采用兩個(gè)觀(guān)察點(diǎn)比較器和四個(gè)斷點(diǎn)比較器,可為 JTAG 測試和調試提供雙向數據連接,并提供運行時(shí)系統內存訪(fǎng)問(wèn),無(wú)需在設備上增加額外軟件。此外,LPC8N04 固件為擦除閃存分區、復制數據到閃存、讀取出廠(chǎng)設置的唯一設備序列號等提供完整應用編程接口 (API)。
當然,本文主要討論的重點(diǎn)功能是其 NFC 子系統。該器件旨在支持不斷增長(cháng)的具有 NFC 功能的應用,可通過(guò) 13.56 MHz 接近信號傳輸提供完整的 NFC 雙向通信能力。該器件兼容各種 NFC 規范,包括 NFC/RFID ISO 14443A、NFC Forum 2 型和 MIFARE Ultralight EV1 PICC 標準。
該子系統同時(shí)為硬件和軟件連接提供簡(jiǎn)單的接口模型(圖 1)。對于硬件接口,子系統的 50 皮法 (pF) 內部電容兼容標準 NFC 天線(xiàn),如 Molex 1462360021。因此,開(kāi)發(fā)人員可以將現成的天線(xiàn)連接到 LPC8N04 的 LA-LB 引腳。并且,該設備可從射頻場(chǎng)恢復其時(shí)鐘,無(wú)需額外的時(shí)鐘元件。

圖 1:NXP LPC8N04 MCU 的集成射頻子系統通過(guò) LA-LB 引腳提供天線(xiàn)連接,以及一個(gè)訪(fǎng)問(wèn)寄存器和 SRAM 的軟件接口。(圖片來(lái)源:NXP)
從功能上而言,NFC 讀/寫(xiě)操作中用到的寄存器(CMDIN、DATAOUT、SR)和 SRAM 都映射到共享存儲器中,訪(fǎng)問(wèn)權由集成仲裁單元進(jìn)行管理。通信會(huì )話(huà)期間,外部 NFC/RFID 啟動(dòng)器讀寫(xiě)寄存器或 SRAM。反過(guò)來(lái),在 LPC8N04 Arm Cortex-M0+ 核心上運行的固件會(huì )評估寄存器和 SRAM,解析信息,并使用相同的共享資源酌情回復。為了保護通信通道,開(kāi)發(fā)人員可以使用 MIFARE 協(xié)議的密碼驗證方法,根據需要允許或阻止訪(fǎng)問(wèn)。
當外部啟動(dòng)器發(fā)射的射頻場(chǎng)處于 LPC8N04 范圍內時(shí),整個(gè)通信序列啟動(dòng)。射頻場(chǎng)可用于將 LPC8N04 從低功耗休眠模式喚醒,并如下方所述用作其唯一電源。
電源管理
功耗通常是這些應用的關(guān)鍵考慮事項。過(guò)去,開(kāi)發(fā)人員為了將功耗最小化,不得不在功能和性能上折衷。借助 LPC8N04,開(kāi)發(fā)人員能利用多種器件特性協(xié)調功耗和性能,以滿(mǎn)足要求。
在降低功耗的典型方法中,開(kāi)發(fā)人員通常會(huì )修改系統時(shí)鐘頻率。通過(guò) LPC8N04,開(kāi)發(fā)人員能使用此方法顯著(zhù)降低功耗(圖 2)。在最大時(shí)鐘頻率 8 MHz 下,LPC8N04 消耗約 900 微安 (µA) 電流。時(shí)鐘速率降低至 1 MHz 時(shí),功耗將降至 200 µA 左右。除了調整系統時(shí)鐘速率外,開(kāi)發(fā)人員還可使用多種不同的功耗模式,通過(guò)選擇性地關(guān)閉 LPC8N04 的某些部分來(lái)降低功耗。

圖 2:通過(guò)將系統時(shí)鐘從最大頻率 8 MHz(曲線(xiàn) 6)降低至 4 MHz (5)、2 MHz (4)、1 MHz (3)、500 kHz (2) 甚至 250 kHz (1),開(kāi)發(fā)人員能顯著(zhù)降低 LPC8N04 電流消耗。(圖片來(lái)源:NXP)
正如大多數復雜器件一樣,LPC8N04 針對存儲器和模擬外設、數字核心和外設、實(shí)時(shí)時(shí)鐘 (RTC) 和欠壓檢測器 (BOD) 等需要持續電源的電路,將子系統分配到不同的功率域(圖 3)。反過(guò)來(lái),集成電源管理單元 (PMU) 可啟用或禁用為模擬和數字功率域供電的低壓差 (LDO) 穩壓器。

圖 3:在 NXP LPC8N04 MCU 的電源架構中,電源管理單元 (PMU) 支持多種低功率模式,可選擇性地啟用或禁用為模擬和數字功率域供電的低壓差 (LDO) 穩壓器。(圖片來(lái)源:NXP)
通過(guò)設置 LPC8N04 電源控制 (PCON) 寄存器的位數,開(kāi)發(fā)人員可對 PMU 編程,以三種低功率模式控制這些域的供電:
● 休眠模式中,PMU 保持兩個(gè)域的供電——降低功耗的同時(shí),允許快速恢復處理器功能和指令執行。
● 深度休眠模式中,PMU 只禁用模擬域——提供維持處理器狀態(tài)、外設寄存器和內部 SRAM 的最低功率模式,但需要增加開(kāi)機時(shí)間,以訪(fǎng)問(wèn)非易失性存儲器。
● 深度省電模式中,PMU 同時(shí)關(guān)閉模擬和數字域,將功耗降低至僅 3 µA,代價(jià)則是處理器狀態(tài)和指令執行恢復的延遲更長(cháng)。
在所有這三種低功耗模式中,PMU 關(guān)閉處理器核心。因此,使用低功耗模式將增加返回到完全活動(dòng)模式所需的喚醒時(shí)間。當然,低功耗模式越深,喚醒時(shí)間就越長(cháng)。但實(shí)際上,喚醒時(shí)間對于大多數 NFC 應用而言都已經(jīng)足夠快。最糟糕的情況下,從打開(kāi)電源到上電復位以達到活動(dòng)模式的總啟動(dòng)時(shí)間僅 2.5 毫秒 (ms) 左右。
射頻能量收集
LPC8N04 相對快速的喚醒時(shí)間使開(kāi)發(fā)人員有機會(huì )利用器件的能量收集能力從啟動(dòng)器的射頻場(chǎng)收集能量。當 VNFC(從射頻場(chǎng)獲得的電壓)上升到閾值之上,該器件的電源架構中的電源選擇器自動(dòng)將器件電源從電池模式切換到由采集能量供電(見(jiàn)圖 3)。開(kāi)發(fā)人員可以?xún)H通過(guò)此電源操作 LPC8N04,或者只使用射頻能量收集作為電池備份電源。盡管能源選擇器單元可自動(dòng)選擇最佳電源,開(kāi)發(fā)人員能根據應用要求強制選擇 VBAT 或 VNFC。
實(shí)際上,通過(guò)采集射頻能量為 LPC8N04 供電的功能取決于外部讀取器發(fā)射的射頻場(chǎng)強度、以及連接到 LPC8N04 的接收天線(xiàn)電路的能效。如前所述,開(kāi)發(fā)人員僅需將適當的天線(xiàn)連接到 LPC8N04 的 LA-LB 引腳。但實(shí)際上,接收能量最大化的功能取決于經(jīng)過(guò)設計優(yōu)化的天線(xiàn)電路。
無(wú)論何種 RFID/NFC 設計,天線(xiàn)電感均會(huì )與射頻前端總輸入電容(天線(xiàn)、接收器和連接寄生電容)形成諧振電路。該組件的總電阻決定了品質(zhì)因素,它與諧振電路的性能和場(chǎng)強度有關(guān)。例如,更高的連接電阻會(huì )降低品質(zhì)因素,從而降低射頻發(fā)射器的有效傳輸范圍。
由于輸入電容及輸入電阻與輸入電壓(對于 LPC8N04 就是 VLA-LB)有關(guān),設計適當的天線(xiàn)變得更加復雜。輸入電壓改變時(shí),輸入電容的相關(guān)改變造成諧振頻率改變,同時(shí)輸入電阻的相關(guān)改變造成品質(zhì)因素改變。天線(xiàn)設計專(zhuān)家通常采用最小輸入電壓設計以應對這些變化。
快速開(kāi)發(fā)平臺
雖然概念很簡(jiǎn)單,但對于利用具有 NFC 功能的智能手機普及性的應用,如果開(kāi)發(fā)人員希望快速部署應用,從頭實(shí)現高效 NFC 設計會(huì )減緩其進(jìn)度。通過(guò)在基于 NXP LPC8N04 的 OM40002 開(kāi)發(fā)板上搭建,開(kāi)發(fā)人員可以即刻開(kāi)始開(kāi)發(fā) NFC 應用,無(wú)需創(chuàng )建自己的系統。LPC8N04 板和相關(guān) NXP 軟件開(kāi)發(fā)套件的組合提供了一種直接的 NFC 解決方案,以及用于構建自定義硬件設計和軟件應用的平臺。
OM40002 板包括兩部分,由可拆分的接口分隔(見(jiàn)圖 4 中凹口之間的垂直線(xiàn))。主處理器 (MP) 部分包括位于板頂部的 LPC8N04(圖 4A,右)和底部的集成天線(xiàn)(圖 4B,右)。調試探頭 (DP) 部分包括 NXP Arm Cortex-M0 LPC11U35FHI33 MCU 和調試資源(圖 4A,左)。在 DP 部分的底部(圖 4B,左),5 x 7 LED 陣列和表面貼裝揚聲器為開(kāi)發(fā)套件中所含的示例應用提供簡(jiǎn)單的用戶(hù)界面機制。開(kāi)發(fā)期間,工程師能將整塊開(kāi)發(fā)板用作一個(gè)完整的系統。對于定制設計,開(kāi)發(fā)人員能使用整塊開(kāi)發(fā)板調試其應用軟件,并可在稍后拆下 MP 部分,用作獨立 NFC 子系統。

圖 4:NXP OM40002 板結合了調試探頭 (DP) 部分(A 和 B 左側)和主處理器 (MP) 部分,開(kāi)發(fā)人員可以拆分 MP 部分,將此完整 NFC 子系統添加到自己的設計中。(圖片來(lái)源:NXP)
該開(kāi)發(fā)板預裝示例應用,在 LPC11U35FHI33 MCU 上作為固件來(lái)運行。利用該開(kāi)發(fā)板的 LED 陣列和揚聲器并并運行一個(gè) NXP 提供的免費 Android 應用,此應用展示了 LPC8N04 和支持 NFC 功能的智能手機之間如何進(jìn)行雙向 NFC 數據交換格式 (NDEF) 消息傳輸。NDEF 用于大多數具有 NFC 功能的智能手機和其他移動(dòng)設備,是一種輕量級格式,單一消息內可包含任意數據。通過(guò)示例 Android 應用,開(kāi)發(fā)人員能更清晰地了解可在智能手機和 OM40002 板之間以 NDEF 交換的數據類(lèi)型和大小。
NDEF 處理
除了能直接演示功能,示例應用為開(kāi)發(fā)人員提供了使用 LPC8N04 處理 NDEF 信息的關(guān)鍵設計模式。NXP 軟件開(kāi)發(fā)套件中包含低層服務(wù)例程,用于處理寄存器層級的事務(wù),而示例應用則用于展示高層操作。開(kāi)發(fā)套件中包含主例程,用于向開(kāi)發(fā)人員展示如何在主處理循環(huán)之前初始化 LPC8N04 硬件和相關(guān)軟件結構(列表 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();
...
列表 1:NXP LPC8N04 開(kāi)發(fā)軟件套件提供了全套資源庫和示例應用軟件,該軟件對關(guān)鍵 NFC 操作(如本代碼片段所示,讀取 NDEF 信息)的基本設計模式進(jìn)行演示。(代碼來(lái)源:NXP)
首次調用時(shí),主例程首先測試其是否是由于表示喚醒計數器已過(guò)期的特定 RTC 事件 (wakeupReason == PMU_DPD_WAKEUPREASON_RTC) 而啟動(dòng)。如果不是,例程進(jìn)入主循環(huán),測試讀取器的各種指令并執行相關(guān)操作以進(jìn)行響應。如果沒(méi)有 NFC 活動(dòng)(例如,智能手機不再處于范圍內),則例程最終會(huì )超時(shí)。
盡管概念簡(jiǎn)單,示例應用和底層服務(wù)例程全方位介紹了使用 LPC8N04 的 NDEF 的信息處理。如列表 1 所示,示例應用的主循環(huán)闡明了處理 NDEF 信息的操作順序。
正常操作中,LPC8N04 共享存儲器中如果出現新的 NDEF 信息,則會(huì )調用中斷,且中斷將設置一個(gè)標記 (sTargetWritten)。在這一基于信號量的架構中,在加載信息 (NDEFT2T_GetMessage) 到其緩沖區之前,主例程一直等待,直到能聲明信號量 (takeMemSemaphore())。例程會(huì )審查 NDEF 信息 (NDEFT2T_GetNextRecord),提取有效載荷并解析結果。
在本應用中,如果有效載荷為文本字符串,例程將數據寫(xiě)入到 EEPROM (eepromWriteTag) 中并開(kāi)啟 LED 顯示 (startLEDDisplay)。如果有效載荷為 MIME 類(lèi)型“application/octet-stream”,例程會(huì )檢查 binData[0] 的值,以查看是否數據為音樂(lè ) (binData[0] == 0x53) 或滾動(dòng)速度調整 (binData[0] == 0x51)。如果是后者,則將新的滾動(dòng)速度保存到 EEPROM 中。如果是前者,例程會(huì )提取音樂(lè )數據 (extractMusic),將數據寫(xiě)入到 EEPROM,并且如果用戶(hù)正在運行音樂(lè )播發(fā)器,還要重啟音樂(lè )播發(fā)器 (startMusic)。
該軟件套件提供了該應用和服務(wù)例程的全部源代碼。例如,開(kāi)發(fā)人員能查看 NDEFT2T_GetMessage() 和 NDEFT2T_GetNextRecord() 函數中的源代碼,以了解讀取和處理 NDEF 信息的詳情。許多情況下,開(kāi)發(fā)人員可能無(wú)需修改就能直接使用服務(wù)例程,從而專(zhuān)注于應用的具體細節和 main() 例程。
總結
近場(chǎng)通信應用正不斷擴展到收銀機系統以外越來(lái)越多的領(lǐng)域。但對于開(kāi)發(fā)人員而言,要在優(yōu)化射頻性能的同時(shí)最小化功耗,其中涉及的一系列挑戰即使對于最有經(jīng)驗的工程師來(lái)說(shuō)也十分棘手。
通過(guò)集成全套 NFC 子系統,NXP LPC8N04 MCU 消除了 NFC 設計的大部分復雜性。對于尋求快速解決方案的開(kāi)發(fā)人員來(lái)說(shuō),NXP 基于 LPC8N04 的開(kāi)發(fā)板和軟件提供了一個(gè)完整的即用型示例應用和一個(gè)開(kāi)發(fā)平臺,從而輕松構建自己的定制 NFC 解決方案。
推薦閱讀: