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.

TRF7962A: Code confirmation

Part Number: TRF7962A
Other Parts Discussed in Thread: TRF7970A

hi team : 

 my customer want to write a multiblock function code to be more convenience. but found some error during debug and the g_pui8TrfBuffer[0] return 0x01 as fail status.

 Would you help to confirm that is there any reference code for writeMultiblock function.

 and the customer code show as below:

 and the  code is as below:

 

uint8_t ISO15693_sendWriteMultipleBlock(uint8_t ui8ReqFlag, uint8_t ui8FirstBlock,uint8_t ui8NumberOfBlock, uint8_t ui8DataLen, uint8_t * pui8BlockData)

{

          uint8_t ui8Offset = 0;

          uint8_t ui8Status = STATUS_FAIL;

          uint8_t ui8LoopCount = 0;

          ui8ReqFlag = ui8ReqFlag | 0x20;                   // Mandatory use of addressed writes - highly recommended practice

          g_pui8TrfBuffer[ui8Offset++] = 0x8F;           // Reset FIFO

          g_pui8TrfBuffer[ui8Offset++] = 0x91;           // Send with CRC

          g_pui8TrfBuffer[ui8Offset++] = 0x3D;           // Write Continuous

          g_pui8TrfBuffer[ui8Offset++] = (((0x0C+ui8DataLen) & 0xF0) >> 0x04);     // Length of packet in bytes - upper and middle nibbles of transmit byte length

          g_pui8TrfBuffer[ui8Offset++] = ((0x0C+ui8DataLen) << 0x04);                         // Length of packet in bytes - lower and broken nibbles of transmit byte length

          g_pui8TrfBuffer[ui8Offset++] = ui8ReqFlag; // ISO15693 flags

          g_pui8TrfBuffer[ui8Offset++] = 0x24;                     // Write Single Block command code

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[0];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[1];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[2];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[3];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[4];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[5];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[6];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[7];          // Tag UID

          g_pui8TrfBuffer[ui8Offset++] = ui8FirstBlock;

          g_pui8TrfBuffer[ui8Offset++] = ui8NumberOfBlock;                     // Block # (variable, for HF-I Plus device can go to 0x3F, Pro and Standard handled with "error" response flags)

          for (ui8LoopCount = 0; ui8LoopCount < ui8DataLen; ui8LoopCount++)

          {

                     g_pui8TrfBuffer[ui8Offset++] = pui8BlockData[ui8LoopCount];                      // Data to write to tag

          }

          TRF79xxA_writeRaw(&g_pui8TrfBuffer[0], ui8Offset);                     // Issue the Get System Information command

          g_sTrfStatus = TRF79xxA_getTrfStatus();

          // Special handling to cover option flag use case for TI Tag-It HF-I ISO15693 transponders

          if (g_sTrfStatus == TRF_IDLE || g_sTrfStatus == TX_WAIT)

          {

                     // Check if the option flag is set

                     if (ui8ReqFlag & 0x40)

                     {

                               TRF79xxA_waitTxIRQ(10);          // 10 millisecond TX timeout

                               g_sTrfStatus = TRF79xxA_getTrfStatus();

                               if (g_sTrfStatus == TX_COMPLETE)     // If transmit is complete

                               {

                                         MCU_delayMillisecond(10);

                               TRF79xxA_sendDirectCommand(TRF79XXA_TRANSMIT_NEXT_SLOT_CMD);                     // Send out End of Frame marker

                                         TRF79xxA_waitRxIRQ(30);                                         // 30 millisecond RX timeout

                               }

                               else                                                                            // Otherwise return an error

                               {

                                         return ui8Status = STATUS_FAIL;

                               }

                     }

                     else

                     {

                               TRF79xxA_waitTxIRQ(10);          // 10 millisecond TX timeout

                               TRF79xxA_waitRxIRQ(30);          // 30 millisecond RX timeout

                     }

          }

          else if (g_sTrfStatus == TX_COMPLETE)

          {

                     // Check if the option flag is set

                     if (ui8ReqFlag & 0x40)

                     {

                               MCU_delayMillisecond(10);

                     TRF79xxA_sendDirectCommand(TRF79XXA_TRANSMIT_NEXT_SLOT_CMD);                     // Send out End of Frame marker

                     }

 

                     TRF79xxA_waitRxIRQ(30);                                        // 30 millisecond RX timeout

          }

          else

          {

                     return ui8Status = STATUS_FAIL;

          }

 

          g_sTrfStatus = TRF79xxA_getTrfStatus();

 

          if (g_sTrfStatus == RX_COMPLETE)               // If data has been received

          {

                     if (g_pui8TrfBuffer[0] == 0x00)            // Confirm "no error" in response flags byte

                     {

                               // Response received

                               ui8Status = STATUS_SUCCESS;

                     }

                     else              // An error has been sent back in the response byte

                     {

                               ui8Status = STATUS_FAIL;

                     }

          }

          else

          {

                     // No response

                     ui8Status = STATUS_FAIL;

          }

          return ui8Status;

}