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:TX 之后 SPI RX FIFO 不为空?

Guru**** 2391225 points
Other Parts Discussed in Thread: TRF7960A, MSPM0L1306

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1503480/mspm0l1306-spi-rx-fifo-not-empty-after-tx

器件型号:MSPM0L1306
主题中讨论的其他器件:TRF7960A

工具/软件:

你好。 我正在开发一个由 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);//发送虚拟字节、捕获结果

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Bruce、如果我发送一个字节并希望接收一个字节、我必须进行2次读取(一次读取不需要的 Rx 字节、一次读取我预期的响应)? 是否知道不需要的 Rx 字节的值(例如0x00或0xFF)? 我假设当我发送一个虚拟字节来生成一个时钟信号以使从器件可以响应时、还会收到一个不需要的 Rx 字节?

    感谢您的答复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。 通常会看到一个交换、在这个交换中、您发送一些类似{READ-REGISTER-3、DIMMING-0xFF}的内容、然后返回{UNOLAT、REGISTER-3-CONTINTS}。 在进入"register-3-contents"之前、必须从 Rx FIFO 中读取"无效"字节。 从设备数据表通常提供波形来显示对应关系。 (在某些器件中、该字节实际上是有意义的。)

    您可以查看从器件的数据表、但通常不提供"无效"字节的值(例如、Hi-Z)。