Skip to content
Pascal Roobrouck edited this page Dec 11, 2019 · 4 revisions

When including Near Field Communication (NFC) into your application, you will typically do it through a dedicated integrated circuit such as the RC522 or PN532. The latest and most advanced NFC component is the NXP PN7150

Most of NFC is being standardized by the NFC Forum. Even if it is a non-profit organisation, the NFC-Forum standards are only free for members, and membership is expensive. So this Wiki is written to help you getting started with NFC.

The driver consists of 3 layers :

  1. The application : Reader/Writer, Tag Emulation or Peer2Peer
  2. The NFC Controller Interface (NCI)
  3. The interface between the Device Host (DH) and the NCF Device

Let's start from the bottom up :

the interface

You need to connect the PN7150 to the microcontroller running your application. Different NFC chips all offer different options, but for the PN7150 it's simple: it can only interface with I2C. So this part is about reading and writing data to and from the PN7150 through its I2C interface.

Next is

the NFC Controller Interface (NCI)

In order to make things a bit more standardized, the NFC-Forum has defined the communication between your microcontroller and the NFC device. This means the messages you'll be sending/receiving over your I2C have been standardized, as well as the behaviour of the PN7150 is to some extent standardized. This part of the SW will help you compose correct messages, interprete received messages and understand the stateMachine behaviour of the PN7150

Finally..

the application

NCF provides 3 types of applications:

  1. ReaderWriter : this is detecting NCF smartCards and reading/writing data to/from them.
  2. TagEmulation : this application makes your microcontroller behave to other NFC Readers/Writers as if it's a smartCard
  3. Peer2Peer : this application makes 2 NFC devices talk and exchange data with each other, similar in the way eg. BlueTooth does..

This repository only does the ReaderWriter application, for the time being.

Clone this wiki locally