问题描述
我有一个包含 13 个页面的标签,每个页面有 4 个块,总共有 52 个标签的块。 由于我尝试使用 ISO 15693 命令登录标签、添加、保存或保护里面的数据,所以我想使用“获取多块状态保护”,看看标签的块是如何受到保护的(有4种保护状态类型)。 结果检查该函数输出一个字符串以显示该命令是否可以正确使用(“_0”为假或“_1”为真)。当我预先选择要保护的页面并检查“获取多个块状态保护”时,它确实会显示该块具有哪种保护作为输出。但它总是给出“_0”而不是“_1”,因为 if (g_sTrfStatus == RX_COMPLETE) 条件错误,这意味着没有收到数据。
我为命令信息和请求的参数添加了截图:
[1]:https://i.stack.imgur.com/oJ76e.png
void TAG_MSP_GET_PAGE (uint8_t ui8ReqFlag,uint8_t ui8_getPage)
{ uint8_t ui8Offset = 0;
#ifdef ENABLE_HOST
uint8_t ui8LoopCount = 1;
uint8_t ui8RxLength = 0;
#endif
g_pui8TrfBuffer[ui8Offset++] = 0x8F; // Reset FIFO
g_pui8TrfBuffer[ui8Offset++] = 0x91; // Send with CRC
g_pui8TrfBuffer[ui8Offset++] = 0x3D; // Write Continuous
g_pui8TrfBuffer[ui8Offset++] = 0x00; // length
g_pui8TrfBuffer[ui8Offset++] = 0xF0; // length
if (ui8ReqFlag & 0x20)
{
g_pui8TrfBuffer[ui8Offset++] = 0xC0; // Length of packet in bytes - lower and broken nibbles of transmit byte length
}
else
{
g_pui8TrfBuffer[ui8Offset++] = 0x40; // Length of packet in bytes - lower and broken nibbles of transmit byte length
}
// if (ui8ReqFlag & 0x20)
// {
// g_pui8TrfBuffer[ui8Offset++] = 0xB0; // Length of packet in bytes - lower and broken nibbles of transmit byte length
// }
// else
// {
// g_pui8TrfBuffer[ui8Offset++] = 0x30; // Length of packet in bytes - lower and broken nibbles of transmit byte length
// }
g_pui8TrfBuffer[ui8Offset++] = ui8ReqFlag; // ISO15693 flags
g_pui8TrfBuffer[ui8Offset++] = 0x2C; // GET COMMAND CODE
g_pui8TrfBuffer[ui8Offset++] = 0x16; //IC Mfg Code
if (ui8ReqFlag & 0x20)
{
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++] = ui8_getBlock;
g_pui8TrfBuffer[ui8Offset++] = ui8_Protection_Status;
TRF79xxA_writeraw(&g_pui8TrfBuffer[0],ui8Offset);
g_sTrfStatus = TRF79xxA_waitRxData(5,15); // 5 millisecond TX timeout,15 millisecond RX timeout
if (g_sTrfStatus == RX_COMPLETE) // If data has been received
{
if (g_pui8TrfBuffer[0] == 0x00) // Confirm "no error" in response flags byte
{
#ifdef ENABLE_HOST
UART_sendCString("START:AW_GET_PRO_PAGE_");
UART_putByteDecimalValue(ui8_getBlock);
UART_sendCString("_");
UART_putByte(ui8_Protection_Status);
UART_sendCString("_1:END");
ui8RxLength = TRF79xxA_getRxBytesReceived();
if (ui8ReqFlag & BIT6)
{
ui8Offset = 2;
}
else
{
ui8Offset = 1;
}
for (ui8LoopCount = ui8Offset; ui8LoopCount < ui8RxLength; ui8LoopCount++)
{
UART_putByte(g_pui8TrfBuffer[ui8LoopCount]);
}
#endif
}
else
{
UART_sendCString("START:AW_GET_PRO_PAGE_");
UART_putByteDecimalValue(ui8_getBlock);
UART_sendCString("_");
UART_putByte(ui8_Protection_Status);
UART_sendCString("_0:END");
}
}
else
{
UART_sendCString("START:AW_GET_PRO_PAGE_");
UART_putByteDecimalValue(ui8_getBlock);
UART_sendCString("_");
UART_putByte(ui8_Protection_Status);
UART_sendCString("_0:END");
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)