cancel
Showing results for 
Search instead for 
Did you mean: 

How to write NFC V (ISO/IEC 15693) tag in ST25R3916 ??

LJooS.1
Associate II

Hello,

I'm currently using STSW-ST25R011 firmware.

At first, I was going to read/write with NFC type 2, but the firmware above is only read implemented, so I added Write.

(The Write implementation was implemented using t2t.c in folder firmware/Middlewares/fw_3916).

Tag was tested with NTAG215.

It's normally read/write, but NFC V is a bit different from other NFC types 2!

It can be configured as 4 bytes or 8 bytes per block.

The tag I am currently using is EM|ECO 4425 and 8 bytes per block.

Therefore, we thought that t2t.c above was not available, so we looked it up and tried to use iso15693_3.c in the same folder.

Read is already implemented, so I'm trying to implement Write, but I'm curious to ask!

1. Is it possible to write 8byte blocks in ST?

2. It will be different for each Tag IC, but can I change the size per block to 4 bytes or 8 bytes directly?

3. Do you have any books or links to study at NFC V?

thanks !

1 ACCEPTED SOLUTION

Accepted Solutions
Brian TIDAL
ST Employee

Hi LJooS.1,

the API you are looking for are in rfal_nfcv.c file:

  • rfalNfcvPollerReadSingleBlock to read a block
  • rfalNfcvPollerWriteSingleBlock to write a block

These API are demonstrated in the ST25 Embedded NFC library in ST25NFC_Embedded_Lib_ST25R3916\Projects\STM32L476RG-Nucleo\Applications\Common\Src\demo_polling.c

The length of the block is managed by the blockLen parameter when calling rfalNfcvPollerWriteSingleBlock(), so this API supports any block length at run time. Usually, the block Length has to be determined by doing a first Read Single Block command of block 0 after the anti-collision. The length of the block 0 is then used for subsequent Write Single Block commands. The demo_polling.c uses a define DEMO_NFCV_BLOCK_LEN with value 4 but it can be changed to other value if you need.

Note: rfal_iso15693_2.c implements layer 2 of ISO15693 protocol whereas you are looking for layer 3 commands.

For your own application development, I would recommend to use

NFC-V is specified by the NFC Forum in the NFC Forum Digital Protocol technical specification. Anyway, tag manufacturer datasheet usually contains all the needed information (i.e. supported command description). You should contact the manufacturer of the tag to have the full data sheet instead of the short data sheet.

Rgds

BT

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

View solution in original post

3 REPLIES 3
Brian TIDAL
ST Employee

Hi LJooS.1,

the API you are looking for are in rfal_nfcv.c file:

  • rfalNfcvPollerReadSingleBlock to read a block
  • rfalNfcvPollerWriteSingleBlock to write a block

These API are demonstrated in the ST25 Embedded NFC library in ST25NFC_Embedded_Lib_ST25R3916\Projects\STM32L476RG-Nucleo\Applications\Common\Src\demo_polling.c

The length of the block is managed by the blockLen parameter when calling rfalNfcvPollerWriteSingleBlock(), so this API supports any block length at run time. Usually, the block Length has to be determined by doing a first Read Single Block command of block 0 after the anti-collision. The length of the block 0 is then used for subsequent Write Single Block commands. The demo_polling.c uses a define DEMO_NFCV_BLOCK_LEN with value 4 but it can be changed to other value if you need.

Note: rfal_iso15693_2.c implements layer 2 of ISO15693 protocol whereas you are looking for layer 3 commands.

For your own application development, I would recommend to use

NFC-V is specified by the NFC Forum in the NFC Forum Digital Protocol technical specification. Anyway, tag manufacturer datasheet usually contains all the needed information (i.e. supported command description). You should contact the manufacturer of the tag to have the full data sheet instead of the short data sheet.

Rgds

BT

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
LJooS.1
Associate II

Hello, Brian TIDAL.

Thank you very much for your sincere reply.

I'm currently using ST25R3916 (L476VGT). 

You said it would be good to use NUCLEO-L476RG, is it okay to use it as L476VG?

Best regards

Brian TIDAL
ST Employee

Hi

the ST25R3916-DISCO kit is based on a STM32L476VG MCU whereas the NUCLEO-L476RG board is based on a STM32L476RG MCU.

The only difference is the pin count:

  • STM32L476RG: R = 64 pins
  • STM32L476VG: V = 100 pins

See § 8 in the STM32L476xx datasheet

If your application does not use the pins that are not available on the STM32L476RG, it should be okay.

Rgds

BT

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.