cancel
Showing results for 
Search instead for 
Did you mean: 

how to get UID for multi ISO15693 tags in antenna area?

DSai.1
Associate III

Dear Sir,

I am using the RFAL driver and I would like to achieve reading multiple ISO15693 tags. How can I obtain the UID of multiple tags with RFAL driver?

thank you very much in advance.

Best regards

Dai Sai

1 ACCEPTED SOLUTION

Accepted Solutions

Hi Dai Sai,

yes, you could just change RFAL_NFC_MAX_DEVICES to a higher number.

But when going towards so many tags maybe the better approach is the mentioned rfalNfcvPollerSleepCollisionResolution() where user needs to provide the memory.

Best Regards, Ulysses

View solution in original post

11 REPLIES 11
Ulysses HERNIOSUS
ST Employee

Hello Dai Sai,

RFAL higher layer (rfal_nfc.h) supports a devLimit param which you can/should put to 5 (current maximum inside RFAL). After you get notified about found tags you can inspect the list by using rfalNfcGetDevicesFound().

Best Regards, Ulysses

DSai.1
Associate III

Dear Ulysses,

thank you for your information.

I use the function and had a try as attached code.

I put two ISO15693 tags on the antenna area, they are not overlapped.

After rfalNfcGetDevicesFound(&kdev, &kdevCnt);

kdevCnt is always 1.

When I put the tag on the antenna, one by one, they can be access

correctly.

Could you give any hints for this use? should I modify somewhere else

for multi tags access?

best regards

Dai Sai

Hi Dai Sai,

rfal_nfc layer is implementing according to NFC Forum Activity. Therefore it will send an INVENTORY request with 1 slot and only if it sees errors in it try to find more tags. Depending on position of cards one load modulation is often substantially stronger than the other one - leading to no further INVENTORY with 16 slots being sent.

If you want to reliably detect more NFC-V tags you will need to deviate from rfal_nfc layer. There are various options:

Inside rfal_nfc: Change

err = rfalNfcvPollerCollisionResolution( RFAL_COMPLIANCE_MODE_NFC, (gNfcDev.disc.devLimit - gNfcDev.devCnt), nfcvDevList, &devCnt );

to

err = rfalNfcvPollerCollisionResolution( RFAL_COMPLIANCE_MODE_ISO, (gNfcDev.disc.devLimit - gNfcDev.devCnt), nfcvDevList, &devCnt );

This should already give you a considerable improvement.

If you have many tags and you need to absolutely make sure that you find all tags, then you may want to use rfalNfcvPollerSleepCollisionResolution().

Best Regards, Ulysses

DSai.1
Associate III

Dear Ulysses,

Thank you so much for your quick information.

In this project, we want to develop a new tag reader that can access all tags once, so

we do need to find all tags in antenna area.

I will try the functions you mentioned. If there is sample code that show how to find all tags with the function rfalNfcvPollerSleepCollisionResolution(),

could you provide us them? I think it will be good reference for our development.

Anyway, I will try with my best at first.

Best Regards,

Dai Sai

Hi,

Similar procedures you can execute on the discovery GUI. In firmware this will be a sequence like rfalFieldOnAndStartGT(); rfalNfcVPollerInitialize(); rfalNfcvPollerSleepCollisionResolution(); (please add error checking, etc.).

Which board and reader chip are you using? I am surprised that default rfal_nfc does always detect only one tag - only in rare cases it should miss collisions.

Regards, Ulysses

DSai.1
Associate III

Dear Ulysses

thank you very much for your information.

I use X-NUCLEO-NFC06A1 that has a ST25R3916 on board.

We connect X-NUCLEO-NFC06A1 to our SoC board, port the rfal driver to

ThreadX RTOS. But we don't have environment to execute your GUI application.

In my environment, there is no error happened, always got a UID.

best regards

Dai Sai

DSai.1
Associate III

Dear Ulysses,

  1. I debug the driver and found that gNfcDev.disc.devLimit = 1, when function err = rfalNfcvPollerCollisionResolution( RFAL_COMPLIANCE_MODE_NFC, (gNfcDev.disc.devLimit - gNfcDev.devCnt), nfcvDevList, &devCnt );

were called. If I use 16 tags, should I modify gNfcDev.disc.devLimit to 16?

best regards

Dai Sai

Hi,

please see above my first answer:

"RFAL higher layer (rfal_nfc.h) supports a devLimit param which you can/should put to 5 (current maximum inside RFAL)"

This is a parameter to rfalNfcDiscover(). Currently this layer allocates only memory for 5.

If you really want to move into so many tags then I think you need to move towards rfalNfcvPollerSleepCollisionResolution()

Please also be aware that it is also from an analog standpoint challenging to power all the tags as the antenna will also heavily de-tune. I don't expect so many tags to be read using X-NUCLEO-NFC*.

Best Regards, Ulysses

DSai.1
Associate III

Dear Ulysses,

thank you for your information.

Is it possible to expand the memory to realize 10 tags? Where is the memory allocation for tags limit?

I use -NUCLEO-NFC for first test only, we will use a larger antenna about 20cmX30cm in size finally.

best regards

Dai Sai