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.

[参考译文] RTOS/CC1310:SPI 事务

Guru**** 2595770 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/588285/rtos-cc1310-spi-transaction

器件型号:CC1310

工具/软件:TI-RTOS

您好!

从项目开始、我就在使用 SPI 驱动器与外部闪存进行通信。

一切都很好、直到我达到了一个我需要很快做事情的地步。

SPI 通信速度不够快、因此我开始调查原因。

我发现速度的宽吻是交易的次数。

我每次读取/写入一个字节(函数如下)。 因此、要写入整个存储器页(4096字节)、我要进行4096次事务。

uint8_t spi_send_receive_8bits (spi_handle * spiHandle、uint8_t aByte)
{
uint8_t rxByte;
uint8_t txByte;

spi_Transaction Transaction;

txByte = aByte;

spiTransaction.count = 1;
rxTransaction.rxBuf =&rxByte;
spiTransaction.txBuf =&txByte;

spi_transfer (* spiHandle、&spiTransaction);

return rxByte;
} 

我重新写入它、以便一次读取/写入64个字节。 它大幅减少了读取/写入相同4096字节所需的时间。 现在、我要进行64个事务、而不是4096个事务。

但我需要更快地完成它。

我的问题是:两个缓冲区的大小必须相同?

我有一个包含4096字节的 rxBuffer。

要从外部存储器读取一个字节、我需要发送一个虚拟字节。

我想做如下的事:

void spi_read_buffer (spi_handle * spiHandle、uint8_t * rxBuffer、uint16_t size)
{
spi_transport spiTransaction;

uint8_t dummyByte = 0x00;

spiTransaction.count = size;
spiTransaction.rxBuf = rxBuffer;
spiTransaction.txBuf =&dummyByte;

spi_transfer (* spiHandle、 spiTransaction);
} 

使用相同的逻辑、我想写入一个 n 字节的 txBuffer、而不用考虑返回的字节。

两个大小相同的缓冲区的问题是、我需要创建一个具有4096字节的第二个缓冲区。 我没有可用的 RAM 或闪存。

是否有任何方法可以实现我想要做的事情?

谢谢!

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

    您好!

    您应该能够将 txBuf 设置为 NULL 来读取数据。

    这应允许您使用单个缓冲器来存储 RX 数据。

    此致、

    米歇尔

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

    [引用用户="Michel Solecki"]

    您好!

    您应该能够将 txBuf 设置为 NULL 来读取数据。

    这应允许您使用单个缓冲器来存储 RX 数据。

    此致、

    米歇尔

    [/报价]

    您好、Michel、

    感谢您的快速回答!

    相反、我是否可以在只需要写入数据时将 rxBuf 设置为 NULL?

    此致。

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

    [引用 user="Mad River"]相反,我是否可以在只需要写入数据时将 rxBuf 设置为 NULL?

    它可以双向工作。 不要同时将两者设置为 NULL。

    此致、

    米歇尔

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

    我稍后会尝试!
    非常感谢!