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、 (笑声) PIN_TERMINATE |
const PIN_Config BoardGpioInitTable[CONFIG_PIN_COUNT + 1]={ PIN_TERMINATE |
| =================================================== SPI (U) DMA ======================================== | |
|
CONST SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CC26X2R1_LAUNCHXL_SPICOUNT]={ (笑声) { (笑声) }; |
CONST SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CONFIG_SPI_COUNT]={ (笑声) { (笑声) }; |
这似乎是为了消除 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 违规?



