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.

[参考译文] LAUNCHXL-CC26X2R1:SDK3.20至 SDK 5.10迁移引脚骤降

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

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1002255/launchxl-cc26x2r1-sdk3-20-to-sdk-5-10-migration-pin-snag

器件型号:LAUNCHXL-CC26X2R1
Thread 中讨论的其他器件:SysConfig

大家好、

我正在将两个 SDK3.20项目迁移到 SDK5.10并审查整体设计和可靠性。 我已经完成了一个项目的硬件启动、但在另一个项目中遇到了 SPI 接口问题。

概述

SPI 显示在 SDK3.20二进制文件上正常运行并进行调试、但在同一项目的 SDK 5.10版本上不起作用。  此问题最可能与从 SysConfig 前转换到 SysConfig 有关、但在修改 SysConfig 后、问题仍然存在。 我确定了错误的来源、但不确定需要进行哪些更改。

迄今为止的进展情况

我将 SysConfig 生成的 SPI 配置(SDK5.10/ti_drivers_config.c)与原始修改后的板级配置文件(SDK3.20/CC26X2R1_LAUNCHXL.c)进行了比较。 我对 SysConfig 进行了更改、以镜像 SDK5.10 SPI 配置、以匹配 SDK3.20 SPI 配置。

SDK 3.20
CC26X2R1_LAUNCHXL.c  
SDK 5.10
SysConfig/ti_drivers_config.c
=================================================== GPIO ===========================================
GPIO_PinConfig gpioPinConfigs[]={
DISPLAY_RESET | GPIO_DO 非_CONFIG、
POWER_ENABLE | GPIO_DON_CONFIG、
Display_Busy | GPIO_DO_no_config、
(笑声)
///display_SPI1_MOSI | GPIO_DON_CONFIG、
///display_SPI1_CLK | GPIO_DON_CONFIG、
///display_SPI1_CSn | GPIO_DON_CONFIG、
(笑声)
};
GPIO_PinConfig gpioPinConfigs[]={
/* DISPLAY_RESET */
GPIOCC26XX_DIO_21 | GPIO_CFG_OUT_OD_NOPULL | GPIO_CFG_OUT_LOW、
/* DISPLAY_BUSY */
GPIOCC26XX_DIO_15 | GPIO_CFG_OUT_OD_PD | GPIO_CFG_OUT_LOW、
/* POWER_ENABLE */
GPIOCC26XX_DIO_07 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_LOW | GPIO_CFG_OUT_LOW、
};

=================================================== Pin ========================================================

const PIN_Config BoardGpioInitTable[]={

(笑声)

POWER_ENABLE | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MIN、

(笑声)

DISPLAY_RESET | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
Display_SPI1_MOSI | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
Display_SPI1_CLK | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
Display_SPI1_CSn | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
Display_BUSY | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、

(笑声)

PIN_TERMINATE
};

const PIN_Config BoardGpioInitTable[CONFIG_PIN_COUNT + 1]={
/*父信号:Display_RESET GPIO 引脚、(DIO21)*/
CONFIG_PIN_6 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
/*父信号:Display_Busy GPIO 引脚、(DIO15)*/
CONFIG_PIN_7 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
/*父信号:POWER_ENABLE GPIO 引脚、(DIO7)*/
CONFIG_PIN_4 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MIN、
(笑声)
/*父信号:SPI_EPD_DISPLAY SCLK、(DIO19)*/
CONFIG_PIN_9 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
/*父信号:SPI_EPD_DISPLAY MISO、(DIO0)*/
CONFIG_PIN_10 | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS、
/*父信号:SPI_EPD_DISPLAY MOSI、(DIO20)*/
CONFIG_PIN_11 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
/*父信号:SPI_EPD_DISPLAY SS、(DIO18)*/
CONFIG_PIN_12 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MIN、
(笑声)

PIN_TERMINATE
};

=================================================== SPI (U) DMA ========================================

CONST SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CC26X2R1_LAUNCHXL_SPICOUNT]={

(笑声)


baseAddr = SSI1_base、
.intNum = INT_SSI1_comb、
.intPriority =~0、
.wiPriority = 0、
powerMngrId = PowerCC26XX_Periph_SSI1、
defaultTxBufValue = 0xFF、
.rxChannelBitMask = 1<<UDMA_CHAN_SSI1_RX,
txChannelBitMask = 1<<UDMA_CHAN_SSI1_TX,
.mosipin = display_SPI1_MOSI、
MISO 引脚= DISPLAY_SPI1_MISO、
.clkPin = DISPLAY_SPI1_CLK、
csnPin = DISPLAY_SPI1_CSn、
.minDmaTransferSize = 10
}、

(笑声)

};

CONST SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CONFIG_SPI_COUNT]={

(笑声)


baseAddr = SSI1_base、
.intNum = INT_SSI1_comb、
.intPriority =(~0)、
.wiPriority = 0、
powerMngrId = PowerCC26XX_Periph_SSI1、
defaultTxBufValue =~0、
.rxChannelBitMask = 1<<UDMA_CHAN_SSI1_RX,
txChannelBitMask = 1<<UDMA_CHAN_SSI1_TX,
.minDmaTransferSize = 10、
.mosipin = IOID_20、
MISO 引脚= IOID_0、
clkPin = IOID_19、
.csnPin = IOID_18
}、

(笑声)

};

这似乎是为了消除 SysConfig 作为 问题的根源、因为配置看起来一致。

我查看了相关 API、以开发一种调试问题的方法。

SPI_OPEN

PIN_OPEN
extern SPI_Handle SPI_open(uint_least8_t index, SPI_Params *params);

/*!
 *  @brief  Function to initialize the #SPI_Params struct to its defaults
 *
 *  @param  params      An pointer to #SPI_Params structure for
 *                      initialization
 *
 *  Defaults values are:
 *  * SPI_Params.transferMode        = #SPI_MODE_BLOCKING
 *  * SPI_Params.transferTimeout     = #SPI_WAIT_FOREVER
 *  * SPI_Params.transferCallbackFxn = NULL
 *  * SPI_Params.mode                = #SPI_MASTER
 *  * SPI_Params.bitRate             = 1000000 (Hz)
 *  * SPI_Params.dataSize            = 8 (bits)
 *  * SPI_Params.frameFormat         = #SPI_POL0_PHA0
 */
extern PIN_Handle PIN_open(PIN_State *state, const PIN_Config pinList[]);


/** @brief  Add pin to pin set for open PIN handle
 *
 *  If the requested pin is unallocated it will be added, else an error code
 *  will be returned.
 *  @param handle   handle retrieved through an earlier call to PIN_open().
 *  @param pinCfg   Pin ID/configuration for pin to add.
 *  @return Error code if unsuccessful, else PIN_SUCCESS
 */

这似乎是唯一可能影响显示屏启动的代码、因此我 添加了调试代码、以根据 SPI_OPEN 和 PIN_OPEN 检查引脚和 SPI 接口的状态。

#include <ti/drivers/SPI.h>
#include <ti/drivers/PWM.h>
#include "ti_drivers_config.h"

// Display Configuration
#include <ti/display/Display.h>
extern Display_Handle dispHost;

PIN_Handle h_display_pins = NULL;
PIN_State  display_pins_state;
const PIN_Config display_pins_table[] = {
    POWER_ENABLE     | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,
    DISPLAY_RESET    | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,
    DISPLAY_BUSY     | PIN_INPUT_EN | PIN_PULLDOWN,
    PIN_TERMINATE
};

void EPD_bus_init(void){
  h_display_pins = PIN_open(&display_pins_state, display_pins_table);
  if(h_display_pins != PIN_SUCCESS){
      Display_printf(dispHost, 0, 0, "Display PIN: Initialization Error\n");
  }
  EPD_DelayMs(5);
  pwm_init();
  SPI_init();
  SPI_Params_init(&SPIparams);
  SPIparams.transferMode        = SPI_MODE_BLOCKING;
  SPIparams.bitRate             = 4800000;
  SPIparams.mode                = SPI_MASTER;
  SPIparams.dataSize            = 9;
  SPIparams.frameFormat         = SPI_POL0_PHA0;
  SPIhandle = SPI_open(SPI_EPD_DISPLAY, &SPIparams);
  if(!SPIhandle) {
      Display_printf(dispHost, 0, 0, "Display SPI: Initialization Error\n");
  }
}
SPI_Handle      SPIhandle = NULL;
SPI_Params      SPIparams;

PWM_Handle hPWM = NULL;

当调用显示初始化代码时、将出现以下消息:

Display: Display Init EVT
Display SPI: Initialization Error
Display PIN: Initialization Error

h_display_pins 变量在 PIN_open 后返回:

当我稍微更改了 PIN 表以直接使用 ti_drivers_config.c 中的名称时 、如下所示:

const PIN_Config display_pins_table[] = {
    CONFIG_PIN_4     | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,
    CONFIG_PIN_6     | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,
    CONFIG_PIN_7     | PIN_INPUT_EN | PIN_PULLDOWN,
    PIN_TERMINATE
};

将显示以下消息:

Display: Display Init EVT
Display PIN: Initialization Error

这种更改对我来说似乎很奇怪、因为我假设更正 PIN 表会改善 PIN_OPEN 的结果。 相反、我观察到 SPI_open 停止截断为 null。  

问题

  • 如何进一步调查此问题?
  • 是否存在 使 SDK3.20方法对 SDK5.10无效的 API 违规?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    次要 更新-我找到了一种测试方法、该方法在 不同 SDK 中应保持一致。

    如 SDK3.20中所示、代码工作的地方、在应用所包含的引脚表之前和之后检索第7个引脚的配置。

    这会导致以下表达式状态:

    在 SDK5.10中、


    该相同代码产生以下状态:


    SDK3.20中从0变为1的位在 SDK5.10中不会改变。 尽管 我认为我消除了 SysConfig/ti_drivers_config.c 源作为问题的根本原因、但我不再确定。

    我们欢迎大家提出意见  

    最棒的

    Ken

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

    我用 PIN_ID()地址替换了以下所有名称,从而解决了该问题。
    POWER_ENABLE -> PIN_ID (07)
    DISPLAY_RESET -> PIN_ID (21)
    Display_Busy -> PIN_ID (15)

    问题已解决。

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

    您好 Ken、

    我非常感谢您提供的详细信息、并再次为您的问题提供准确的解决方案!

    此致、
    Ryan

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

    谢谢 Ryan!

    科学方法占主导地位! 指定成功标准、执行初始调查、识别变量、开发测试系统、获取结果。 此外、还要进行多次冲洗和重复循环。 我还在学习嵌入式开发的绳索-虽然在系统设计中可以做得更少、但在调试和合作方面、可以做得更多。  

    这个错误让我和一位同事跑了几天。 最后、它确实有助于停止、休息、然后更仔细地查看 API。

    我本来不希望使用 PIN_ID、因为这是一个非常低级的函数、用于在 SysConfig 本应提供相同地址的名称时获取寄存器地址。 我看不到自定义显示驱动程序将来会有很多变化,因此我认为 PIN_ID()是一个可靠的解决方案。

    到处看看!

    Ken