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.

[参考译文] RM46L852:如何在写入和读取操作之间保持 SPI4 CS 为低电平。

Guru**** 2577385 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569113/rm46l852-how-to-maintain-spi4-cs-low-between-write-and-read-operation

部件号:RM46L852
主题中讨论的其他器件:HALCOGEN

工具/软件:

您好、

我尝试使用 SPI4 外设从 SPI 闪存读取数据。

手动控制 CS(使用 GPIO)时、一切都运行良好。 但是、当我让 SPI4 外设控制 GPIO 时、无法获得有效读数。

 JEDEC ID 命令就是一个简单的示例:

spiBASE_t *base = spiREG4;
spiDAT1_t  data_format = {.CS_HOLD = true,
                          .WDEL = true,
                          .DFSEL = SPI_FMT_0,
                          .CSNR = SPI_CS_0};

uint16_t tx[10] = {JDEC_COMMAND};
uint16_t rx[10] = {0};
spiTransmitData(base, &data_format, 1, tx);
spiReceiveData(base, &data_format, 4, rx);

我怀疑问题在于 CS 在发送和接收操作之间被复位。

如何确保 CS 保持低电平?

请注意、我不能使用  spiTransmitAndReceiveData、因为 我不想在传输的同时接收数据。

此致、

Gabriel

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

    理想情况下、我希望具有如下功能:

    spiTransmitAndThenReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 srcblocksize, uint16 * srcbuff, uint32 destblocksize, uint16 * destbuff);

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

    您好 Gabriel、

    对延迟的回复表示歉意。

    您  只能使用 spiTransmitData 和 spiReceiveData、但在传输 API 中、应确保启用 CS_HOLD 位。

    如果您将上述突出显示的位设为 1、则 CS 将处于保持状态、这意味着 CS 在传输完成后不会变为高电平、它仅仍处于低电平。 然后您可以调用接收功能来完成作业并使 CS 再次变为高电平。

    我是说在用例中使用两个 DATA_FORMAT、将 CS_HOLD 设为高电平作为传输数据格式、将 CS_HOLD 设为低电平作为接收数据格式并进行测试。

    --

    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的回答。
    由于我需要更好地控制 CS_HOLD、而我需要发送 U8 而不是 U16、因此我决定简单地重写 halcogen 生成的代码。

    我将关闭此问题。 再次感谢。