NFC Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

NFC Knowledge Base

Discussions

Sort by:
  NXP offers FW update code as part of the SW6705.   All PN7160 FW versions including ".c" files are available on PN7160 Github.    PN7160 is typically delivered with the initial FW 12.50.05. To ensure full reliable functionality, it is highly recommended to update the FW on 12.50.09 (or latest). The FW update might be also helpful if you need to restore the default EEPROM settings.  The FW source data are inside the sFWudpate folder.  phDnldNfc_UpdateSeq.c -> FW Version 12.50.05 phDnldNfc_UpdateSeq_12_50_09.c -> FW Version 12.50.09 The phDnldNfc_UpdateSeq.c is executed, which means what is inside of this "C" file is pushed to the PN7160 EEPROM.  So, if you want to update from 12.50.05 to 12.50.09. You need to copy content from phDnldNfc_UpdateSeq_12_50_09.c to The phDnldNfc_UpdateSeq.c.  Also, make sure that the content in phDnldNfc_UpdateSeq_12_50_09.c is commended.   Once that's done, you can debug the code.  Then you can check the progress in "Terminal"    Tomas Parizek  Customer Application Support 
View full article
The PN5180 offers a low-power card detection (LPCD) feature, which allows to power down the reader for a certain period of time to safe the energy. After this time the reader must become active again to poll for the cards. If no card has been detected, the reader can go back to the power down state. PN5180 LPCD cycle time includes standby time and VBAT time. In a normal case, standby time is 200ms (user can define it),   standby current is 15uA, VBATON current is 7500uA, FieldON current: 200mA.  Average current is about 200uA, it depends on your settings and application.   This article describes how to configure PN5180 LPCD using NXP Cockpit Tool and using NXP NFC Reader library.   1  PN5190 LPCD Overview PN5180 LPCD operates in two modes: auto calibration mode and self-calibration mode. Auto calibration mode:  everything done automatically Self-calibration mode:   calibration must be done manually before starting the LPCD.   1.1  Auto Calibration Mode ( 00b) The LPCD calibration is done automatically when the LPCD is started, using the gear and threshold as defined in the EEPROM. This mode always uses the same gear for the LPCD, and is the fast and easiest way to start the LPCD.  It is recommended to choose a gear, which always keeps the ITVDD and field strength limits, so normally, the highest gear number. Auto calibration mode is most commonly used, it is a standard use case. Below parameters need to be configured correctly in EEPROM   LPCD_REFERENCE_VALUE       LPCD_REFVAL_GPO_CONTROL      LPCD_THRESHHOLD  ( 0x37) LPCD wakes up, if current AGC during “ping” > AGC Reference + LPCD_THRESHOLD or< AGC Reference -LPCD_THRESHOLD Minimum LPCD_THRESHOLD = 03…08 (very sensitive) Maximum LPCD_THRESHOLD = 40 … 50 (very robust)    LPCD_FIELD_ON_TIME  (0x36) RF on time in 8µs, excluding the fix time .   Fix time = 62µs 01 => RF on = 70µs 02 => RF on = 78µs 03 => RF on = 86µs 10 => RF on = 190µs   1.2  Self Calibration Mode (01b) The LPCD calibration must be manually triggered, with reading or writing into the AGCREF_CONFIG register.   Reading from this register - without prior writing - starts an LPCD calibration. The calibration is executed using the gear which is resulting from the actual DPC setting under the actual antenna detuning condition. AGC_GEAR is used in the LPCD self-calibration.   Reading from this register - without prior writing - delivers in addition to the AGC_GEAR value the AGC_VALUE. The AGC_VALUE is used in the LPCD self-calibration. Writing to this register: Writing data to this register is required before starting the LPCD in Self-calibration mode. Either the previously read AGC_GEAR or a user-defined gear can be chosen. The previously read AGC_VALUE has to be written in any case. Writing data to this register defines the values for AGC_GEAR without taking the actual detuning condition into account. The value of AGC_GEAR to perform an LPCD calibration which derives the AGC_VALUE. This AGC_VALUE and the AGC_GEAR are used in the LPCD self-calibration.   Self-calibration mode always requires a Read AGC_REF_CONFIG, followed by a write AGC_REF_CONFIG, using the previously read AGC_VALUE.   The LPCD calibration can be done in two different options: Option 1:  Read AGC_REF_CONFIG register:  This command executes a standard RF Field on. So depending on the load condition the DPC adjusts the output power. The final gear is take as gear for the LPCD.  This option guarantees that the maximum output power is taken for the LPCD.   Option 2: Write AGC_REF_CONFIG register: This command executes a LPCD calibration ping with the gear number, as defined in the AGC_REF_CONFIG, bit 10:13. This option allows a flexible use of any of the defined gears for the LPCD.   PN5180 LPCD self-calibrate is executed, using Gear -> AGC_REF_CONFIG (Register) Threshold -> LPCD_THRESHOLD (EEPROM) RF on time-> LPCD_FIELD_ON_TIME (EEPROM)   2  How to configure PN5180 LPCD with Cockpit The NFC Cockpit allows the configuration and test of the low power card detection of the PN5180 as shown in below picture. The LPCD parameter, which are stored in the EEPROM, can be changed and the LPCD can be started. The LPCD tab allows to directly define and write the related EEPROM addresses:   LPCD Gear #: Defines the gear number, which is used for the LPCD in auto calibration mode, stored in addr. 0x34, bit 0:3 Threshold Value: Defines the threshold window, As soon as the AGC value during the LPCD ping exceeds the AGC reference value + threshold window, the IRQ will be raised and the PN5180 wakes up. Field On Time:  Defines the ping length Standby time :  This value defines the time between two pings in ms. FieldOn Current: This value is ITVDD under the loading condition, when RF field is on with the used gear. This value does not have any influence on the LPCD execution, but simply is used to estimate the overall  average current consumption. This current estimation is calculated, when the LPCD is started.         3   How to configure PN5180 LPCD with NXP NFC reader library. The LPCD works in two phases: First the standby phase is controlled by the wake-up counter (timing defined in the instruction), which defines the duration of the standby of the PN5180. Second phase is the detection-phase. The RF field is switched on for a defined time (EEPROM configuration) and then the AGC value is compared to a reference value.   Below is the flow chart for PN5180 LPCD          
View full article
DISCLAIMER APPLICABLE TO THIS DOCUMENT CONTENTS:   PN5190-NTAG 5 boost High Speed Communication Demo This article describes the unique feature of these two chips when interacting with each other at contactless interface: Passthrough demonstrator at high bit rates for ISO 15693 between PN5190 and NTAG5 Boost. Scope of demonstrator: ▪ Demonstrating a unique feature of NXP Semiconductors. High bit rates for ISO15693 communication (212 kbps) between a PN5190 reader IC and an NTAG5 boost connected to LPC55S69 host MCU, when implementing passthrough mode using the SRAM of the NTAG 5 boost. ▪ Through MCUXpresso console, the user can configure the contactless bit rate (26.4kbps or 212kbps options) as well as the amount of data to exchange using passthrough mode. ▪ Passthrough mode is implemented from NFC reader to LPC side only. ▪ The PN5190 prints on the MCUXpresso console the outcome of the transaction and baud rate achieved. ▪ In order to handle passthrough communication, we are using GPIO interrupt handlers on the NTAG 5 boost + LPC55S69 side and hard coded timeout on the PN5190 + MCU side. Required hardware and software material: Hardware ▪ PNEV5190BP development board ▪ LPCXpresso55S69 Development Board ▪ OM2NTA5332 - NTAG5 boost development kit ▪ 3 x USB micro cables Software ▪ Firmware Source Code for PN5190 is attached to this article, containing keywork pn5190: HIGHSPEED_PN5190_NTAG5boost1.zip ▪ SDK_2.x_FRDM-K82F is already included in bundle mentioned above. ▪ Firmware Source Code for LPCXpresso55S69 is attached to this article, containing keyword lpc55s69: NTAG5boost_LPC55S69.zip ▪ MCUXpresso IDE recent version (v24.12.148 or newer) Demonstrator bring up: Hardware assembly for LPCXpresso55S69: • Connect NTAG5 Boost board to LPCXpresso55S69 • Make sure SW6 is on position 2-3 to enable 5V power on tag side (it will also work at 3.3V but maybe with less readrange). • Connect LPCXpresso55S69 board to your computer (Debug Link Input). • No additional power source is needed. Hardware assembly for PNEV5190BP: • Connect two USB micro cables to PNEV5190B board for power and flashing firmware via UART connection (alternatively, you may change jumper J9 to position 2-3 and connect an external power supply, Vin > 7 Volts) • Red LED indicates power is enabled • Green LED debugging/UART status Software loading on LPC55S69: Import “lpcxpresso55s69_ntag5_passthrough_nolib” project (included in NTAG5boost_LPC55S69.zip) into MCUXpresso IDE. • Install SDK_2_12_0_LPCXpresso55S69. This SDK can be downloaded from • https://www.nxp.com/security/login?service=https%3A%2F%2Fmcuxpresso.nxp.com%2Flogin%2F  • Build project and flash a binary file using GUI Flash Tool. After flashing, reboot your board. Blue LED must be enabled which means tag is waiting for field to be detected. Under MCUXpresso: 1. Import project from file system 2. Select lpcxpresso55s69 project 3. Uncheck copy projects into workspace Software loading on PNEV5190B: • Unzip the “HIGHSPEED_PN5190_NTAG5boost1.zip” in a folder. • Import all projects inside “HIGHSPEED_PN5190_NTAG5boost1” project to MCUXpresso IDE • Install SDK_2.x_FRDM-K82F. Such SDK is included in project file tree: • nxp-connected-tags-pn5190\Platform\SDK_2.x_FRDM-K82F • Build project and flash a binary file using GUI Flash Tool. After flashing, reboot your board. Blue LED must be enabled which means reader is waiting for NTAG5 to be detected. • Start Debug session to see available bitrate options on the console. Under MCUXpresso: 1. Import project from file system 2. Select all the projects 3. Uncheck copy projects into workspace LED User Interface Specifications (same for LPCXpresso55S69 an PNEV5190B) • Steady blue - waiting for Tag - discovery loop, • Blinking green - passthrough transfer ongoing • Steady green - all data transferred successfully. • Steady red - error - tag lost during transfer. Menu options when two boards have NFC antennas facing each other: Two options of bitrate are available for transfer amount of data from host to NTAG5 Boost: ▪  standard 26.4 kbps or ▪  highest bit rate 212 kbps It is possible to configure amount of data to be exchanged between PN5190 and NTAG 5 boost (check option 3, and then choose among following file dimensions): ▪1KByte ▪2KBytes ▪10KBytes ▪512KBytes Demonstration flow: Once one of these options is selected, reader is ready to detect a tag. ▪ When tag is detected, reader configures selected bitrate and starts data exchange. ▪ Blinking green LED indicates transfer ongoing and the console shows a progress. Here are some results of transaction at the different bit rates and data sizes offered by this demonstrator: Data Size (Bytes) Selected bitrate (kbps) Result Bitrate (kbps) Transfer time (ms) 1024 26.4 2.8 357 1024 212 12.35 81 2048 26.4 2.8 714 2048 212 12.42 161 10240 26.4 2.7 3569 10240 212 12.41 806 512000 26.4 2.8 177739 512000 212 12.63 39576   High speed demo user manual can be also find attached to this article: 22-10-11 NXP - Connected Tags demonstrator User Manual.pdf Conclusions: This demonstrator HW & SW can show that high speed interaction can be achieved between PN5190 (NFC Front end) and NTAG 5 boost, making use of available commands described in product support package. Disclaimer: All SW available here is aimed only for evaluation purposes and NXP disclaims any direct or indirect liability damages, since referred SW bundles are not official part of PN5190/NTAG 5 boost standard product support packages available in nxp.com.  
View full article
AN13189 provides guidelines for the integration of PN7160 NXP NCI-based NFC controller to an Android platform from software perspective. But some developers found some compile issues when integrating PN7160 NFC package into Android 11.   This article describes how to fix the build error when you integrating PN7160 NXP NCI-based NFC controller to Android 11 system.  You need to follow the AN13189 (PN7160 Android porting guide ) first.  After you run the installation script install_NFC.sh, the following modification should be added to the source code. 1) Open package/apps/Nfc/nci/jni/Android.bp Add  "-DNXP_EXTNS=TRUE",   2 )  open system/nfc/src/Android.bp Add   "-DNXP_EXTNS=TRUE",     3 )   open packages/apps/Nfc/src/com/android/nfc/NfcService.java And add this: between isNfcSecureEnabled and setNfcSecure methods:             @Override         public IBinder getNfcAdapterVendorInterface(String vendor) {             if(vendor.equalsIgnoreCase("nxp")){                     return (IBinder) mNfcAdapter;             } else {                    return null;             }         }     Next, follow AN13189, complete the following steps in section 4.2. Then you can build the package successfully.  Thanks  @andraz_skupek .      
View full article
Using an alternative clock source to set up PN7462's contact interface clock , so that we have more options of the clock frequency.
View full article
The code is based on the application note https://www.nxp.com.cn/docs/en/application-note/AN12657.pdf. It mostly shows how to communicate between LPC1769 and RC663 via SPI based on board CLEV6630B without library and which Register have to be set to send a REQA (NTAG21x).
View full article
Demo for Originality Signature Verification(AN11350)
View full article
--The document consists of the following: Step 1. Connections And Firmware Version Step 2. Updating FW On PC Windows 10 Step 3. Updating FW On VMplayer16.0 + Ubuntu 20.04 Step 4. Updating FW On i.MX8MN-EVK With Embedded L5.4.70_2.3.0 BSP Step 5. Confirming whether update is successful using cockpit4.8 --About Cockpit There are several different versions of cockpit, and each version can only recognize the same version of firmware. --Reference Materials 1.https://community.nxp.com/t5/NFC/Mounting-the-PN7462AU-in-the-USB-downloader-mode-under-Linux/m-p/800939 2.https://community.nxp.com/t5/NFC/PN7462-updating-EEPROM-on-linux/m-p/739808/highlight/true#M3144       NXP CAS-TIC team Weidong Sun 04-15-2021  
View full article
     This document mainly describes how to use NanoNVA tool to do antenna tuning on OM29263ADK with CLEV663B/PN5180B board. Please refer to the application note AN12810(https://www.nxp.com/docs/en/application-note/AN12810.pdf) about the NanoVNA tool. And please refer the user manual UM11098 (https://www.nxp.com/docs/en/user-guide/UM11098.pdf) about OM29263ADK. After setting NanoVNA tool with reference to the above documents. Firstly, take the small antenna of OM29263ADK with CLEV663B as an example. The small antenna can be directly connected and used on the CLEV6630B。the antenna board can be directly connected to the CLEV6630B without any additional modification, after the original antenna had been removed (cut off).   The result of the antenna tuning with NanoVNA tool as the below:   Second, take the small antenna of OM29263ADK with PN5180B board as an example. Follow the UM11098 steps as the below: (a) the EMC filter cut off frequency must be adjusted, and (b) the DPC and related features should be disabled, since the antenna is asymmetrically tuned and the DPC is not used. (a) The original antenna uses a symmetrical tuning, which uses an EMC filter with L0 = 470nH and C0 = 253pF (220pF + 33pF). The inductor as well as the first part of the capacitance (220pF) are assembled on the main board. To operate the OM29263ADK antenna, the C0 (220pF) on the PNEV5180B must be replaced by a 68pF.   (b) The DPC and its related features should be disabled to operate an asymmetrical antenna.   If can’t get the card information please refer to the AN11740’s related steps to achieve a good sensitivity of RxP/RxN path. The result of the antenna tuning with NanoVNA tool as the below:   The whole process of the small antennas tuning of OM29263ADK with CLEV66B/PN5180 with NanoVNA is completed. PS: It is the similar with the steps for the large antennas tuning of OM29263ADK with CLEV66B/PN5180 with NanoVNA.  
View full article
Please kindly refer to the attachment for details.   Hope that helps,
View full article
The video shows how to read the NDEF message under password protection. For more details , please kindly refer to https://community.nxp.com/docs/DOC-347622 
View full article
MIFARE DESFire Light read and write demonstration
View full article
Example sends Wi-Fi credentials from phone to IoT device, so it can join the Wi-Fi network.  Using: iOS and Android phone with NXP's TagWriter app PN7462 NFC Reader device on PNEV7462B eval board, part of kit OM27462CDK Host Card Emulation mode example based on NfcrdlibEx8_HCE_T4T example from NFC Reader Library Example will also print out other NDEF messages received.  NDEF formats include: Contacts / Business Cards URL link Wi-Fi network and credentials Bluetooth MAC address for pairing Email address Phone number Geo location Launch application on host OS Plain text SMS (sorry the audio is horrible)
View full article
The NXP-NCI example is based on NXP-NCI lib and LPCopen lib, and due to the good consistency, the porting is mainly focus on LPCopen lib switching.   Software setup download lpcopen package via http://www.nxp.com/assets/downloads/data/en/software/lpcopen_3_01_lpcxpresso_nxp_lpcxpresso_11u68.zip  download SW3241 via https://www.nxp.com/webapp/Download?colCode=SW3241&amp;appType=license&amp;location=null&fsrch=1&sr=3&pageNum=1&Parent_n…  import NXP-NCI_LPC11Uxx_example by LPCXpresso v8.1.4.   LPCopen porting remove *.h and *.c in the folder of LPC11Uxx/inc and LPC11Uxx/src. 2.import header files and c files from lpc_chip_11u6x/inc and lpc_chip_11u6x/src to LPC11Uxx/inc and LPC11Uxx/src 3. repeat step 2 , import source files and header files from lpc_board_nxp_lpcxpresso_11u68/inc and lpc_board_nxp_lpcxpresso_11u68/src to Drivers/inc and Drivers/src. 4.Change MCU settings 5.Change project settings. 6.compiling error fixes: 6.1 solution: replace with i2c_11u6x.h 6.2 solution: 6.3 solution: create a template project for LPC11U6x and import the source file of "cr_startup_lpc11u6x.c"   Porting Result   This porting guide is for LPC11U68 Xpresso v2 Rev C, and can also be used a reference when you try to port NXP-NCI examples to other lpcxpresso boards.   Please kindly refer to the attachment for details. Original Attachment has been moved to: NXP-NCI_LPC11Uxx_example.zip
View full article
This post contains a guide of how to use the NFC Reader Library with LPC845 using the Basic Discovery Loop example. The vanilla Basic Discovery Loop example is larger than the flash size of LPC845 (64KB), so the project needs to be reduced in size as well. How to reduce the size is explained in section “Porting the NFC Reader Library and reducing the size of project” A ready to use package “lpcxpresso845max_Basic_Discovery_Loop” example from the NFC Reader Library to be run on LPC845 and CLRC663 plus frontend is attached with this document. This document is structured as follows:   Overview of LPC845 The LPCXpresso-MAX family of boards provides a powerful and flexible development system for NXP's low-end Arm® Cortex®-M0+ based MCUs. They can be used with a range of development tools, including the MCUXpresso IDE toolchain. The LPCXpresso845-MAX board was created to enable evaluation of and prototyping with the LPC84x family of MCUs. Based on the Arm® Cortex®-M0+ core, LPC845 is a low-cost, 32-bit MCU family operating at frequencies of up to 30 MHz. The LPC845 MCU contains 64 KB of flash memory and 16 KB of SRAM.  Hardware Requirements Following hardware is required to run the project: LPCXpresso845-MAX development board. CLEV6630B board or BLE-NFC-V2 board. Both boards contain CLRC663 plus frontend. Here we use BLE-NFC-V2.   Connections Connect the two boards as follows: Porting the NFC Reader Library and reducing the size of Project: The porting of Basic Discovery Loop Example (NFC Reader Library) to LPC845 Max was done following the procedure mentioned in “NFC Reader Library Porting to i.MX RT1050” document. However, after completing the porting and building the project, the size of the binary, which is 134.264 KB, is greater than the size of Flash of LPC845 which is 64KB of flash. To reduce the size of the project, the following two steps were taken: 1. Apply compiler optimization for size. This can be done in the MCUXpresso by: Opening properties of project. Right Click project-   >Properties Go to Settings->Optimization. For Optimization Level choose “Optimize for Size” Building the project after this step results in a successful build but the project takes up 93% of all Flash, leaving very little space for adding more functionality. 2. The vanilla Basic discovery loop example detects all types of NFC tags. This increases our code size, so further size reduction can be achieved by limiting the number of protocols used. To limit our Basic Discovery loop to only look for Type A tags, do the following: Open the file “ph_NxpBuild_App.h” file which is inside in the “intfs” folder. This file defines the protocols (types) which are detected by the Basic Discovery Loop example. The type A cards uses the “ISO 14443-3A” protocol, so comment out all other protocol definitions except for “ISO 14443-3A” protocol as shown in Figure.   Building the project after this step takes up only 42.784KB of space consuming 65% of the Flash, leaving sufficient amount of space for adding application code.   Running Basic Discovery Loop on LPC845 If this is the first time you’re using the LPCXpresso845 Max board, follow the getting started guide first ->  LPC845Max | NXP . Make sure to install the SDK package LPCXpresso845 Max which is required for the project below to run. Download the “lpcxpresso845max_Basic_Discovery_Loop” package which you will find attached to this post. Drag and drop the downloaded package to the “Project Explorer” tab of your MCUXpresso IDE workspace (If you don’t have MCUXpresso, it can be downloaded for free from here: https://www.nxp.com/support/developer-resources/software-development-tools/mcuxpresso-software-and-tools/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE ) Now that the package has been imported to the MCUXpresso IDE (via drag and drop), click on Debug icon from the Quickstart panel to begin a debug session. Once the debug session has started, click on the run icon to run the code: After step 4, the project should be running now. The output “BasicDiscoveryLoop Example” can be seen in the console. The project contains basic discovery loop functionality. Bring any NFC card near the frontend’s RF antenna and the output console will show the detection and type of the card. Running other examples from NFC Reader Library on LPC845: Once the “lpcxpresso845max_Basic_Discovery_Loop” project is running on the LPC845, running other examples from NFC Reader Library is simple. Here we use the “NfcrdlibEx9_NTagI2C” example from the reader library to describe the process. In “intfs” folder remove everything except the “phaApp_Init.h” file. Then go to the “intfs” folder of the NFC Reader Library example you want to run (“NfcrdlibEx9_NTagI2C” in this case), and copy all the files except “phaApp_Init.h” and paste them in the original “intfs” folder.  In line 57 of the “ph_NxpBuild_App.h” file in “intfs” folder, replace  Go to “source” folder and remove every file except “phApp_Init.c“ and “semihost_hardfault.c” files. Then go to “src” folder of the example you want to run (“NfcrdlibEx9_NTagI2C” in this case) and copy all the files except “phaApp_Init.c” and paste them into the “source” folder.  Finally, copy the main file of the example you want to run (NfcrdlibEx9_NTagI2C in this case) and paste it into the “source” folder as well. The project is ready to build and run on LPC845. Available Resources: Porting NFC Reader Library to i.MX RT1050. (Detailed Description of porting) https://community.nxp.com/docs/DOC-341843 NFC Reader Library  NFC Reader Library | NXP  LPC845 Max  LPCXpresso845-MAX Board for LPC84x Microcontrollers (MCUs) | NXP 
View full article
Hello NFC community,  as you may know the The PN7462 family consists of 32-bit Arm® Cortex®-M0-based NFC microcontrollers offering high performance and low power consumption. It has a simple instruction set and memory addressing along with a reduced code size compared to existing architectures. PN7462 family offers an all-in-one-solution, with features such as NFC, supporting all NFC Forum modes, microcontroller, optional contact smart card reader, and software in a single chip. It operates at CPU frequencies of up to 20 MHz. and  MIFARE® Ultralight-based tickets offer an ideal solution for low-cost, high-volume applications such as public transport, loyalty cards and event ticketing. They serve as a perfect contactless replacement for magnetic stripe, barcode, or QR-code systems. The introduction of the contactless MIFARE Ultralight® ICs for limited-use applications can lead to reduced system installation and maintenance costs. As you may know the MIFARE family has the Ultralight C tag which is a contactless IC supporting 3DES cryptography is mostly used in limited use applications such smart ticketing, this tag complies with ISO 14443-3 type A and it is defined as type 2 tag. In this document I am going to show you how to modify an example that is provided in the NXP Reader Library to authenticate to a not personalized Mifare Ultralight C and perform a Read operation. Materials: PN7462 or PNEV7462 ( this is the evaluation board  from NXP) PN7462 Reader library Mifare Ultralight C Mifare Ultralight C Data sheet MCUXpresso First we are going to go to  NfcrdlibEx4_MIFAREClassic.c, I am going to explain as much as I can with comments in the code and add some information here we are going to  add the following include: #define MFULC_READ_DATA_SIZE 16 /* Number of bytes that is read by MIFARE Ultralight Read command */ #define MFULC_USER_MEMORY_BEGIN 0x04 /* Number of bytes that is read by MIFARE Ultralight Read command */ #define MFULC_PAGE_SIZE 0x04 /* Size of page of MIFARE Ultralight card */ #define KEYCOUNT 0x7FU /* number of keys */ #define KEYVERSIONS 0x01U /* number of key versions */ #define RAND_KEY_2K3DES_ADDRESS 0x01U /* Random 2K3DES key address in keystore */ #define RAND_KEY_2K3DES_VERSION 0x00U /* Random 2K3DES key version in keystore */ #define UL_C_KEY_ADDRESS 0x02U /* Ultralight C key address in keystore */ #define UL_C_KEY_VERSION 0x00U /* Ultralight C key version in keystore */ #define KEY_POSITION 0x00U /* Key position */ ‍ ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ after this in the Global Variable declaration section we will have to add the following: phCryptoSym_Sw_DataParams_t cryptoEnc; /* CryptoSym parameter structure for ENC */ phCryptoSym_Sw_DataParams_t cryptoSymRng; /* CryptoSym parameter structure for SymRng */ phCryptoRng_Sw_DataParams_t cryptoRng; /* CryptoRng parameter structure for Rng */ phKeyStore_Sw_DataParams_t keyStore; /* KeyStore parameter structure */ static uint8_t gaUlcKey[] = {0x49, 0x45, 0x4D, 0x4B, 0x41, 0x45, 0x52, 0x42, 0x21, 0x4E, 0x41, 0x43, 0x55, 0x4F, 0x59, 0x46}; phacDiscLoop_Sw_DataParams_t * pDiscLoop; /* Discovery loop component */ void *psKeyStore; void *psalMFUL; void *ppalMifare;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ the variable static uint8_t gaUlcKey[] = {0x49, 0x45, 0x4D, 0x4B, 0x41, 0x45, 0x52, 0x42, 0x21, 0x4E, 0x41, 0x43, 0x55, 0x4F, 0x59, 0x46}; this is the key for default in the Mifare Ultralight c as stated in the datasheet section 7.5.6 this is a reference for the key we should be using. Then we are going to change the PAL variables /*PAL variables*/ phKeyStore_Sw_KeyEntry_t aKeyEntry[KEYCOUNT]; phKeyStore_Sw_KeyVersionPair_t aKeyVersion[KEYCOUNT * KEYVERSIONS]; phKeyStore_Sw_KUCEntry_t aKeyUsageCounter[KEYCOUNT]; uint8_t bDataBuffer[DATA_BUFFER_LEN]; /* universal data buffer */ uint8_t bSak; /* SAK card type information */ uint16_t wAtqa; /* ATQA card type information */ ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ then we are going to change this in line 131 psalMFC = phNfcLib_GetDataParams(PH_COMP_AL_MFC);‍‍‍ to psalMFUL = phNfcLib_GetDataParams(PH_COMP_AL_MFUL);‍‍‍ so this get the MIFARE Ultralight AL-Components, then after this line we are going to add  ppalMifare = phNfcLib_GetDataParams(PH_COMP_PAL_MIFARE);‍‍‍  then we are going to erase the Mifare classic  functionality to avoid any kind of error due to Mifare classic not being present in the field.and add the following: First we are going to proceed with the Authentication part, we are going tu use the API phalMful_UlcAuthenticate(pDataParams, wKeyNumber, wKeyVersion);  the first  parameter is the structure pointing to the tag that was activated by the discoveryloop, then the key address and last the  version of the key. as you can see we do not send the key we only tell the tag where is the key stored and the version if it was updated. to ensure the confidentiality of the communication. /* Authenticate with the Key even if no memory of Ultralight Card is restricted by Authentication access Authentication with correct key provides access to any part of the memory (beside key storage) . */ /* Send authentication for entire Ultralight C */ status = phalMful_UlcAuthenticate(psalMFUL, UL_C_KEY_ADDRESS, UL_C_KEY_VERSION); /* Check for Status */ if ((status & PH_ERR_MASK) != PH_ERR_SUCCESS) { /* Print Error info */ DEBUG_PRINTF("\nAuthentication Failed!!!"); DEBUG_PRINTF("\nPlease correct the used key"); DEBUG_PRINTF("\nExecution aborted!!!\n"); break; } DEBUG_PRINTF("\nAuthentication Successful"); /* ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ after this the status should be  OK  and no error found, if you have an error in this please check that the card you are using was not tampered before and changed the key or if you distributor delivered a configured key please be sure to use the correct key. then we are going to proceed to the Read operation: phalMful_Read(pDataParams, bAddress, pData) as you can see  the first parameter is the same as authentication because we are still talking to the same tag,  the MFULC_USER_MEMORY_BEGIN its value is 04 this is because as you can see in the datasheet section 7.5 Memory organization the user memory starts in page 4 and ends in page 39 so we just want to read the first page of the tag and the bDataBuffer variable will store the received information. /* *************** READ operation ****************************** */ /* Empty the bDataBuffer */ memset(bDataBuffer, '\0', DATA_BUFFER_LEN); DEBUG_PRINTF("\n\nRead data from page %d, %d, %d, %d", MFULC_USER_MEMORY_BEGIN, MFULC_USER_MEMORY_BEGIN + 1, MFULC_USER_MEMORY_BEGIN + 2, MFULC_USER_MEMORY_BEGIN + 3); /* Read data from custom */ status = phalMful_Read(psalMFUL, MFULC_USER_MEMORY_BEGIN, bDataBuffer); /* Check for Status */ if (status != PH_ERR_SUCCESS) { /* Print Error info */ DEBUG_PRINTF("\nRead operation failed!!!\n"); DEBUG_PRINTF("\nExecution aborted!!!\n\n"); break; /* Break from the loop*/ } DEBUG_PRINTF("\nRead Success"); DEBUG_PRINTF("\nThe content of page %d is:\n", MFULC_USER_MEMORY_BEGIN); phApp_Print_Buff(&bDataBuffer[0], MFULC_READ_DATA_SIZE);‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ and that is all of our project, this is a simple project but can help a lot of people to understand how to work with Mifare Ultralight C using the PN7462 and then help people to start doing more complex examples based on this project. if you want to know how to configure a Mifare Ultralight c product using our PEGODA reader please check the document I posted called "Mifare Ultralight C - Changing default password and protecting page address". if you have any questions please let me know. BR Jonathan
View full article
Environments & Devices --Hardware 1、PN7462 DEMO Board(PNEV7642B) --Software 1、Ubuntu 16.04 desktop 2、Test tools ---libusb ---pcsc-lite ---ccid driver ---opensc          Before testing, please install above test tools to Ubuntu 16.04 according to document on the link https://community.nxp.com/docs/DOC-334952 !          Then follow steps below to begin testing PN7462 DEMO board by above test tools. 1、Update firmware of PN7462 DEMO board          Please update firmware of PN7462 DEMO board according to UM10915.pdf, then test it on windows, ensuring PN7462 DEMO board can normally work at CCID protocol on window platform. 2、Connecting PN7462 DEMO Board to PC USB via USB OTG Cable.          On PENV7462B side, X3 connector should be used for USB OTG cable. 3、Using lsusb to list USB devices weidong@ubuntu:~$ lsusb Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. Bus 002 Device 005: ID 1fc9:0117 NXP Semiconductors          Last line is PN7472 DEMO board. 4、Open 2 terminals at the same time on Ubuntu desktop (1) One terminal is used to run “pcsc” command weidong@ubuntu:~$ sudo /usr/local/sbin/pcscd -adf [sudo] password for weidong: 00000000 pcscdaemon.c:345:main() pcscd set to foreground with debug send to stdout 00012288 configfile.l:361:DBGetReaderList() Parsing conf file: /usr/local/etc/reader.conf.d 00000037 pcscdaemon.c:658:main() pcsc-lite 1.8.22 daemon ready. 00023126 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/002/001 00000101 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/002/001 00000113 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x0E0F, PID: 0x0003, path: /dev/bus/usb/002/002 00000112 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/002/001 00000160 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x0E0F, PID: 0x0002, path: /dev/bus/usb/002/003 00000152 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x0E0F, PID: 0x0008, path: /dev/bus/usb/002/004 00000115 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x0E0F, PID: 0x0008, path: /dev/bus/usb/002/004 00000165 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x0E0F, PID: 0x0002, path: /dev/bus/usb/002/003 00000263 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001 ^V56546837 hotplug_libudev.c:651:HPEstablishUSBNotifications() USB Device add 00000101 hotplug_libudev.c:297:get_driver() Looking for a driver for VID: 0x1FC9, PID: 0x0117, path: /dev/bus/usb/002/006 00000007 hotplug_libudev.c:436:HPAddDevice() Adding USB device: PN7462 USB Reader 00000045 readerfactory.c:1074:RFInitializeReader() Attempting startup of PN7462 USB Reader (1.00) 00 00 using /usr/local/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so 00127887 readerfactory.c:949:RFBindFunctions() Loading IFD Handler 3.0 00000236 ifdhandler.c:1965:init_driver() Driver version: 1.4.27 00000477 ifdhandler.c:1982:init_driver() LogLevel: 0x0003 00000004 ifdhandler.c:1993:init_driver() DriverOptions: 0x0000 00000165 ifdhandler.c:111:CreateChannelByNameOrChannel() Lun: 0, device: usb:1fc9/0117:libudev:0:/dev/bus/usb/002/006 00000021 ccid_usb.c:302:OpenUSBByName() Using: /usr/local/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist 00000727 ccid_usb.c:320:OpenUSBByName() ifdManufacturerString: Ludovic Rousseau ([email protected]) 00000016 ccid_usb.c:321:OpenUSBByName() ifdProductString: Generic CCID driver 00000004 ccid_usb.c:322:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version. 00000433 ccid_usb.c:656:OpenUSBByName() Found Vendor/Product: 1FC9/0117 (PN7462 USB Reader) 00000005 ccid_usb.c:658:OpenUSBByName() Using USB bus/device: 2/6 00000021 ccid_usb.c:717:OpenUSBByName() bNumDataRatesSupported is 0 00128471 ifdhandler.c:382:IFDHGetCapabilities() tag: 0xFB3, usb:1fc9/0117:libudev:0:/dev/bus/usb/002/006 (lun: 0) 00000027 readerfactory.c:396:RFAddReader() Using the reader polling thread 00004709 ifdhandler.c:382:IFDHGetCapabilities() tag: 0xFAE, usb:1fc9/0117:libudev:0:/dev/bus/usb/002/006 (lun: 0) 00000023 ifdhandler.c:477:IFDHGetCapabilities() Reader supports 1 slot(s) (2)The other terminal is used to run “"testpcsc " in pcsc-lite/src source code weidong@ubuntu:~/ccid/pcsc-lite-1.8.22/src$ ./testpcsc   MUSCLE PC/SC Lite unitary test Program   THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL FOR END USERS! Do NOT use it unless you really know what you do.   Testing SCardEstablishContext        : Command successful. Testing SCardIsValidContext   : Command successful. Testing SCardIsValidContext   : Invalid handle. (don't panic) Testing SCardListReaderGroups      : Command successful. Group 01: SCard$DefaultReaders Testing SCardFreeMemory               : Command successful. Testing SCardListReaders        : Command successful. Testing SCardListReaders        : Command successful. Reader 01: PN7462 USB Reader (1.00) 00 00 Waiting for card insertion        :          2 screenshots for above 2 terminals: 5、Test cards (All cards are contactless) (1) MIFARE Plus x 4K card Re move it: (2) MIFARE Nano card          Note: testpcsc should be run again. Remove it: (3) MIFARE EV1 card Remove it: 6、Using Opensc-tool to Test cards            Open a new terminal for running the command, please! (1)No cards (2) MIFARE Plus x 4K card (close to antenna , then run opensc-tool) (3) MIFARE Nano card (4) MIFARE EV1 card    TIC Weidong Sun 2018-07-09
View full article
This post contains step by step guide of how to use the NTAG I²C plus with LPC55S69. This is easy and straightforward to do, since the MCUXpresso SDK Builder tool has an option to add NTAG I²C plus example directly to SDK of LPC55S69. Hardware Needed: LPC55S69-EVK NTAG I²C plus explorer kit Follow the following simple steps to use NTAG I²C plus with LPC55S69: Download and install MCUXpresso IDE (if you don’t have it already). It can be download for free by clicking here: Next step is to use the MCUXpresso SDK Builder tool to build and download the SDK for LPC55S69. For this: Go to  the MCUXpresso SDK Builder website: https://mcuxpresso.nxp.com/en/select Select the LPC55S69 board and then click on ‘Build MCUXpresso SDK’ button: Click on ‘Add Software component’, then select the NTAG I2C component, click ‘Save changes’ and then download the SDK. Drag and drop the downloaded SDK to the installed SDK’s tab in the MCUXpresso IDE to install it. Click on the ‘Import SDK example(s)’ in the Quickstart Panel in the MCUXpresso IDE. Then select LPC55S69, ‘check the ntag_i2c_plus_example’ box and hit ‘Finish’. Connect the LPC55S69 and NTAG I²C plus boards together. Details of these connections can be found in the “readme.txt” file in the “doc” folder of the project: Finally click on debug in the Quickstart Panel to build the project, flash it to the MCU, and start debugging. This is how the output looks like in the Console tab of IDE: Bring any active nfc device (e.g. an NFC phone with NFC enabled) near the ntagi2c board. The program will detect it and consequently blink the LED as well as display a message on the console: Read the “readme.txt” file for more details regarding the project. Available Resources: BLE pairing with NFC on KW41 and NTAG I²C plus source code www.nxp.com/downloads/en/snippets-boot-code-headers-monitors/SW4223.zip NTAG I²C plus kit for Arduino pinout www.nxp.com/demoboard/OM23221ARD
View full article
Hello NFC Community,   This document focuses to the configuration of the LPC8N04 to be controlled by the data it receives though the NFC interface. The document is based on the nfc_eeprom project of LPC8N04’s SDK. It will basically be necessary to modify the code within while(1) loop as below.   Get the data from NFC and store it on d_Data buffer:             if (NDEFT2T_GetMessage(g_NdefInstance, g_Data, sizeof(g_Data))) { /* Save NDEF Data into EEPROM */ //Chip_EEPROM_Write(LPC_EEPROM, 0, g_Data, sizeof(g_Data)); }‍‍‍‍‍‍‍ Clear respective semaphore and Flag: /** Clear Memory Write Semaphore */ releaseMemSemaphore(); /** Clear Write Flag */ g_TargetWritten = 0;‍‍‍‍‍‍‍   Now that the information is in the g_Data buffer now you may proceed to verify the received data with the one expected to trigger a function e.g., to turn on/off a led.   if(g_Data[7] == 'A') { Led_Set(true); } else if(g_Data[7] == 'B') { Led_Set(false); }‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍     On the other side, it will only be necessary to approach the reader to the LPC8N04's antenna and the NDEFT2T_GetMessage(g_NdefInstance, g_Data, sizeof(g_Data)) function will get the data and store it on the g_data buffer mentioned above. Happy development! BR, Ivan.
View full article
This demonstration is based on RFIDDiscover full version and Pegoda EV710. You may refer to the following links for more details. RFIDDiscover | NXP  PEGODA Contactless Smart Card Reader | NXP  Before start the demonstration, please connect Pegoda with your PC via USB and place the MIFARE DESFire Light card on the reader. The history and log can be fetched from the attachment. Please refer to the video for more details.  
View full article