我们目前正在将 ST 代码改编成 Linux 设备驱动程序,但我们在 Gen2 Select 选项方面遇到了一些问题:我们能够:
- 执行盘点并列出天线范围内的所有标签
- 在盘点期间找到标签并获取其句柄时读取/写入 EPC、tiD 和 USER 数据。
- 使用 startTagConnection 函数发送 Select 命令以通过其 EPC 仅选择一个标签。
选择标签后,我们可以调用 gen2AccessTag
功能,我们能够 100% 的时间检索标签句柄,但是当试图从存储库中读取数据时,我们只有 5% 的时间成功(95% 的时间我们得到 ERR -33(芯片无响应) ), 或者 ERR -35 (err chip preamble)).
有关代码的更多详细信息:
对于我们要选择的每个标签,我们设置 selParams
相应的全局变量:
- selParams[0].mode = STUHFL_D_GEN2_SELECT_MODE_CLEAR_AND_ADD;
- selParams[0].target = STUHFL_D_GEN2_TARGET_SL;
- selParams[0].action = 0;
- selParams[0].memoryBank = STUHFL_D_GEN2_MEMORY_BANK_EPC;
- memcpy(selParams[0].mask, tag->epc.data, tag_size);
- selParams[0].maskBitPointer = 32; // CRC + PC = 32 bits, EPC starts at 33rd, so index 32
- selParams[0].maskBitLength = 8 * tag_size;
- selParams[0].truncation = 0;
- numSelects = 1;
然后,我们按照 ST Gen2_Read 中完成的命令
功能:
- 调用 startTagConnection 发送 Select 命令并检索唯一应答的标签;
- 如果需要,调用 gen2AccessTag 使标签进入 Secured 状态;
- 调用 gen2ReadFromTag 来读取数据,这与我们在库存循环中能够读取的方式相同(参见我们当前能够执行的案例 n°2)。
你能指导我们找到解决方案吗?