Welcome back to this special edition of 2-Bullet Tuesday, where we’ll share useful tips and awesome stuff sent in by Omega2 users all around the world. Check out creative projects and tutorials that will supercharge your IoT development!
Omega News!
We are proud to announce the latest addition to the Omega2 family, the RFID & NFC Expansion. This Expansion brings contact-less RFID and NFC communication to the Omega ecosystem. It supports reading and writing with several NFC and RFID protocols at 13.56 MHz. The Expansion is based on the popular PN532
NFC Chip and communicates with the Omega serially via UART1
.
We’ll guide you through the installation process and the hardware setup. Then we’ll jump into reading and writing to the included Mifare Ultralight RFID Tag.
So, let’s get started!
Installation of the tools
In order to use the RFID /NFC Expansion, we’ll need to install the nfc-exp
package:
opkg update
opkg install nfc-exp
This package also installs the nfc-utils
and xxd
utility that we’ll use later on. When the installation is done, the following utilities will be installed:
- nfc-emulate-forum-tag4
- nfc-jewel
- nfc-list
- nfc-mfclassic
- nfc-mfultralight
- nfc-read-forum-tag3
- nfc-relay-picc
- nfc-scan-device
These programs can be accessed from the command line and you can use them to control your RFID/NFC Expansion. You can also see the usage of those programs by running them with just a -h
argument. Today, we’ll guide you through using these commands to work with the included Mifare Ultralight tags!
Hardware Setup
The RFID & NFC Expansion features a 13.56 MHz stripline antenna and an Expansion Header, so other expansions are stackable on top. In order to use it, plug the Expansion into a Dock that has Expansion Header pins (Expansion Dock, Power Dock 2, Arduino Dock R2) and you are all set to go!
Please note: During the boot process, the Expansion draws a lot of current. We recommend connecting it to a Dock while the Omega is powered off. If the Omega is powered on, the large current draw may cause the Omega to reboot.
Scanning for Nearby Tags
We’ll start from the command nfc-list
that is used to scan for the tag to find out the type of the tag and its UID (Unique Identification Number). So, tap your tag to the Expansion and run the nfc-list
command:
From the output, we can see that the UID consists of 7 Bytes. Since its a unique ID, we can use this to identify cards for access control systems or to trigger different actions.
Reading Data from the Included Mifare Ultralight Cards
The RFID tag that comes with the Expansion is a Mifare Ultralight card. It has 64 Bytes of EEPROM Memory that includes 7 Bytes of UID, 4 Bytes of One Time Programmable Memory, 1 Byte of Internal Memory, 2 Bytes of Lock Bytes and 48 Bytes of Used Defined Data. Tap the card to the Expansion and issue the following command:
# nfc-mfultralight r dump.mfd
If the tag was in range, you should see the something like the following:
This will write the contents of the card to the dump.mfd
file in a binary format. You can see the contents of the .mfd
binary file using the xxd
utility:
xxd dump.mfd
Here is comes, first row is called Manufacturer Block
that consists of 16 Bytes of manufacturer data and other 3 blocks (next 3 rows) holds the programmable data.
Modifying the Data and Writing it Back to the Card
Now we can modify the data that we just read and write this back to the card. So here’s the deal:
- Convert the
.mfd
binary into hex that’s easier to edit - Edit the hex using any code editor (e.g vim, nano, etc)
- Convert the hex back to the
.mfd
file - Write the new
.mfd
binary to the card
Again, we’ll use the xxd
utility to convert the .mfd
to hex
file:
xxd dump.mfd > dump.hex
Now, open the dump.hex
file with any text editor that you’d like (e.g. Vim, Nano, etc.). We’ll be modifying the user blocks (2nd, 3rd and 4th blocks of the card). For example, you can convert any text to hex format and place it in the data blocks. Let’s write “Hello World!” to our card. The hex value of that text is as follows:
4865 6c6c 6f20 576f 726c 6421 0a
Just replace the text that is written in the 2nd block (starts with 0000010:) with the given text, save it, and convert back to the .mfd
format:
xxd -r dump.hex dump.mfd
The last step is to write the updated data to the card. Use the following command to do so:
yes N | nfc-mfultralight w dump.mfd
The first part of this command will automatically answer No to all questions posed by the utility:
Write OTP bytes ? [yN] Write Lock bytes ? [yN] Write UID bytes (only for special writeable UID cards) ? [yN]
If you read the card again, you’ll see that it now holds the data we just wrote:
Isn’t that just great?
Going Further
You can find more info about the Expansion Hardware and more details on Using the Expansion in our Documentation. And the Expansion is now available on the Onion Online Store as well as from our retailers! Now it’s your turn to make some awesome NFC and RFID projects!