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;
}