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.

[参考译文] CC1310:SPI 句柄返回空值

Guru**** 2481465 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1314725/cc1310-spi-handle-returns-null

器件型号:CC1310

您好

我正在尝试启动并运行 SPI0外设。 但是、当我尝试初始化并打开连接时、我的句柄为 NULL。 下面是我的代码(使用 uartEcho 示例项目作为起点):

void *mainThread(void *arg0)

{

    SPI_Handle spi;
    SPI_Params spi_params;

    GPIO_init();
    SPI_init();
    
    SPI_Params_init(&spi_params);
    spi_params.bitRate = 1000000;
    spi = SPI_open(0, &spi_params);

    if (spi == NULL) {
        // Error opening SPI
        return 0;
    }
}

我在 LaunchXL.h 中的引脚配置

#define CC1310_LAUNCHXL_SPI0_MISO             IOID_1          /* RF1.20 */
#define CC1310_LAUNCHXL_SPI0_MOSI             IOID_0          /* RF1.18 */
#define CC1310_LAUNCHXL_SPI0_CLK              IOID_6         /* RF1.16 */
#define CC1310_LAUNCHXL_SPI0_CSN              IOID_2

LaunchXL.c 中的引脚配置

const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPICOUNT] = {
    {
        .baseAddr           = SSI0_BASE,
        .intNum             = INT_SSI0_COMB,
        .intPriority        = ~0,
        .swiPriority        = 0,
        .powerMngrId        = PowerCC26XX_PERIPH_SSI0,
        .defaultTxBufValue  = 0xFF,
        .rxChannelBitMask   = 1<<UDMA_CHAN_SSI0_RX,
        .txChannelBitMask   = 1<<UDMA_CHAN_SSI0_TX,
        .mosiPin            = CC1310_LAUNCHXL_SPI0_MOSI,
        .misoPin            = CC1310_LAUNCHXL_SPI0_MISO,
        .clkPin             = CC1310_LAUNCHXL_SPI0_CLK,
        .csnPin             = CC1310_LAUNCHXL_SPI0_CSN,
        .minDmaTransferSize = 10
    }
};

const SPI_Config SPI_config[CC1310_LAUNCHXL_SPICOUNT] = {
    {
         .fxnTablePtr = &SPICC26XXDMA_fxnTable,
         .object      = &spiCC26XXDMAObjects[CC1310_LAUNCHXL_SPI0],
         .hwAttrs     = &spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPI0]
    }
};

const uint_least8_t SPI_count = CC1310_LAUNCHXL_SPICOUNT;

//Pin config

const PIN_Config BoardGpioInitTable[] = {

    CC1310_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN,
    CC1310_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN,
    CC1310_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN,
    CC1310_LAUNCHXL_SPI0_CSN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL,
    PIN_TERMINATE
};

我已尝试调试、但对于 SPI 句柄、无法读取 closeFxn。  

我不知道为什么会这样。 如有任何帮助,将不胜感激。  

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

    尊敬的 Suvashan:

    请检查此主题是否有用。 它与您的 UART + SPI 用例非常相似。

    https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1031417/cc1310-uart-and-spi-together-but-spi_open-returns-null

    此致、

    SID

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

    我只是在你发布你的问题时输入一个回复、并且将引用那个帖子。 多么巧合啊。 这个解决方案对那个岗位的 OP 起作用,而我现在,是 GPIO_Init ()不应该被调用。 有什么想法吗?

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

    尊敬的 Suvashan:

    GPIO_init ()函数应用 CC1310_LAUNCHXL.c 中 gpioPinConfigs 数组中的初始引脚配置,当您执行 spi_open ()时,它会检查 SPI_init ()是否已成功执行。  

    请检查您的引脚是否已被 GPIO 和 SPI 驱动程序初始化、并避免重叠。 即、请确保 spiCC26XXDMAHWAttrs 没有在 gpioPinConfigs 中初始化的相同引脚 。

    请注意、在我们的 Launchpad 示例中、默认情况下、通常会将 IOID_6用于红色 LED。  

    此致、
    SID

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

    嗨、Sid

    感谢您的回复。 这开始变得更有意义了。 我猜、 spiCC26XXDMAHWAttrs 中使用的引脚的唯一配置方式是在   LAUNCHXL.c 中的 BoardGpioInitTable 阵列中? 在这种情况下、这是可以接受的且有意义、但对于用于 SPI 的 LaunchPad 的默认示例、尤其是在  BoardGpioInitTable  阵列中未配置芯片选择。 请参阅下面的默认初始化:

        CC1310_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,       /* LED initially off          */
        CC1310_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,       /* LED initially off          */
        CC1310_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,          /* Button is active low       */
        CC1310_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,          /* Button is active low       */
        CC1310_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,  /* External flash chip select */
        CC1310_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN,                                              /* UART RX via debugger back channel */
        CC1310_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,                         /* UART TX via debugger back channel */
        CC1310_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* SPI master out - slave in */
        CC1310_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* SPI master in - slave out */
        CC1310_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN,                                             /* SPI clock */

    SPI0的3个引脚(MISO、MOSI 和 CLK)已配置、但 CSn 不配置(CC1310_LAUNCHXL_SPI_FLASH_CS  为 IOID_20、而根据 LAUNCHXL.c 文件、SPI0的 CSn 为 IOID_11、因此两者互斥)。

    我可以问一下 、为什么 spiCC26XXDMAHWAttrs 中使用的实际 CS 引脚没有像其余引脚那样进行配置? 我提出问题的原因是、我采用了相同的方法并将 CS 配置为 GPIO、在这种情况下、这可能会给我带来问题。

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

    尊敬的 Suvashan:

    我不确定为什么以这种方式实现它、而不是与其他引脚相同。 这可能是因为如果使用3引脚 SPI 模式、CSn 可被视为可选引脚。

    它似乎比其他引脚具有更多的选项。 如果您检查驱动程序文件 sdk_path\source\ti\drivers\spi\SPICC26XXDMA.c、 在开放函数中可以看到、CSn 引脚取自 hwattr 结构。  

    此致、
    SID

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

    嗨、Sid

    如果我想忽略 SPI1_CS 引脚、是否可以  在  spiCC26XXDMAHWAttrs 中将其设置为 PIN_未 分配?

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

    可以、在主模式下、如果您不想使用 CSn 引脚、可以将其设置为 PIN_未 分配。 这种情况应该由驱动程序处理。