加勒比一本heyzo高清视频-免费精品无码av片在线观看-无码国产精品一区二区免费模式-去干成人网-成在人线av无码免费

物聯(lián)傳媒 旗下網(wǎng)站
登錄 注冊
RFID世界網(wǎng) >  技術文章  >  其他  >  正文

如何快速將NFC功能添加到任何應用程序

作者:ioter
來源:RFID世界網(wǎng)
日期:2019-03-12 11:02:23
摘要:如何快速將NFC功能添加到任何應用程序
關鍵詞:NFC

  為了滿足對近場通信(NFC)能力日益增長的需求,開發(fā)人員被要求快速創(chuàng)建優(yōu)化設計。傳統(tǒng)方法的發(fā)展速度緩慢,因為設計人員面臨諸如RF電路優(yōu)化,NFC協(xié)議管理,功耗以及最小設計占用等挑戰(zhàn)。

  為了幫助開發(fā)人員克服這些挑戰(zhàn),恩智浦等公司推出了IC,并支持硬件和軟件,為應用程序添加NFC功能提供了一種更簡單的方法。

  本文將簡要討論NFC如何超越基本的服務點(POS)應用。之后它將介紹恩智浦LPC8N04 NFC解決方案,然后討論如何使用它來創(chuàng)建能夠支持廣泛應用的高效NFC設計。

  為什么選擇NFC

  NFC已經(jīng)成為銷售支付場景中超出其最初使用范圍的應用中的重要特性。開發(fā)商正在智能手機和其他移動設備中利用對NFC的無處不在的支持,以簡化消費,工業(yè)和其他領域的設備控制。

  只需將智能手機靠近智能玩具,家用電器或網(wǎng)絡設備,用戶就可以輕松安全地配置和控制目標系統(tǒng)。來自發(fā)起者的智能手機RF場被稱為接近耦合設備(PCD),為目標供電,稱為接近感應耦合卡(PICC)。

  采用這種方法,任何符合ISO 14443標準的PCD和PICC都可以根據(jù)標準中規(guī)定的調(diào)制和編碼方案,通過用數(shù)據(jù)調(diào)制RF場來執(zhí)行雙向通信。

  NFC MCU

  恩智浦LPC8N04 MCU為NFC設計提供了經(jīng)濟高效的解決方案?;贏RM ®皮質(zhì)® -M0 +處理器核,這4×4mm的24針MCU結合了完整的NFC / RFID子系統(tǒng)與串行接口,GPIO以及存儲器,包括32千字節(jié)閃存,SRAM的8K字節(jié),和4千字節(jié)的EEPROM。除了固有的低功耗要求以外,其完全采集RF能量的能力使其非常適合用于物聯(lián)網(wǎng)(IoT)的無電池連接系統(tǒng),獨立系統(tǒng)中的智能標簽或任何需要優(yōu)化的NFC解決方案的應用。

  為了簡化開發(fā),LPC8N04集成了ARM嵌套向量中斷控制器(NVIC)和串行線調(diào)試(SWD)。這里采用兩個觀察點比較器和四個斷點比較器實現(xiàn),SWD為JTAG測試和調(diào)試提供雙向數(shù)據(jù)連接,并且無需設備上的其他軟件即可訪問系統(tǒng)存儲器。此外,LPC8N04固件還提供完整的應用程序編程接口(API),用于擦除閃存扇區(qū),將數(shù)據(jù)復制到閃存,讀取工廠編程的唯一設備序列號等。

  當然,本文主要關注的功能在于其NFC子系統(tǒng)。為了支持日益增長的支持NFC的應用,該器件使用13.56 MHz接近信令提供完整的NFC雙向通信功能。該器件兼容各種NFC規(guī)范,包括NFC / RFID ISO 14443A,NFC Forum Type 2和MIFARE Ultralight EV1 PICC標準。

  該子系統(tǒng)為硬件和軟件連接提供了一個簡單的接口模型(圖1)。對于硬件接口,子系統(tǒng)的50皮法(pF)內(nèi)部電容與標準NFC天線(例如Molex 1462360021)兼容。因此,開發(fā)人員可以將現(xiàn)成的天線連接到LPC8N04的LA-LB引腳。此外,該器件從RF場恢復其時鐘,無需額外的時鐘組件。

圖1:恩智浦LPC8N04 MCU的集成射頻子系統(tǒng)在其LA-LB引腳提供天線連接,并提供訪問寄存器和SRAM的軟件接口。(圖片來源:恩智浦)

  功能上,NFC讀/寫操作中使用的寄存器(CMDIN,DATAOUT,SR)和SRAM都映射到共享存儲器,由集成仲裁單元管理訪問。在通信會話期間,外部NFC / RFID啟動器讀取和寫入寄存器或SRAM。反過來,在LPC8N04的Arm Cortex-M0 +內(nèi)核上運行的固件訪問寄存器和SRAM,解析消息,并使用相同的共享資源進行適當?shù)膽稹榱吮Wo通信通道,開發(fā)人員可以使用MIFARE協(xié)議的密碼認證方法,根據(jù)需要允許或阻止訪問。

  當外部啟動器在LPC8N04的范圍內(nèi)發(fā)送RF場時,整個通信序列開始。如下所述,RF場可用于將LPC8N04從低功耗休眠模式中喚醒并作為其唯一電源。

  能源管理

  在這些應用中,功耗通常是一個關鍵問題。過去,開發(fā)人員經(jīng)常發(fā)現(xiàn)自己被迫損害功能和性能以最大限度地降低功耗。利用LPC8N04,開發(fā)人員可以利用多種器件功能調(diào)整功率利用率和性能以滿足要求。

  在降低功耗的典型方法中,開發(fā)人員經(jīng)常修改系統(tǒng)時鐘頻率。利用LPC8N04,開發(fā)人員可以使用這種方法顯著降低功耗(圖2)。在最高8 MHz時鐘頻率下,LPC8N04的功耗約為900微安(μA)。降低至1 MHz時鐘速率可將功耗降至200μA左右。除了調(diào)整系統(tǒng)時鐘速率之外,開發(fā)人員還可以利用多種不同的功耗模式,通過選擇性關閉LPC8N04的一部分來降低功耗。

通過降低系統(tǒng)時鐘頻率來降低??NXP LPC8N04電流消耗的圖表

圖2:開發(fā)人員可以通過將系統(tǒng)時鐘從8 MHz最大頻率(曲線6)降低至4 MHz(5),2 MHz(4),1 MHz(3),500 kHz(2)或更高的頻率,顯著降低LPC8N04的電流消耗。甚至250 kHz(1)。(圖片來源:恩智浦)

  與大多數(shù)復雜設備一樣,LPC8N04將子系統(tǒng)組織為不同的存儲器和模擬外設電源域; 數(shù)字內(nèi)核和外設; 以及需要持續(xù)供電的實時時鐘(RTC)和欠壓檢測器(BOD)等電路(圖3)。反過來,集成電源管理單元(PMU)啟用和禁用為模擬和數(shù)字電源域供電的低壓差(LDO)穩(wěn)壓器。

恩智浦LPC8N04 MCU的電源架構圖

圖3:在恩智浦LPC8N04 MCU的電源架構中,電源管理單元(PMU)通過選擇性地啟用或禁用提供模擬和數(shù)字電源域的低壓差(LDO)穩(wěn)壓器來支持多種低功耗模式。(圖片來源:恩智浦)

  通過設置LPC8N04電源控制(PCON)寄存器中的位,開發(fā)人員編程PMU以三種低功耗模式控制對這些域的供電:

  在睡眠模式下,PMU保持兩個域的電源 - 提供功率降低,同時允許快速恢復處理器功能和指令執(zhí)行。

  在深度睡眠模式下,PMU僅禁用模擬域 - 提供保持處理器狀態(tài),外設寄存器和內(nèi)部SRAM的最低功耗模式,但需要增加上電時間以訪問非易失性存儲器。

  在深度掉電模式下,PMU可關閉模擬域和數(shù)字域,從而將功耗降至3μA,但需要延長處理器狀態(tài)恢復時間和指令執(zhí)行時間。

  在所有這三種低功耗模式下,PMU都會關閉處理器內(nèi)核。因此,使用低功耗模式會導致增加喚醒時間以返回完整的活動模式。當然,隨著更深入的低功耗模式,喚醒時間會延長。但實際上,喚醒時間對于大多數(shù)NFC應用來說可能足夠快。在最壞的情況下,通過電源和上電復位實現(xiàn)主動模式的總啟動時間僅約為2.5毫秒(ms)。

  射頻能量收集

  LPC8N04相對較快的喚醒時間為開發(fā)人員提供了利用該設備從發(fā)起者的RF領域本身收集能量的能力的機會。當VNFC(從RF場提取的電壓)升高到閾值以上時,器件電源架構中的電源選擇器會自動將器件的電源從電池切換到收集的電源(再次參見圖3)。開發(fā)人員可以單獨從這個渠道運行LPC8N04,或者僅使用RF能量收集作為電池備份源。雖然源選擇器單元自動選擇最佳源,但開發(fā)人員可以根據(jù)應用要求強制選擇VBAT或VNFC。

  實際上,從收集的RF能量為LPC8N04供電的能力取決于外部讀取器發(fā)射的RF場強以及連接到LPC8N04的接收天線電路的效率。如前所述,開發(fā)人員只需將適當?shù)奶炀€連接到LPC8N04的LA-LB引腳。然而,實際上,最大化接收能量的能力取決于最佳設計的天線電路。

  與任何RFID / NFC設計一樣,天線的電感與RF前端的總輸入電容(天線,接收器和連接寄生效應)形成諧振電路。該組件的總電阻定義了與諧振電路的性能和場強相關的品質(zhì)因數(shù)。例如,較高的連接電阻會降低品質(zhì)因數(shù),從而降低射頻發(fā)射器的有效傳輸范圍。

  設計合適天線的另一個復雜因素是輸入電容和輸入電阻與輸入電壓的依賴關系(LPC8N04的V LA-LB)。隨著輸入電壓的變化,輸入電容的相關變化導致諧振頻率的變化,而輸入電阻的相關變化導致品質(zhì)因數(shù)的變化。天線設計專家通常通過設計最小輸入電壓來解決這些變化。

  快速開發(fā)平臺

  盡管概念上很簡單,但從頭開始實施高效的NFC設計可能會減慢開發(fā)人員的速度,以期快速部署可利用NFC智能手機的廣泛可用性的應用程序。開發(fā)人員可以立即開始開發(fā)基于恩智浦LPC8N04的OM40002開發(fā)板,開發(fā)NFC應用程序,而不是創(chuàng)建自己的系統(tǒng)。LPC8N04板與相關恩智浦軟件開發(fā)套件的組合提供了即時NFC解決方案,以及創(chuàng)建定制硬件設計和軟件應用程序的平臺。

  OM40002板包含兩個由易碎接口分開的部分(如圖4中凹槽之間的垂直線所示)。主處理器(MP)部分包括板頂部的LPC8N04(圖4A右側(cè))和底部的集成天線(圖4B右側(cè))。調(diào)試探頭(DP)部分包括恩智浦ARM Cortex-M0 LPC11U35FHI33MCU和調(diào)試資源(圖4A,左側(cè))。在DP部分的底部(圖4B,左側(cè)),一個5 x 7 LED陣列和一個表面貼裝揚聲器為開發(fā)包中包含的示例應用程序提供了一個簡單的用戶界面機制。在開發(fā)過程中,工程師可以使用全板作為一個完整的系統(tǒng)。對于定制設計,開發(fā)人員可以使用全電路板調(diào)試其應用軟件,然后再將MP部分分開以用作獨立的NFC子系統(tǒng)。

恩智浦OM40002板的圖像

圖4.恩智浦OM40002主板將調(diào)試探頭(DP)部分(A和B左側(cè))和主處理器(MP)部分組合在一起,允許開發(fā)人員將MP部分分開,以將此完整的NFC子系統(tǒng)添加到他們自己的設計中。(圖片來源:恩智浦)

  該電路板預裝了一個在LPC11U35FHI33 MCU上作為固件運行的示例應用程序。該應用使用該電路板的LED陣列和揚聲器,演示LPC8N04與運行由恩智浦提供的免費Android應用的支持NFC的智能手機之間的雙向NFC數(shù)據(jù)交換格式(NDEF)消息。大多數(shù)支持NFC的智能手機和其他移動設備都使用NDEF,它是一種輕量級格式,可將任意數(shù)據(jù)封裝到單個消息中。通過示例Android應用程序,開發(fā)人員可以更清楚地了解可通過NDEF在其智能手機和OM40002板之間交換的數(shù)據(jù)類型和大小。

  NDEF處理

  然而,除了直觀的功能演示之外,示例應用程序還為開發(fā)人員提供了使用LPC8N04處理NDEF消息的關鍵設計模式。包含在恩智浦軟件開發(fā)包中的低級服務例程處理寄存器級事務,而示例應用程序則演示了更高級別的操作。包含在開發(fā)包中的主例程顯示了開發(fā)人員在主處理循環(huán)(清單1)之前如何初始化LPC8N04硬件和相關軟件結構。

  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:恩智浦LPC8N04開發(fā)軟件包提供了一套完整的庫和示例應用軟件,演示關鍵NFC操作的基本設計模式,如讀取此代碼段中所示的NDEF消息。(代碼來源:恩智浦)

  首次調(diào)用時,主例程首先測試以確定是否由于特定的RTC事件(wakeupReason == PMU_DPD_WAKEUPREASON_RTC)指示喚醒計數(shù)器已過期而啟動。如果沒有,例程進入它的主循環(huán),測試讀者的各種命令并作出響應來執(zhí)行適當?shù)牟僮?。例如,如果由于智能手機不在范圍內(nèi)而未發(fā)生NFC活動,則例程會最終超時。

  雖然概念很簡單,但示例應用程序和底層服務例程提供了使用LPC8N04對NDEF消息處理的全面介紹。如清單1所示,示例應用程序的主循環(huán)說明了使用NDEF消息的操作順序。

  在正常操作中,LPC8N04共享內(nèi)存中出現(xiàn)新的NDEF消息會調(diào)用設置標志(sTargetWritten)的中斷。在這個基于信號量的體系結構中,主例程會等待,直到它可以takeMemSemaphore()在將消息(NDEFT2T_GetMessage)加載到其緩沖區(qū)之前聲明信號量()。該例程通過NDEF消息(NDEFT2T_GetNextRecord)工作,提取有效負載并解析結果。

  在此應用程序中,如果有效負載是文本字符串,它將數(shù)據(jù)寫入EEPROM(eepromWriteTag)并啟動LED顯示(startLEDDisplay)。如果相反,有效載荷是MIME類型“application / octet-stream”,它將檢查binData[0]數(shù)據(jù)是否為音樂(binData[0] == 0x53)或滾動速度調(diào)整值(binData[0] == 0x51)。如果是后者,它會將新的滾動速度保存在EEPROM中。如果前者提取音樂數(shù)據(jù)(extractMusic),則將數(shù)據(jù)寫入EEPROM,然后重新啟動音樂播放器(startMusic),如果用戶使音樂播放器運行。

  該軟件包為應用程序和服務例程提供完整的源代碼。例如,開發(fā)人員可以檢查函數(shù)NDEFT2T_GetMessage()和NDEFT2T_GetNextRecord()函數(shù)中的源代碼,以了解讀取和處理NDEF消息的細節(jié)。在很多情況下,開發(fā)人員可能無需修改即可使用這些服務例程,而是將重點放在main()例程和他們自己的應用程序的細節(jié)上。

  結論

  近場通信應用正在進入超越銷售點系統(tǒng)的越來越多的細分市場。然而,對于開發(fā)人員來說,與優(yōu)化射頻性能同時最大限度地降低功耗相關的挑戰(zhàn)甚至可能導致最有經(jīng)驗的工程師。

  通過集成完整的NFC子系統(tǒng),恩智浦LPC8N04 MCU消除了NFC設計的大部分復雜性。對于尋求快速解決方案的開發(fā)人員來說,基于恩智浦LPC8N04的開發(fā)板和軟件提供了一個可立即使用的完整應用程序,以及用于創(chuàng)建定制NFC解決方案的開發(fā)平臺。