嘿,
在我的公司,我们想使用 PN5190 RFID 阅读器与
STM32 MCU 一起工作。不幸的是,当我尝试通过 SPI 与它
通信时,我无法从 PN5190 得到答案。问题是 PN5190 的文档在涉及 spi 通信的结构时似乎有点不精确(或者我只是没弄对)。所以我不能百分百确定我是否只是以错误的方式与芯片通信,或者硬件是否存在其他问题。因此,我使用逻辑分析器(SendDieIDCmd_Logic_Analyzer.png 和 RcvDieID_Logic_Analyzer.png)跟踪了我的传出 SPI 通信。我希望有人能告诉我我的 spi 消息是否有误,或者它们是否应该工作,也许存在一些与硬件相关的问题。不幸的是,我没有评估板,而且 PN5190 评估板目前缺货。
所以我们使用的PN5190
电路如RFID_circuit.png所示。我们使用 3.8V
电源 (VSYS1)。启动后,我首先将 VEN 引脚设置为高电平以启用芯片。之后我尝试获取 Die ID。但我总是收到 0xFF。我还尝试获取版本或写入和读取寄存器,如指令层数据表附录 A“示例”。但它们都不起作用。我还看到我从未收到来自 IRQ 引脚的任何中断。
这是我的代码看起来像读取 DieID(简化):
/* TLV Header */
uint8_t MSG_FLOW_WRITE = 0x7F;
uint8_t MSG_FLOW_READ = 0xFF;
/* PN5190 Command/Response List */
uint8_t CMD_GET_DIEID = 0x26;
uint32_t
tiMEOUT_SPI = 100;
/* Enable VEN Pin */
gpioRfidEn.WriteHigh();
/* Get Die ID
* send: 0x7F, 0x26, 0x00, 0x00
* recv: 0xFF, 0x26, 0x00, 0x03, 0x??, 0x??, 0x??
*/
uint16_t length = 0;
uint8_t* pLength = (uint8_t*)&length;
uint8_t writeBuf[] = { MSG_FLOW_READ, CMD_GET_DIEID, pLength[1], pLength[0] };
uint8_t readBuf[7] = { 0 };
rfidSpi.CsLow();
rfidSpi.Transmit(writeBuf, sizeof(writeBuf), TIMEOUT_SPI);
rfidSpi.CsHigh();
osDelay(100);
rfidSpi.CsLow();
rfidSpi.Receive(readBuf, sizeof(readBuf), TIMEOUT_SPI);
rfidSpi.CsHigh();
我希望至少有人能给我一个提示,问题是我构建消息的方式。如果您需要更多信息,请告诉我。