主题中讨论的其他器件:TRF7960A、
工具/软件:
你好。 我正在开发一个由 MSPM0L1306控制 TRF7960A RFID 读取器的项目。 事实上、我正在调试我的程序、通过 SPI 发送一个字节后、我可以通过 CCS 的寄存器视图看到 SPI STAT 寄存器中的 RFE 位变为0 (接收 FIFO 不为空)、我几乎可以肯定没有任何内容发送到 MCU、那么为什么 RX FIFO 不为空? 显示 RXDATA 寄存器的值为0x00。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
你好。 我正在开发一个由 MSPM0L1306控制 TRF7960A RFID 读取器的项目。 事实上、我正在调试我的程序、通过 SPI 发送一个字节后、我可以通过 CCS 的寄存器视图看到 SPI STAT 寄存器中的 RFE 位变为0 (接收 FIFO 不为空)、我几乎可以肯定没有任何内容发送到 MCU、那么为什么 RX FIFO 不为空? 显示 RXDATA 寄存器的值为0x00。
SPI 本质上是双向的。 对于每个 Tx 字节、都有一个 Rx 字节、即使您对它不感兴趣也是如此。 这些字节将累积在 Rx FIFO 中、直到您将其读出。
事务的前几个 Tx 字节通常是对从器件的请求、后跟供从器件响应的虚拟字节。 在获取结果时、您需要考虑 Rx FIFO 中前几个(不需要的) Rx 字节。
在 MSP430上也是如此、但 Rx FIFO 只有1个字节。
对于短事务、我通常编写一个小函数、写入一个 Tx 字节、然后立即读取相应的 Rx 字节;调用方可以自由使用或丢弃 Rx 字节、但我始终知道对应的信息。 在这种情况下、它可能如下所示:
uint8_t spix(uint8_t c) { DL_SPI_transmitDataBlocking8(SPI_0_INST, c); c = DL_SPI_receiveDataBlocking8(SPI_0_INST); return(c); }
您可以使用如下内容:
>(void) spix (WREN); //写入使能、忽略结果
或
> gRxPacket[i]=spix (0xFF);//发送虚拟字节、捕获结果
是的。 通常会看到一个交换、在这个交换中、您发送一些类似{READ-REGISTER-3、DIMMING-0xFF}的内容、然后返回{UNOLAT、REGISTER-3-CONTINTS}。 在进入"register-3-contents"之前、必须从 Rx FIFO 中读取"无效"字节。 从设备数据表通常提供波形来显示对应关系。 (在某些器件中、该字节实际上是有意义的。)
您可以查看从器件的数据表、但通常不提供"无效"字节的值(例如、Hi-Z)。