This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TRF7960A: TIMING WHEN NO 15693 TAG IS FOUND

Part Number: TRF7960A
Other Parts Discussed in Thread: MSP430G2553, TRF7970A

Hi,

I have an application where timing is very important. When the TRF7960A tries to read from an ISO15693 tag there is a time gap of ~5 mSecs as expected. Now, when there is no tag present in the antenna there is a "waiting" time of 39.88 mSecs. Is there any way in the registers to make this waiting time shorter? This ~40 mSecs is a long time for my application. Is there any way around this? Is there a command that looks for the presence of a tag and that it executes quickly?

Please, see picture below.

Thanks,

Robert

  • Hi Roberto,

    I would recommend to define an RX timeout on the MCU side and if you don't get a response before the timeout expires, assume no reply which would be accurate for this application.

    What you'd do is, one you get the TX Complete indication, start the timer and wait for one of the following to occur:

    • IRQ Received
    • Timer interrupt occurs indicating timeout has been hit

    If timeout has been hit, then read the IRQ Status Register just to verify that it hasn't been set to a 0x40 but the IRQ hadn't fired yet (can occur as the RX IRQ is often triggered when either RX is finished or the FIFO watermark is hit)

    If the IRQ Status is 0x00, then the application should proceed assuming no reply from the tag.

    For ISO15693 if you are doing single slot inventory, I would say about 10ms would be enough of a timeout. I think most, if not all, tags reply within 5-6 ms as you've seen.

    One other option that is theoretically possible but I've never tried to use in this specific manner is to maybe adjust the RX No Response Wait Time for the TRF7960A and use it here. That is a feature that is generally used for the slot market for ISO15693 anticollision and handles sub-1 ms timing well, but the maximum can be set to 9.6 ms. To use this, you'd need to set the Enable No Response Interrupt bit (B0) in Register 0x0D (Interrupt Mask Register) before sending the inventory command. Again, I never used that feature in this way but I see no reason it can't work either. So you can pick which method to try first.

  • Hi Ralph,

    I would recommend to define an RX timeout on the MCU side and if you don't get a response before the timeout expires, assume no reply which would be accurate for this application.

    I tried this with the "Read Single Block" command, which is what you have in the picture that I posted. The problem is that there is a "[" "]" "\r" "\n" pending to be sent back to the MCU with a time gap of 39.88 mS. So, if you send the read command, then wait 10 mS, and then send the next read command it will jam the RX in the MCU. Note: I'm doing several reads while multiplexing a few antennas. It's working great. I just need to seep it up and get rid of this 40mS gap.

    I haven't tried this with the single slot inventory command. I will give it a try this week.

    One other option that is theoretically possible but I've never tried to use in this specific manner is to maybe adjust the RX No Response Wait Time for the TRF7960A and use it here. That is a feature that is generally used for the slot market for ISO15693 anticollision and handles sub-1 ms timing well, but the maximum can be set to 9.6 ms. To use this, you'd need to set the Enable No Response Interrupt bit (B0) in Register 0x0D (Interrupt Mask Register) before sending the inventory command. Again, I never used that feature in this way but I see no reason it can't work either. So you can pick which method to try first.

    This approach looks promising. Do you mind telling me how the whole command looks like to change this register. I am using the following sequence to start up the TRF7960A,

    Ping: 0108000304FF0000

    Enable External Antenna: 01080003042B0000

    Set ISO15693 Mode: 010C00030410002101020000

    AGC Toggle: 0109000304F0000000

    AM/PM Toggle: 0109000304F1FF0000

    And then I'm reading the tags using the following command,

    Read Block 5: 010B000304180020050000

    Would this register modification that you are suggesting be placed right after "AM/PM Toggle" in the startup sequence? Can you post the whole command to to this register modification?

    Thanks,

    Robert

  • Hi Robert,

    Are you using the TRF7960AEVM?
  • Hi,

    No, I'm using the DLP-RFID2.

    Robert
  • Hi Roberto,

    You may not have much luck with this then. My knowledge of that modules firmware is limited but I am pretty sure you can't remove the serial communication aspect. That's whats causing the delay like as seen with the  "[" "]" "\r" "\n" packet. It uses UART for that and that UART communication is slowing things down.

    For the No Response Interrupt idea, I don't know if that'd even be possible from a sequence of commands standpoint as I am unsure if the device is even configured to understand what that interrupt would mean outside of anticollision context. I don't know the register settings for it either.

    That module unfortunately really limits your options with the TRF79xx.

    If you have the option to change eval hardware I'd recommend getting our TRF7970A BoosterPack, and MSP430G2553 LaunchPad, and use our TI example for your application which you'd then need to add the multiplexer code into. But once you get to that point, then you can control the firmware in a much more fine tuned manner and get the timing within the ranges you need.

  • Oh also for the host commands this document might help: www.ti.com/.../sloa141.pdf

    That resource should be able to give you the guidance to try out the No Response Interrupt idea.
  • Hi,

    Yes, I'll try the BoosterPack if I can't make this work with the DLP module. Thanks,

    Robert
  • Ralph,

    Well, I have nothing to lose by giving it a try. This technical paper describes the registers in more detail. www.ti.com/.../slos732e.pdf

    Let's see. I'll keep you posted.

    Robert
  • Hi Roberto,

    Yeah the datasheet gives you all the details, but you are limited by the Host Commands as described in that document when working with the DLP module. Thats what I meant by not knowing the register settings.

    Furthermore, you can't modify how it handles various IRQ status. I don't know if when you send it a custom command, if it will disregard the IRQ status being 0x01 for when no reply happens or if it will react to that as being a tag didn't reply in time etc.

    Basically that DLP module is a blackbox you can only interact with in a limited manner, and while it is okay for a general application, once you need to do something specific like control timings, then things can become pretty tricky.

    Between the Host Command guide and the Datasheet, you should be able to at least setup the register for the No Response Timeout but if the rest of the code in the module even knows what to do with that TRF setting is TBD.

  • Thanks Ralph,

    By the way, what type of interrupt is this? Is this a software interrupt or a hardware interrupt? Anyways, I will give it a try and see what happens. I haven't played much with the inventory command either, so I will try that too.

    Robert
  • Hi Roberto,

    It's a hardware interrupt on the IRQ line which will prompt the host MCU within the module (the MCU you are sending UART commands to) that an event occurred on the TRF7970A. That host MCU (whose firmware you can't modify) would then need to properly interpret and handle the IRQ. Given that this is an unconventional use for that interrupt (at least in our experiences) I just don't know what that host MCU will do with it.