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.

[参考译文] CC1312R:SPI DMA 实现-有没有任何示例?

Guru**** 2482225 points
Other Parts Discussed in Thread: LAUNCHXL-CC1312R1

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1219829/cc1312r-spi-dma-implementation---any-examples

器件型号:CC1312R

您好!

是否有示例说明如何在 SPI 通信中使用 DMA?

您好!

Michal

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

    SDK 中的 SPI 驱动程序使用 DMA:

    SPICC26X2DMA.h 文件参考(TI.com)

    Siri.

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

    好的、谢谢。  

    是否有任何即用型应用示例? 或仅选择您发送的 SDK?

    Michal

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

    SDK 中的 SPI 示例使用 SPI 驱动程序:

    TI 驱动程序

    Siri.

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

    你好。  

    该 SDK 似乎可以正常运行、只是存在一个问题、即 RX 缓冲区未填充任何数据。 我已使用逻辑分析器检查 MOSI 和 MISO 线路、传输正常-所有字节均已传输。  

    问题可能是什么?  

    传输的配置如下:

      SPI_Transaction transaction;
    
      /* Initialize master SPI transaction structure */
      transaction.count = len;
      transaction.txBuf = (void*)spiTempTxBuf;
      transaction.rxBuf = (void*)spiTempRxBuf; //buf;
    
      /* Perform SPI transfer */
      bool retVal = SPI_transfer( dmaSpi, &transaction );

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

    我不确定我是否理解您的意思? 是否在 SDK 中测试默认的控制器和 spipperipheral 示例、但没有 接收? 那么它怎么能"正常工作"呢?

    如果默认示例不起作用、请准确说明电路板的连接方式、UART 上显示的内容等

    如果您对示例进行了更改、则需要向我们提供所有更改、以便我们可以尝试在 LP 上重现问题以查看正在发生的情况。

    Siri.

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

    大家好。  

    传输本身 似乎工作正常、因为我可以在逻辑分析仪上看到所有字节都以两种方式进行传输(从主器件传输到从器件、从从从从器件传输到主器件)。  

    但这里的 spiTempRxBuf RX 缓冲器不会填充任何数据。 单字节。

    我没有使用示例。 我只使用 SDK 6.10.00.29中的 SPI 驱动程序库(cc13xx_cc26xx)

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

    如果您不使用我们的示例、我无法告诉您为什么您的代码无法正常工作、此时我不知道您在代码中执行什么操作、运行什么硬件、甚至您是如何连接电路板。

    如果有一个在我们的 LP 上运行并使用我们的驱动程序等的代码示例 我可以在这里尝试、但您需要共享您的代码。

    Siri.

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

    您好、尝试使用高速缓存。

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

    您好、使用高速缓存是什么意思?  

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

    我使用的是 LAUNCHXL-CC1312R1。  
    我使用的代码直接取自示例"nvsexternal"

        NVS_Handle nvsHandle;
        NVS_Attrs regionAttrs;
        NVS_Params nvsParams;
    
        NVS_init();
        NVS_Params_init(&nvsParams);
        nvsHandle = NVS_open(CONFIG_NVSEXTERNAL, &nvsParams);
    
        if (nvsHandle == NULL)
        {
          LOG( LOG_RAW, LOG_INFO, LOG_MASK_UNSPEC | LOG_MASK_PASSIVE, "memory open fail\n" );
        }
    
        /*
         * This will populate a NVS_Attrs structure with properties specific
         * to a NVS_Handle such as region base address, region size,
         * and sector size.
         */
        NVS_getAttrs(nvsHandle, &regionAttrs);
    
        /*
         * Copy "sizeof(signature)" bytes from the NVS region base address into
         * buffer.
         */
        int16_t returnValue = NVS_read(nvsHandle, 0, (void *)buffer, sizeof(signature));
        if( returnValue == NVS_STATUS_SUCCESS )
        {
          LOG( LOG_RAW, LOG_INFO, LOG_MASK_UNSPEC | LOG_MASK_PASSIVE, "Read SPI flash OK");
        }
    
        /*
         * Determine if the NVS region contains the signature string.
         * Compare the string with the contents copied into buffer.
         */
        if (strcmp((char *)buffer, (char *)signature) == 0)
        {
    
          /* Write buffer copied from flash to the console. */
          LOG( LOG_RAW, LOG_INFO, LOG_MASK_UNSPEC | LOG_MASK_PASSIVE, "%s", buffer);
          LOG( LOG_RAW, LOG_INFO, LOG_MASK_UNSPEC | LOG_MASK_PASSIVE, "Erasing SPI flash sector...");
    
          /* Erase the entire flash sector. */
          NVS_erase(nvsHandle, 0, regionAttrs.sectorSize);
        }
        else
        {
    
          /* The signature was not found in the NVS region. */
          LOG( LOG_RAW, LOG_INFO, LOG_MASK_UNSPEC | LOG_MASK_PASSIVE, "Writing signature to SPI flash...");
    
          /*
           * Write signature to memory. The flash sector is erased prior
           * to performing the write operation. This is specified by
           * NVS_WRITE_ERASE.
           */
          NVS_erase(nvsHandle, 0, regionAttrs.sectorSize);
          NVS_write(nvsHandle, 0, (void *)signature, sizeof(signature), NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
        }

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

    恐怕我真的不明白你究竟遇到什么问题、或者我如何帮助你。

    您询问有关 SPI + DMA 的信息、我已向您推荐了我们的 SPI 驱动程序

    您声称它有问题(数据没有被放入 spiTempRxBuf 中)、我询问了您的代码/您是如何使用它的、这样我就可以查看它。

    然后您突然引用 nvsexternal 示例、它使用 NVS 驱动程序、您发布该示例(几乎与我们的示例相同)、但您不会说您面临什么问题。

    如果您在 SPI 驱动程序方面有问题、请在我们的 LP 上发布此示例、该示例将重新创建 SPI 驱动程序问题、并说明我应该寻找什么器件(在该示例中为)。 到底哪些是不起作用的。

    NVS 也是如此;

    如果您在 NVS 驱动程序方面有问题、请在我们的 LP 上发布此示例、该示例将重新创建 NVS 驱动程序问题、并说明我应该查找什么内容(在该示例中)。 到底哪些是不起作用的。

    我很抱歉现在不能再多帮助你了。

    Siri.