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.

[参考译文] TM4C1294NCPDT:Tiva SPI_TRANSFER ()最大帧数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1448248/tm4c1294ncpdt-tiva-spi_transfer-max-frames

器件型号:TM4C1294NCPDT

工具与软件:

我正在使用中  

CCS 8.3.0.201810301800
TIRTOS 2.16.1.14、
编译器5.2.7
XDC 3.31.1333
TM4C1294NCPDT
NDK_2_25_00_09

我将通过 SPI 接口将大容量闪存连接到 Tiva。  我似乎发现了一个极限、以至于我无法进行超过1024个传输的连续 SPI 传输。

我将以下代码放在一起、看看传输计数的限制是多少、代码运行、传输工作到1024个字节、然后在1025时失败。

//从1开始、执行传输、如果成功、则在传输中添加一个、直到传输失败。  

for (RC=1;RC<0xFFFF;RC++)//该值在1025时失败、在1024时通过

  masterTransaction.count = RC;

  transferOK = SPI_transfer (masterSpi3、&masterTransaction);// TI RTOS 用户指南 P67/122
  if (transferOK =0)
  {
     printf ("spi_transfer ()%d %d\r"、RC、transferOK);

     休息;

   }
}

是否有办法让它进行约5000笔转账的连续转账?

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

    尊敬的 Doug:

     跟踪 C:\ti\tirtos_tivac_2_16_00_08\products\tidrivers_tivac_2_16_00_08\packages\ti\drivers\spi\SPITivaDMA.c 中的驱动程序代码、会检查传输计数是否大于1024。 请参见下文。 除非您修改驱动程序并重新编译 TI-RTOS、或者在您的应用程序级别、 当频率超过1024时、发出另一个 SPI_TRANSFUTE ()、否则我看不到解决这个问题的方法。  

    /*
    * ======== SPITivaDMA_transfer ========
    * @pre Function assumes that handle and transaction is not NULL
    */
    bool SPITivaDMA_transfer(SPI_Handle handle, SPI_Transaction *transaction)
    {
    unsigned int key;
    SPITivaDMA_Object *object = handle->object;
    SPITivaDMA_HWAttrs const *hwattrs = handle->hwAttrs;

    /* Check the transaction arguments */
    if ((transaction->count == 0) || (transaction->count > 1024) ||
    !(transaction->rxBuf || transaction->txBuf) ||
    (!(transaction->rxBuf && transaction->txBuf) && !hwattrs->scratchBufPtr)) {
    return (false);
    }