我正在处理一个 基于 sloc297代码的 TRF7970A 应用。
除了读取特定标签数据之外、我还想使用"findTag"结果来检测我的器件中是否存在已标记的器件(以查看器件中的机械间隙是否被阻止)。
我需要定期检查以下情况:
- 到达时正好有一个标签-->然后读取数据,并注意我的设备中有一个部件。
- 是否有多个到达的标签-->忽略数据,但请注意我的设备中有一个部件
- 绝对没有标签到达-->没有要读取的数据,我可以确定我的设备中没有标记的部件
可以通过单槽库存命令(例如使用函数 ISO15693_sendSingleSlotInventory())来回答此条件。
我曾使用该功能、我只能区分"存在1个标签"和"不存在2个或更多个标签"。 为了确保不存在标签、我将需要运行一个防冲突例程(-> ISO15693_runAnticolision ())、此例程打击了我的通信流量。
是否有办法使用单个插槽资源清册结果来安全检测到没有到达的标签?
需要如何修改函数 ISO15693_sendSingleSlotInventory()? 我在下面的代码中添加了一些注释。
uint8_t ISO15693_sendSingleSlotInventory (void)
{
uint8_t ui8Offset = 0;
uint8_t ui8LoopCount = 0;
uint8_t ui8Status = STATUS_FAIL;
G_pui8TrfBuffer[ui8Offset++]= 0x8F; //复位 FIFO
G_pui8TrfBuffer[ui8Offset++]= 0x91; //通过 CRC 发送
G_pui8TrfBuffer[ui8Offset++]= 0x3D; //连续写入
G_pui8TrfBuffer[ui8Offset++]= 0x00; //字节形式的数据包长度-发送字节长度的高半字节和中半字节
G_pui8TrfBuffer[ui8Offset+]= 0x30; //字节数据包长度-发送字节长度的低半字节和不完整的半字节
G_pui8TrfBuffer[ui8Offset++]= 0x26; // ISO15693标志
G_pui8TrfBuffer[ui8Offset++]= 0x01; //库存命令代码
G_pui8TrfBuffer[ui8Offset++]= 0x00; //屏蔽长度= 0 (也不发送 AFI)
TRF79xxA_writeRaw (&g_pui8TrfBuffer[0]、ui8Offset); //发出 ISO15693清单命令
g_sTrfStatus = TRF79xxA_waitRxData (5、15); // 5毫秒 TX 超时、15毫秒 RX 超时
if (g_sTrfStatus == RX_COMPLETE) //如果已接收到数据
{
如果(g_pui8TrfBuffer[0]== 0x00) //确认响应标志字节中的"无错误"
{
//-->在此处检测到精确的1个标签
ui8Status = STATUS_SUCCESS;
// UID 从第3个接收的位开始(第1个是标志、第2个是 DSFID)
对于(ui8LoopCount = 2;ui8LoopCount < 10;ui8LoopCount++)
{
G_pui8Iso15693UId[ui8LoopCount-2]= g_pui8TrfBuffer[ui8LoopCount]; //将 UID 存储到缓冲区
}
G_ui8TagDetectedCount = 1;
}
否则
{
//-->该分支的情况如何
}
}
否则
{
//-->如果没有任何标签或超过1个标签、我将在此处进行联系
ui8Status = STATUS_FAIL;
}
返回 ui8Status;
}
谢谢- Martin