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.

TRF7960 IRQ generation

Other Parts Discussed in Thread: TRF7960, TRF7963A, TRF7970A, TRF7960A

Dear forum,

We have integrated the TRF7960 to our custom board and i'm trying to read some ISO15693 tags. I can read and write registers through SPI (32bits microcontroller with linux) but I can't get to have an IRQ from the reader. Here are all the frames I send to the TRF7960 :

    trf7960_write_sync(COMMAND(CMD_EN_RX), 0);  // enable receiver

    trf7960_write_sync(0x00, 0x21); // Chipcontrol
    trf7960_write_sync(0x01, 0x02); // ISO
    trf7960_write_sync(0x09, 0x21); // Modulator
    trf7960_write_sync(0x07, 0x13); // Rx no response
  
    // Continuous write from 0x1D (TX length byte 1)
    buf[0] = 0x8f;  // Reset FIFO
    buf[1] = 0x91;  // TX with CRC
    buf[2] = 0x3d;
    buf[3] = 0;
    buf[4] = 0x40;   // number of bytes to tx
    buf[5] = 0x26; // flags (1 slots)
    buf[6] = 0x01; // inventory command
    buf[7] = 0x00;

I have checked the waveform with the following ppt : TRF796x-EVM-Oscope-TX_5F00_RX-Screen-Captures_2800_3_2900_.ppt and it seems ok.

The only time I have an interrupt is when I put my scope probe to the RX pin (8) : this is a collision interrupt (IRQ=0x02) which doesn't stop once it has started even after a dummy read.

Can anyone give me a hand on this issue ?

Thank you

 

  • Hi Birot,

    It appears you have the incorrect number of bytes to TX.  Number of bytes to TX should be 0x30 instead of 0x40.  The three bytes are flags(1 byte), Command(1 byte), and mask(1 byte). 

    Try changing number of bytes to 0x30 and let me know if that fixes your problem.

    Best Regards,

    Eddie LaCost

  • Hi Eddie,

     

    I also tried with 0x30 without success. I always read 0x40 in the RSSI register. Could it be an hardware issue ?

     

    Regards,

  • It could possibly be a hardware issue.  I have never seen the document you mentioned in your original post.  Where did you obtain TRF796x-EVM-Oscope-TX_5F00_RX-Screen-Captures_2800_3_2900_.ppt?  I have attached scope shots of the points your should check on your hardware.  This may be the same document you have seen.

    Reading a 0x40 in the RSSI register is correct if no tag was read.  This just indicates that the crystal oscillator is stable.

    Are you using parallel or SPI?  MSP430 or a different microcontroller?  Can you provide logic analyzer shots of your communication?

    Best Regards,

    Eddie LaCost

    TRF796x EVM Oscope TX_RX Screen Captures(3).ppt
  • Hi,

    I have found the document on this forum and it is quite the same of yours. I'm using the SPI bus with an iMX27 under linux.

    I do the communications screen shots as soon as possible with an oscilloscope.

    Regards

  • Hi, 

    Are there any updates on this particular topic ? I am having the same problem, using the TRF7960 with a Stellaris micro through SPI interface (no CS). I can tell the SPI driver is OK since I am able to write/read the TRF registers (for example i'm able to turn RF on and off). But when I write to FIFO i get no IRQ from the TRF.

    BElow is a sample of my code, coming from the anti collision source code for MSP430 :

    buf[0] = 0x8F;
    buf[1] = 0x91; // send with CRC
    buf[2] = 0x3D;
    // write continuous from 1D
    buf[3] = 0x30;
    buf[4] = 0x00;
    buf[5] = flags; //0x26 // ISO15693 flags
    buf[6] = 0x01;
    buf[7] = 0x00; // mask length, 0

    TRF7960ResetIrqStatus();

    GPIOPinIntClear(TRF7960_IRQ_BASE, TRF7960_IRQ_PIN);
    GPIOPinIntEnable(TRF7960_IRQ_BASE, TRF7960_IRQ_PIN);

    TRF7960FIFOWrite(&buf[0], mask_size + fifo_length); // writing to FIFO

    I would be greatful to have any kind of support here, it's been a few days I have been stuck on that issue...

    Thank you, 

  • Hello,

    We got the same problem as you mention here, we also develop our own board but  we use TRF7963A instead. I want to use ISO14443A protocol so I do:

    void ISO14443A_SendReq_A()
    {
        int8_t buf[6];

        buf[0] = 0x8f;
        buf[1] = 0x91;
        buf[2] = 0x3d;
        buf[3] = 0x00;
        buf[4] = 0x10;                             //  0x0f - I also tried with these setting here
        TRF7963_RawWrite(buf, 5);    
        buf[0] = 0x3F;
        buf[1] = 0x26;                            // REQ_A command
        buf[2] = 0x00;                            // dummy byte for fix SPI single register write
        TRF7963_RawWrite(buf, 3);    
    }   

    ....

    main()

    {

        TRF7963_WriteRegister(CHIP_STATUS_CONTROL,0x21);
        TRF7963_WriteRegister(ISO_CONTROL,0x08);

        TRF7963_WriteRegister(MODULATOR_SYSCLK_CTRL,0x21);

        ISO14443A_SendReq_A();

    }

    I'm sure that SPI works well. I can read IRQ status and there is 0x80, but there is no IRQ toogle. Any sugestion here?? I encounter that if i don't turn of RF in CHIP_STATUS register I see IRQ on pin, so hardware I think it is not hardware problem. TRF7963_RawWrite() function is the same as in demonstration software...

    Thank you a lot for any suggestion.

  • Hello

    I just wanted to know if anyone has solved this problem of TRF7960's interruption, namely that it does not stop once a collision is detected.
    I currently have the same problem.

    Thanks

  • Hello,

    Please describe your problem in more details, I solved my and made this chip running correct for me. Maybe I could help you.

  • My SPI works well and I have interrupts from TRF7960.

    But, after a time, the interrupt is continuous and shows collisions. In the interrupt routine I reset the FIFO and the flags of the interrupt but I fall immediately in interrupt (always in collision). So I can not do anything else, the uP is constantly trying to process the interrupt, which is continuous

  • I really don't understand what is exactly wrong, but try to check what value is in status register, please check if your read implementation of SPI comunnication is consistent with http://www.ti.com/lit/an/sloa140/sloa140.pdf (remember about dummy read) If pcb is your design also check if there is no external source of noise, maybe there is a problem. Did you check that irq status register has the same/different value when you read it in your IRQ? Can you see that interrupt pin is toogling (after you read interrupt status)? 

  • Sorry I'm not very explicit.

    My system communicates with another system by the RF link with the chip TRF7960.
    Communication is functional but after a while I'm stuck.
    I receive an interruption of the RF chip. I read the status register, which tells me a collision (0x42). I get the address of the collision, do a transmit and reset the flag of the interrupt. Except that once I leave the interrupt routine, another interrupt is generated with the same value in the status register (0x42), as if I had not reset the flag.
    So I'm stuck in the treatment of this continious interrupt and I can not do anything else.

  • Hi 

    Have you solved your problem? I'm stuck  at that point either, with the exactly same code, and no IRQ signal.

    Do you haveany clue or tip?

    Thanks

  • Hi

    you can just write  your ISO  Control Register(0x01)with the value 0x01 for ISO15693 operations, if you are not using SYS_CLK out. I was having the same issue with TRF7970a.Then Josh Wyatt helped me out

  • Hi, here is a very simple question. Does the IRQ pin on the TRF7960 go high to low when an interrupt is triggered or low to high? I can't seem to find this documented anywhere. I'm struggling to get the interrupts to function correctly and have somehow managed to confuse myself as to what I should be expecting. Initially I thought the IRQ line stays high and drops low on interrupt, but I'm not so sure anymore.

  • IRQ is active high.  See figure 6-21 in the TRF7960A datasheet for an example of the IRQ line triggering. 

    http://www.ti.com/lit/gpn/trf7960a