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 : Write to ISO15693 tag OK but not receive any response!

Other Parts Discussed in Thread: LM3S1607, TRF7960A, TRF7960

I use : TRF7960A + LM3S1607 :

- Detect ISO15693 tag : OK (Read UID)

- Read a block : OK (Read back written data)

- Write a block : OK. But there is a strange thing when writing!

I monitor IRQ state, just 0xA0 and 0x80  no 0x40.

Both reading and writing call the function : 

u08_t HostRequestCommand(u08_t *pbuf, u08_t length, u08_t broken_bits, u08_t no_crc);

ported form TRF7960 EVM.

What wrong?

  • did you send EOF after waiting >10mSec (after getting the TX Complete IRQ and servicing it)? if not, then this is why the tag would not respond with "no error" i.e. 0x00

  • 1. Is this code for EOF sending ?

    	if( (	((iso15693_buf[5] & 0x40) == 0x40) && ((iso15693_buf[6] == 0x21) || (iso15693_buf[6] == 0x22)|| (iso15693_buf[6] == 0x23)|| (iso15693_buf[6] == 0x24) ||
    				(iso15693_buf[6] == 0x27)|| (iso15693_buf[6] == 0x28) || (iso15693_buf[6] == 0x29)|| (iso15693_buf[6] == 0x2A))) ||
    				((iso15693_buf[5] == 0x00) && (((iso15693_buf[6] & 0xF0) == 0x20) || ((iso15693_buf[6] & 0xF0) == 0x30) || (iso15693_buf[6] & 0xF0) == 0x40))  )
    	{	
    		DelayMs(30);
    		TRF7960Command(TRF7960_RESET_FIFO_CMD);
    		DelayMs(30);
    		TRF7960Command(TRF7960_TRANSMIT_NEXT_SLOT_CMD);
    	}

    this code is ported from : 

    if( (((buf[5] & BIT6) == BIT6) && ((buf[6] == 0x21) || (buf[6] == 0x22)|| (buf[6] == 0x23)|| (buf[6] == 0x24) ||
    (buf[6] == 0x27)|| (buf[6] == 0x28) || (buf[6] == 0x29)|| (buf[6] == 0x2A)))
    || (buf[5] == 0x00 && ((buf[6] & 0xF0) == 0x20 || (buf[6] & 0xF0) == 0x30 || (buf[6] & 0xF0) == 0x40))
    )
    { 
    McuDelayMillisecond(30); //originally 20mSec, 100mSec seems to much
    Trf796xReset(); //took out to see if low data rate RMB could improve
    McuDelayMillisecond(30); 
    Trf796xTransmitNextSlot();
    }
    

    2. I see in this post : http://e2e.ti.com/support/low_power_rf/f/667/t/326586.aspx

    when writing to tags with the option flag set, which is correct for TI and some other ISO15693 tags,
    you need to wait more than 10mSec , then send EOF/Slot Marker (command code 0x14,
    will show up in your LSA as 0x94), to get the tag to respond with 0x00 (means successful write, no error)

    what does it mean : "command code 0x14, will show up in your LSA as 0x94"?

  • I think I solved the problem!

    just add delay after  TRF7960Command(TRF7960_TRANSMIT_NEXT_SLOT_CMD);  and can decrease delay time:

    if( ( ((iso15693_buf[5] & 0x40) == 0x40) && ((iso15693_buf[6] == 0x21) || (iso15693_buf[6] == 0x22)|| (iso15693_buf[6] == 0x23)|| (iso15693_buf[6] == 0x24) ||
    (iso15693_buf[6] == 0x27)|| (iso15693_buf[6] == 0x28) || (iso15693_buf[6] == 0x29)|| (iso15693_buf[6] == 0x2A))) ||
    ((iso15693_buf[5] == 0x00) && (((iso15693_buf[6] & 0xF0) == 0x20) || ((iso15693_buf[6] & 0xF0) == 0x30) || (iso15693_buf[6] & 0xF0) == 0x40)) )
    {
    DelayMs(10);
    TRF7960Command(TRF7960_RESET_FIFO_CMD);
    DelayMs(10);
    TRF7960Command(TRF7960_TRANSMIT_NEXT_SLOT_CMD);
    DelayMs(10);
    }

    Thanks!

  • sounds correct. the EEPROM cells need at least 10mSec to write correctly before the EOF request comes in for making it respond with a "no error"  response (which means it was written successfully)

    see note on page 11 here: http://www.ti.com/lit/ug/scbu011/scbu011.pdf