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.

[参考译文] CC3220SF:主控仅 Tx 模式下的 SPI DMA 不能传输所有数据。

Guru**** 2545250 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1025901/cc3220sf-spi-dma-in-master-tx-only-mode-doesn-t-transfer-all-the-data

器件型号:CC3220SF
Thread 中讨论的其他器件:SysConfig

你好!

我目前正在主器件 TX 模式下使用 SPI、并尝试向我的外设发送数据。 如果我将 minDMA 传输大小设置为非常高的值(即不使用 DMA)、我已经成功地发送了数据。 如果我将模式设置为全双工模式、我还能够使用 DMA 发送数据。 但是、当我尝试仅在主 Tx 模式下使用 DMA 发送数据时、它挂起后只能发送33个字节。 很明显、MCU 似乎不会崩溃(如果我有 SPI 超时、我可以看到程序继续执行)、数据就不会发送。 我对下一步的尝试有点失落、因为这似乎是一个 TI 驱动程序问题。 器件 SPI 停止工作后、我有寄存器状态、并附上了输出的外观图片。  

e2e.ti.com/.../5758.GSPIandUDMAregisters.txt

感谢您的任何帮助!   

谢谢!

Vasav

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

    只是为了确保我正确理解-问题 发生在第一次 TX 尝试时、对吧?

    您是否仅在 syscfg 中更改了 SPI 的双工定义?

    交易的规模是多少?

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

    您好、Kobi、
    是的、这在第一次 TX 尝试时发生。
    是的、我只更改 SPI 的双工模式。
    事务大小为100字节。
    Vasav

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

    好的、我将在这个上打开一个错误。

    它可能会在下一个 SDK 中进行处理。

    现在请使用全双工配置。

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

    你好,Kobi!

    感谢您的参与。 我想知道您是否有下一个 SDK 的预计发布日期?  
    我是否可以通过某种方式跟踪 TT (即、是否有一个链接可以查看错误进度)?
    此外、我是否可以在 SDK 发布之前获取代码? 遗憾的是、我无法使用全双工配置、因为主 Rx 引脚与 SPI 同时用作 GPIO。  
    如果您对可能的解决方案有任何建议、我们将不胜感激!  

    谢谢!
    Vasav

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

    您是否检查了其他引脚分配?

    无法跟踪错误状态。 您需要查看 SDK 的发行说明。  

    目前、我无法承诺使用确切的 SDK 来引入该修复程序。

    BR、

    Kobi

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

    您能解释一下其他引脚的引脚分配是什么意思吗? 现在进行任何硬件更改都有点困难、因为我们处于"冻结"硬件的设计周期。 唯一可行的更改是在软件上进行的。  

    我确实需要修复此错误、因为我们的核心功能之一基于此。 我是否可以通过电子邮件与开发团队联系、以便我可以跟进他们并尝试尽快获得修复?  

    非常感谢您的帮助!

    Vasav

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

    如果您已准备好硬件、则 不同的引脚复用就没有关系了。

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

    您是否对我可以尝试的内容有任何其他想法? 在我的初始说明中我不够清楚、但我首先要使用 DMA 的主要原因是、它会加快 SPI 命令之间的时间、并在发送数据时释放 CPU 以进行计算。 是否有其他策略可最大限度地缩短多个 SPI 命令之间的时间?

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

    您可以尝试更新 TI 驱动程序代码( SDK 中提供了源代码)或 syscfg 配置(自动生成的文件)。  

    我认为、无论双工选择和引脚索引如何、只要是 TX  (#define SPICC32XXDMA_PIN_NO_CONFIG 0xFFFF)、RX 都将始终启用。 但是、我们仍需要了解确切的原因并检查可能 的解决方案。  

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

    Vasav、您好!

    您可以共享示例代码吗? 此外、我认为事务大小需要进行32字节对齐。 您能否更新该信息并重新测试?

    谢谢、

    Vince  

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

    您好、Vincent、
    您能否更详细地解释一下您认为事务大小需要与32字节对齐意味着什么?  

    #include "spi_driver.h"
    
    #include <ti/drivers/SPI.h>
    #include <ti_drivers_config.h>
    
    #include <stdlib.h>
    #include <unistd.h>
    
    SPI_Handle masterSpi;
    SPI_Params spiParams;
    SPI_Transaction transaction;
    static bool spi_inited = false;
    void init_spi_driver(uint8_t miso, uint8_t mosi, uint8_t sck, uint8_t ss,
                         uint8_t nreset) {
      if (spi_inited) {
        log_warning("SPI_DRIVER: SPI already inited!");
        return;
      }
      SPI_init();
      SPI_Params_init(&spiParams);
      spiParams.bitRate = 2660000;  // 2MHz clock
      spiParams.transferTimeout = 5000;
      masterSpi = SPI_open(CONFIG_SPI_MASTER, &spiParams);
    
      spi_inited = true;
      return;
    }
    
    void spi_write(uint8_t *array, int len) {
    
    
      transaction.count = len;
      transaction.txBuf = (void*) array;
      bool transferOK = SPI_transfer(masterSpi, &transaction);
      return;
    }
    
    
    #define LEN_TEST_ARRAY 1000
    void run_spi_driver_test(void){
      init_spi_driver(0, 0, 0, 0, 0);
      uint8_t test_array[LEN_TEST_ARRAY] = {};
      for (unsigned i = 0; i < LEN_TEST_ARRAY; i++){
            test_array[i] = (i + 1)%255;
      }
      for (unsigned j = 0 ;j < 10; j++){
        spi_write(test_array, LEN_TEST_ARRAY);
      }
    }
    

    谢谢!
    Vasav

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

    Vasav、您好!

    Kobi 已不在办公室,将于9月6日返回。 同时、Vince 应该能够为您提供帮助。

    谢谢、
    Jacob  

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

    Vasav、您好!

    将测试数组从1000更改为32字节对齐->请尝试1024

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

    您好 Vincent!


    很抱歉、我迟到了、还遇到了其他一些问题。 不管怎样、我尝试了1024阵列、但这没有帮助。 我想知道您是否可以检查下一个 SDK 版本中是否仍将修复此问题?

    感谢您的帮助!

    Vasav

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

    我会将此报告为错误、并在我的末尾继续进行调试

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

    尊敬的 Vincent:  

    只是想跟进并查看您是否有任何更新?

    谢谢!

    Vasav

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

    Vasav、您好!

    我的方面没有更新。  

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

    尊敬的 Vincent:

    不用担心、我能做什么来帮助您?  此外、您是否碰巧知道下一个 SDK 何时发布、以及器件是否已解决此问题?

    Vasav

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

    Vasav、您好!

    我们在下个月发布了新的 SDK、但此处不包含修复。 我没有机会找到根本原因。 我将让另一位团队成员进行回顾。

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

    okk、您是否能够重现此问题?  

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

    Vasav、您好!

    我还没有尝试过这个问题,但我可以在下周尝试一下。  

    感谢您的耐心等待、

    Jacob

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

    您好、Jacob、
    谢谢、我真的需要这个小睡。 因此、如果我有任何可以帮助您调试的事情、请告诉我。

    Vasav

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

    感谢 Vasav、

    我将对此进行研究、并将立即回复您。

    最棒的

    Jacob

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

    您好、Jacob、  

    我想与您联系、看看您是否有这方面的线索?  

    谢谢!

    Vasav

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

    Vasav、您好!

    还没有、请多给我几天时间。 我将于星期三在这里跟进。

    此致、

    Jacob

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

    您好、Jacob、

    我想知道您对此有没有更新吗?

    Vasav

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

    Vasav、您好!

    不幸的是,我还没有太多时间来研究这个问题。 下周我将有更多更新。

    此致、

    Jacob

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

    您好、Jacob、

    我想与您联系、看看您是否有机会处理这个问题? 我已经等了一段时间、才有一个解决方案。  

    Vasav  

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

    Vasav、您好!

    很抱歉耽误你的时间。 我明天一定会研究这个问题。

    谢谢、

    Jacob

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

    谢谢 Jacob、请告诉我可以做的任何事情、以帮助解决这个问题。 我现在确实需要解决这个问题、因为我们正面临关键的时序问题、可以使用此 DMA 的固定版本来解决这些问题。 如果您还想直接与我联系、请随时添加我、我可以与您分享我的联系信息。  

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

    Vasav、您好!  

    我正在尝试在这里重复您的问题。 您使用的是哪个 SDK 版本? 您是否利用了我们在 SDK 中提供的任何示例?

    我想确保您不会面临 先前在 E2E 上发布的此问题。

    谢谢、
    Jacob

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

    我正在使用 ti simplelink_cc32xx_sdk_5_10_00_02。

    我还修改了 spimaster 示例代码并在这个线程的前面发布了它。  

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

    Vasav、您好!

    我不确定我是否能够重现您所面临的确切问题、但我确实看到了 SysConfig 中的 SPI 双工模式问题。 为了尽可能匹配您的设置、您在 SysConfig 中为主设备和从设备确切更改了哪些参数? 您是否正在使用 FreeRTOS?

    为了测试您的设置、我尝试分别使用 DMA Duplex - Master TX 和 Duplex Slave RX 来运行 spimaster 和 spislave 示例。 只有 spimaster 示例被初始化、而 spislave 示例似乎不会初始化。 这是如何设置 DMA 的?

    谢谢、
    Jacob

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

    您好、Jacob、

    这是我当前用于此隔离示例的 SysConfig 设置文件。 我仅在 FreeRTOS 中使用主模式。

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --board "/ti/boards/CC3220S_LAUNCHXL" --product "simplelink_cc32xx_sdk@5.10.00.02"
     * @versions {"data":"2021031521","timestamp":"2021031521","tool":"1.8.0+1863","templates":null}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const Display  = scripting.addModule("/ti/display/Display");
    const Display1 = Display.addInstance();
    const RTOS     = scripting.addModule("/ti/drivers/RTOS");
    const SPI      = scripting.addModule("/ti/drivers/SPI");
    const SPI1     = SPI.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    Display1.$name      = "CONFIG_Display_0";
    Display1.$hardware  = system.deviceData.board.components.XDS110UART;
    Display1.useUART2   = true;
    Display1.uart.$name = "CONFIG_UART2_0";
    
    const Power          = scripting.addModule("/ti/drivers/Power", {}, false);
    Power.parkPins.$name = "ti_drivers_power_PowerCC32XXPins0";
    
    RTOS.name = "FreeRTOS";
    
    SPI1.$name     = "CONFIG_SPI_MASTER";
    SPI1.ssControl = "SW";
    SPI1.mode      = "Four Pin SS Active Low";
    
    /**
     * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
     * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
     * re-solve from scratch.
     */
    Display1.uart.uart.$suggestSolution              = "UART0";
    Display1.uart.uart.txPin.$suggestSolution        = "55";
    Display1.uart.uart.txDmaChannel.$suggestSolution = "UDMA_CH9";
    Display1.uart.uart.rxPin.$suggestSolution        = "57";
    Display1.uart.uart.rxDmaChannel.$suggestSolution = "UDMA_CH8";
    SPI1.spi.$suggestSolution                        = "SPI0";
    SPI1.spi.sclkPin.$suggestSolution                = "boosterpack.7";
    SPI1.spi.misoPin.$suggestSolution                = "boosterpack.14";
    SPI1.spi.mosiPin.$suggestSolution                = "boosterpack.15";
    SPI1.spi.dmaRxChannel.$suggestSolution           = "UDMA_CH30";
    SPI1.spi.dmaTxChannel.$suggestSolution           = "UDMA_CH31";
    SPI1.spi.ssPin.$suggestSolution                  = "boosterpack.30";
    

    我希望这对您有所帮助。 如果您可以通过电子邮件发送邮件、我很乐意通过电子邮件向您发送整个项目的 zip 文件、以确保我们具有相同的设置。

    Vasav  

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

    此外、在前面的注释中、SysConfig 正在使用全双工、我知道这是有效的。 当我尝试仅使用主器件 TX 时、会出现此问题。  

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

    Vasav、您好!

    如果您可以直接向我发送您的代码、我将尝试复制以查看我是否有相同的问题。 我将向您发送一个朋友请求、我们可以在其中开始进行私人消息传递。

    谢谢、
    Jacob

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

    Vasav、您好!

    我运行了您的代码、并且编译正常。 但是、我似乎遇到了器件无法打开 SPI 端口的问题。 您使用逻辑分析仪专门探测了哪些引脚?

    谢谢、
    Jacob

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

    Jacob、

    我们是否对此有任何更新?

    Vasav

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

    Vasav、您好!

    我正在使用对 SDK 演示的极少更改来复制此内容、但需要更多时间来完成更改。 明天我将为您提供有关此内容的最新信息。  

    谢谢、
    Jacob

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

    Vasav、您好!

    我已经尝试通过编辑 SPIslave 和 SPImaster 演示来重现此问题、因此数据只从 leader (master)发送到 los随 动器(slave)。 我目前正在内部查看此演示、以确定后续步骤。 我将很快更新此主题。

    谢谢、
    Jacob   

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

    谢谢 Jacob!

    让我知道我是否可以在我这边做些什么。  

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

    当然、我会告诉您。   

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

    Vasav、您好!

    我在 SPImaster 和 SPIlave 演示中进行了另一项测试。 这次、我只将 SPImaster 的 DMA 更改为"仅主机 TX"模式。 我仍然注意到两个设备之间只发送了一条消息的问题。  

    在 TI 驱动程序 SPI.h 文档中、我发现仅支持全双工模式。

    此问题已在内部记录为错误。 我不确定何时会发布修复程序。 您是否有任何潜在的解决方法?

    谢谢、
    Jacob

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

    对我来说、替代方法是根本不使用 DMA、尽管这样做可行、但对我们来说、它有很多性能问题。 如果有办法跟进此错误、或者我甚至可以在发布之前获得修复、我会喜欢它。 您能帮我解决这个问题吗?  

    谢谢!

    Vasav  

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

    Vasav、您好!

    我的团队首先需要评估需要进行哪些更改、然后我们可以决定如何继续。 明天我将更深入地探讨这个问题。

    谢谢、
    Jacob

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

    你好,Jacob!

    我希望你们有一个很好的感恩节假期。 我想知道这种情况是否有任何内部更新?

    谢谢、

    Vasav

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

    Vasav、您好!

    谢谢你。 我们正在评估一个潜在的修复方案、我应该在接下来的几天内为您提供更新。

    谢谢、
    Jacob

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

    Vasav、您好!

    我的修复方法没有解决问题、但我认为我的解决方法是正确的。 我将在本周继续尝试、看看我是否可以为您提供解决方案。

    谢谢、
    Jacob

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

    感谢 Jacob 提供的更新、请将此问题的信息发布到我的网站上、并告诉我是否有可以帮助的事情。  

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

    您好、Jacob、我想检查一下是否有更新? 如果您仍然感到困住 、TI 是否有其他人可以帮助我们了解这一点? 谢谢! Vasav