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.

[参考译文] CCS/CC2650:实现 HDC1010时出现各种错误

Guru**** 1127450 points
Other Parts Discussed in Thread: HDC1010, CC2650, HDC1000, CC2650STK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/575445/ccs-cc2650-various-errors-implementing-hdc1010

器件型号:CC2650
主题中讨论的其他部件:HDC1010HDC1000

工具/软件:Code Composer Studio

我有一个安装有 CC2605MODA 和 HDC1010的定制板。

当我尝试编写固件以在两者之间建立连接时、我会遇到一些奇怪的错误。

1) 1)当优化级别为3或4时、我会在多个位置声明符号时遇到几个错误。

问题是、当我转到代码中需要重新定义符号的部分时、没有这样的东西。

链接器告诉我在某些 obj 文件中有重新定义、我假设我应该能够在相应的 c 文件中找到重新定义。

这些符号是 HDC1010固件所独有的(我在这里看到的是 http://www.ti.com/tool/TIDA-00374 、在我开始集成固件之前、它们在代码中不存在。

当我将优化级别降低到2或更低时、错误消失。

2) 2)我的代码库是从 BLE 堆栈获取的 simple_ble_peripheral、即使在我进行了一些修改之后、它也能正常工作。

在我对板级配置文件和任务文件进行更多更改后、代码会在 GAP_SetParamValue 处停止。

为了精确、GAP_SetParamValue -> sendWaitMatchCS -> waitMatchCS -> ICALL_errno_unknown_thread。

我假设这不应该在正确实现的器件中发生、但我无法理解这意味着什么。

在 ICALL_errno_unknown_thread 之后、代码停止执行、而不会进入无限循环或产生错误。

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

    关于第二个问题、您能否发布一些与所做更改相关的代码片段?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CC2650_LAUNCH.h 中的更改

    /**========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *全局变量
    *==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
    I2C_Handle AppI2cHandle;
    I2C_Params AppI2cParams;
    I2C_Transaction i2cTransaction;

    /* I2C */
    #define Board_I2C0_SCL0 ioID_5
    #define Board_I2C0_SDA0 ioID_6.
    #define Board_HDC_nDRDY ioID_7

    CC2650_launch.c 中的更改

    const PIN_Config BoardGpioInitTable[]={
    BOARD_HDC_nDRDY | PIN_INPUT_EN | PIN_NOPULL | PIN_迟滞、/* HDC 数据就绪引脚*
    Board_I2C0_SDA0 | PIN_INPUT_EN | PIN_NOPULL | PIN_迟滞、/* I2C*
    Board_I2C0_SCL0 | PIN_INPUT_EN | PIN_NOPULL | PIN_迟滞、/* I2C*
    PIN_TERMINATE
    };

    simple_peripheral.h 中的更改

    /*********
    *定义
    *

    #define HDC1000_ADDRESS0x40// HDC1000的 I2C 地址

    #define HDC1000_TEMP_ADDR0x00//温度测量输出寄存器
    #defineHDC1000_Humid_ADDR0x01//相对湿度输出寄存器
    #define HDC1000_CONFIG_ADDR0x02//HDC1000配置和状态

    #define HDC1000_MAN_ID_ADDR0xFE//制造商 ID 寄存器(默认值:"TI")

    /*
    配置寄存器说明
    ========================================================================================
    名称寄存器说明配置
    RST[15]SW 复位0:正常运行
    保留无
    加热器[13]加热器0:加热器被禁用
    采集模式[12]模式1:按顺序加热和湿度
    BTST[11]蓄电池状态不适用
    TRES[10]温度分辨率1:11位
    HRES[9:8]湿度分辨率01:11位
    保留编号[7:0]
    *
    #define HDC1000_TEMP_RH_11BIT_MSB0x15//配置的 MSB
    #define HDC1000_TEMP_RF_11BIT_LSB0x00//LSB 配置

    /* HDC1000时序*/
    #define HDC_START_TIME8000//首次访问 HDC I2C 之前的延迟*/
    #define HDC_MEAS_TIME8000//转换开始到测量读取之间的延迟*/
    #define HDC_CONFIG_TIME1000//尝试失败后等待 I2C 重试的时间*

    /* HDC1000数据就绪触发器*/
    #define HDC_MEAS_INTERRUPT0
    #define HDC_MEAS_DELAY1.
    #define HDC_MEAS_METHODHDC_MEAS_DELAY
    simple_peripheral.c 中的更改

    //I2C 变量
    外部 I2C_Handle AppI2cHandle;
    外部 I2C_Params AppI2cParams;
    extern I2C_Transaction i2cTransaction;
    uint8_t txBuf[3]={0};
    布尔 状态= false;

    静态 uint8_t HDC_DATA[4];

    //时钟管理
    静态信标_StructhdcSyncSem;
    静态 Semaphore_handle hdcSyncSemHandle;
    静态时钟结构 hdcSyncClock;
    静态时钟句柄 hdcSyncClockHandle;

    (在主任务函数中、而不是在主循环中)
    /*初始化 I2C */
    I2C_Params_init (&AppI2cParams);
    AppI2cParams.transferMode = I2C_MODE_BLOCKING;
    AppI2cParams.transferCallbackFxn =空;
    AppI2cParams.bitrate = I2C_400kHz;
    AppI2cHandle = I2C_open (CC2650_LAUNCHXL_I2C0、NULL);
    if (AppI2cHandle =NULL){}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否确保在您的板级配置文件中设置了以下器件? 这是 HWAttr、它实际上采用所有引脚来使 I2C 进行初始化。
    /* I2C 配置结构,描述要使用的引脚*/
    CONST I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650STK_I2CCOUNT ={

    baseAddr = I2C0_BASE、
    powerMngrId = PowerCC26XX_Periph_I2C0、
    .intNum = INT_I2C_IRQ、
    .intPriority =~0、
    .wiPriority = 0、
    sdaPin = Board_I2C0_SDA0、
    .sclPin = Board_I2C0_SCL0、

    };


    另外、您是否得到了正确的句柄作为回报? 您无需将 I2C 引脚置于 BoardGpioInitTable 中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HWAttr 已正确设置。

    我是否需要 I2C 引脚的句柄? 我认为我在示例应用中没有看到过类似的东西。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是您的 I2C 句柄-->(AppI2cHandle)。 您能否检查它是否返回 NULL 以外的有效值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是指代码的这一部分、对吧?

    AppI2cHandle = I2C_open (CC2650_LAUNCHXL_I2C0、NULL); 

    我无法检查它是否正常返回 NULL。 代码永远不会达到该点。

    它在时失败  

    GAP_SetParamValue (TGAP_CONN_PAUSE_PERUSTRUST、DEFAULT_CONN_PAUSE_PERUSTRUST); 

    这在代码中要早得多。

    但是、当我将代码向上移动到之前的位置时、我可以看到它不是 NULL。 它是具有一些十六进制值的类型 struct I2C_Config*。

    我想知道关于4级优化的任何抱怨是否与之相关。

    我有

    外部 I2C_Handle AppI2cHandle;
    extern I2C_Params AppI2cParams;
    extern I2C_Transaction i2cTransaction; 

    在 simple_peripheral.c 和中

    I2C_Handle AppI2cHandle;
    I2C_Params AppI2cParams;
    I2C_Transaction i2cTransaction; 

    CC2650_LAUNCHXL.h 中的"CC2650_LAUNCHXL.

    它遵循示例代码中的方案、但链接器抱怨这些"符号已定义"。

    当我删除任一代码段时、它抱怨未被定义。

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

    我建议您检查 sensortag 项目如何使用湿度传感器 HDC1000、后者使用相同的接口。