主题中讨论的其他器件:TRF7970A
您好的团队:
我的客户希望编写一 个多块函数代码、以便更方便。但在调试过程中发现一些错误、g_pui8TrfBuffer[0] 返回0x01作为失败状态。
您能不能帮助确认是否存在用于 writeMultiblock 函数的任何参考代码。
客户代码如下所示:
代码如下所示:
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; //强制使用寻址写入-强烈建议的做法
G_pui8TrfBuffer[ui8Offset++]= 0x8F; //复位 FIFO
G_pui8TrfBuffer[ui8Offset++]= 0x91; //使用 CRC 发送
G_pui8TrfBuffer[ui8Offset++]= 0x3D; //连续写入
G_pui8TrfBuffer[ui8Offset++]=((((0x0C+ui8DataLen)& 0xF0)>> 0x04); //数据包长度(以字节为单位)-传输字节长度的上半字节和中半字节
G_pui8TrfBuffer[ui8Offset++]=((0x0C+ui8DataLen)<< 0x04); //数据包长度(以字节为单位)-发送字节长度的较低半字节和不完整半字节
G_pui8TrfBuffer[ui8Offset++]= ui8ReqFlag;// ISO15693标志
G_pui8TrfBuffer[ui8Offset++]= 0x24; //编写单块命令代码
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[0]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[1]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[2]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[3]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[4]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[5]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[6]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= g_pui8Iso15693UId[7]; //标记 UID
G_pui8TrfBuffer[ui8Offset++]= ui8FirstBlock;
G_pui8TrfBuffer[ui8Offset++]= ui8NumberOfBlock; //块#(变量、对于 HF-I Plus 器件可转至0x3F、Pro 和 Standard、由"error"响应标志处理)
对于(ui8LoopCount = 0;ui8LoopCount < ui8DataLen;ui8LoopCount++)
{
G_pui8TrfBuffer[ui8Offset++]= pui8BlockData[ui8LoopCount]; //要写入标签的数据
}
TRF79xxA_writeRaw (&g_pui8TrfBuffer[0]、ui8Offset); //发出获取系统信息命令
G_sTrfStatus = TRF79xxA_getTrfStatus ();
//对 TI Tag-It HF-I ISO15693应答器的选项标志用例进行特殊处理
if (g_sTrfStatus = TRF_IDLE || g_sTrfStatus = TX_WAIT)
{
//检查是否设置了选项标志
IF (ui8ReqFlag & 0x40)
{
TRF79xxA_waitTxIRQ (10); // 10毫秒 TX 超时
G_sTrfStatus = TRF79xxA_getTrfStatus ();
如果(g_sTrfStatus = TX_COMPLETE) //发送完成
{
MCU_delayMillisecond (10);
TRF79xxA_sendDirectCommand (TRF79XXA_transmit next SLOT_CMD); //向外发送帧结束标记
TRF79xxA_waitRxIRQ (30); // 30毫秒 RX 超时
}
否则 //否则返回错误
{
返回 ui8Status = STATUS_FAIL;
}
}
其他
{
TRF79xxA_waitTxIRQ (10); // 10毫秒 TX 超时
TRF79xxA_waitRxIRQ (30); // 30毫秒 RX 超时
}
}
否则、如果(g_sTrfStatus = TX_COMPLETE)
{
//检查是否设置了选项标志
IF (ui8ReqFlag & 0x40)
{
MCU_delayMillisecond (10);
TRF79xxA_sendDirectCommand (TRF79XXA_transmit next SLOT_CMD); //向外发送帧结束标记
}
TRF79xxA_waitRxIRQ (30); // 30毫秒 RX 超时
}
其他
{
返回 ui8Status = STATUS_FAIL;
}
G_sTrfStatus = TRF79xxA_getTrfStatus ();
if (g_sTrfStatus = RX_COMPLETE) //如果数据已接收
{
if (g_pui8TrfBuffer[0]= 0x00) //确认响应标志字节中的"无错误"
{
//收到的答复
ui8Status = STATUS_SUCCESS;
}
else //响应字节中发回错误
{
ui8Status = STATUS_FAIL;
}
}
其他
{
//无响应
ui8Status = STATUS_FAIL;
}
返回 ui8Status;
}