NXP MCU 技术论坛
直播中

余温重顾

9年用户 890经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

PN5190 RFID阅读器不响应SPI是怎么回事?

嘿,
在我的公司,我们想使用 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();
我希望至少有人能给我一个提示,问题是我构建消息的方式。如果您需要更多信息,请告诉我。

更多回帖

发帖
×
20
完善资料,
赚取积分