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.

[参考译文] CC2650MODA:I2C 开/关问题

Guru**** 2468460 points
Other Parts Discussed in Thread: CC2650STK, CC2650, CC1310, CC2640, CC2650MODA

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/940220/cc2650moda-i2c-open-close-issue

器件型号:CC2650MODA
主题中讨论的其他器件:CC2650STKCC2650CC1310CC2640

定期为低功耗应用打开和关闭 I2C 接口是否存在已知问题? 在我的应用程序中,当我需要对传感器进行采样时,我使用 I2C_OPEN(),当不需要时,我使用 I2C_CLOSE ()来关闭接口。 通过关闭 I2C 接口、当 TI-RTOS 将系统置于待机模式时、我能够实现低功耗。 但出于某些原因、一段时间后、系统只会停止/挂起。 经过数天的调试和重复测试,我能够确认它与周期性 I2C_open()和 I2C_Close()例程相关。

如果我在任务开始时只使用 I2C_open()打开 I2C 接口,并且从不关闭 I2C 接口,系统就会运行,而不会停止或挂起,但与关闭 I2C 接口相比,我的功耗不低。

我还查看了几个示例项目、例如"sensortag_cc2650stk_app"、而且 I2C 接口仅在应用任务开始时初始化并打开一次、从未关闭。

在 TI-RTOS 中定期打开和关闭 I2C 接口是否存在任何问题?

项目基于"simple_broadcaster _cc2650bp_app"示例项目。

BLE SDK 和 TI 驱动程序版本:"BLE_SDK_2_02_04_06"和"tidrivers_cc13xx_cc26xx_2_21_01_08"。

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

    您好 Pritesh、

    I2C 驱动程序在过去几年中进行了一些错误修复、遗憾的是、CC2650 SDK 工具未得到此修复、因为它们不受主动支持。 发生这种情况时、您能否检查您在应用程序中遇到的问题? 如果在发生这种情况时读出外设寄存器、则可能会遇到 I2C 模块卡在"繁忙"状态的问题。  

    我建议您尝试将 I2C 驱动程序从最新的 CC1310 SDK 移植到您的应用。 这是我们获得的最新驱动程序、由于 CC2650和 CC1310使用相同的 I2C 外设、因此您应该能够使用此驱动程序。 在执行端口时、您可能需要更新一些板级文件结构、但我希望编译 器会在可能存在的任何不匹配情况下通知您。  

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

    M-W

    感谢您的快速响应和符合 I2C 驱动器问题。 I2C 打开/关闭错误使我感到很不快几周了。 我将尝试将 I2C 驱动程序从 CC1310 SDK 移植到 CC2650 SDK 的建议解决方案、并进行测试。

    我注意到、几周前、有一个最新的 BLE SDK 版本"BLE-STACK-2-X_2.05.02"、2020年8月31日。 它支持 CC2640和 CC2650。 您知道它是否支持 CC2650MODA 吗? 逻辑上它应该是因为它是同一个芯片组、只需确认即可。 更重要的问题是、它是否可以解决 I2C 驱动器问题?

    https://www.ti.com/tool/BLE-STACK

    此致、

    Pritesh

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

    您好 Pritesh、

    新的 BLE 堆栈也适用于 CC2650MOD、但它不具有最新的驱动程序、因为它与2018年推出的最新 TI-RTOS 一起提供。  

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

    M-W、

    我尝试从最新的 Simplelink SDK "simplelink_cc13x2_26x2_SDK_4_20_01_04"移植 I2C 驱动程序、并尝试更新依赖项文件、但与"tidrivers_cc13xx_cc26xx_2_21_01_01" SDK 存在很大差异、我认为依赖项无法满足。

    因此、我采用了不同的方法并比较了两个 SDK 之间 I2C.h/c 和 I2CCC26XX.h/c 文件中的源代码、并尝试在旧 SDK 中实现新 SDK 中的源代码。 我能够成功满足所有依赖项并编译驱动程序文件源代码。 但我会得到"重新定义"链接器错误。 您能提出解决方案吗? 我不是很好。


    错误#10056:重新定义符号"I2C_init":首先在"./Drivers/I2C/I2C.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2C_defaultParams":首先在"./Drivers/I2C/I2C.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2C_CONTRARIN":首先在"./Drivers/I2C/I2C.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2C_CANCEL":首先在"./Drivers/I2C/I2C.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2C_Close":首先在"./Drivers/I2C/I2C.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2C_Params_init":首先在"./Drivers/I2C/I2C.obj 中定义;再在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中定义 "
    错误#10056:重新定义符号"I2C_open":首先在"./Drivers/I2C/I2C.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2CCC26XX_Close":首先在"./Drivers/I2C/I2CCC26XX.obj 中定义;然后在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2CCC26XX_CANCEL":首先在"./Drivers/I2C/I2CCC26XX.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2CCC26XX_fxnTable":首先在"./Drivers/I2C/I2CCC26XX.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2CCC26XX_open":首先在"./Drivers/I2C/I2CCC26XX.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10056:重新定义符号"I2CCC26XX_init":首先在"./Drivers/I2C/I2CCC26XX.obj 中定义;再在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中定义 "
    错误#10056:重新定义符号"I2CCC26XX_transfer":首先在"./Drivers/I2C/I2CCC26XX.obj 中定义;在"C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/packages/ti/drivers/lib/drivers_cc26xxware.aem3中重新定义 "
    错误#10010:链接期间遇到错误;未构建"cs600_app.out"

    >>编译失败
    Makefile:240:目标'cs600_app.out'的配方失败
    gmaking[1]:***[cs600_app.out]错误1.
    gmake:***[全部]错误2.
    Makefile:236:目标'all'的配方失败

    ****构建完成****

    用于 CC2650的 BLE Stack 2_2_5在几周前2020年8月31日发布、但当最新的 tirtos 单工 SDK 为4.10.xx 时、对 tirtos 驱动程序的支持仍然为2.21.xx。

    用于 CC2650的 BLE Stack 2_2_5能否与单工 SDK 配合使用?是否为4.10.xx?

    为什么对 CC2650的支持如此落后? 当最新版本为 V10时、甚至所需的 CCS 工具也是 V7。 CC2650是否即将停产、尤其是 CC2650MODA?

    http://software-dl.ti.com/simplelink/esd/ble_stack_2_x/2.02.05.02/exports/release_notes_BLE_Stack_2_2_5.html

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

    您好 Pritesh、

    根据您看到的错误、我认为您忘记了将".c"文件添加到项目中。 如果您不这样做、它将尝试引入库版本、当您更新头文件时、库版本将不会"适合模型"、您会收到这些错误。 将.c 文件添加到工程中(如果您愿意、只需将其拖动到工程根目录中)应该会使链接器更喜欢这些文件、而不是库版本。

    至于 CC2650、没有计划停止它。 在"为什么"部分、我只能说在某个时候、决定将其从活动的软件支持中移出为长期支持、这意味着更新很少、并且保持在接近最后一个"适当"版本的位置。 将其完全引入"SimpleLink SDK"系列需要进行一些工作、也不会直接向后兼容当今的器件。  

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

    您好、M-W、

    还有其他事情正在发生。 我的项目中有 I2C 驱动程序文件链接到 SDK 中的实际文件。

    为了更新 I2C 驱动程序、我在项目中保留了原始 I2C 驱动程序文件、并刚刚替换和更新了来自最新 TI RTOS SDK 的函数中的源代码。 这仍会导致与我的帖子中相同的链接错误。

    例如,在这里,我有两个版本,如果 I2C_init()函数来自两个 SDK。 原来的编译和链接正常,但如果在同一个文件中使用最新 SDK 中的 I2C_init()替换它,则编译有效,但链接器抛出重新定义错误。 感觉链接器将预编译的二进制文件与源代码进行比较以进行确认。 对 I2C.c 和 I2CCC26XX.c 源文件中的任何函数更新都是如此。

    /*
    === I2C_init ====
    *来自 tidrivers_cc13xx_cc26xx_2_21_01_01
    *编译和链接器工作
    */
    void I2C_init (void)
    {
    if (I2C_count =-1){
    /*调用每个驱动程序的初始化函数*/
    对于(I2C_COUNT = 0;I2C_CONFIG[I2C_COUNT].fxnTablePtr!= NULL;I2C_COUNT++){
    I2C_CONFIG[I2C_COUNT].fxnTablePtr->initFxn ((I2C_Handle)&(I2C_CONFIG[I2C_COUNT]);
    }
    }
    }/*
    
    
    === I2C_init ====
    *来自 simplelink_cc13x2_26x2_SDK_4_20_01_04
    *编译正常、但链接器失败、给出"重新定义"错误
    */
    void I2C_init (void)
    {
    uint_least8_t i;
    uint_fast32_t 密钥;
    
    KEY = Hwi_disable();
    
    if (!isInitialized){
    isInitialized =(bool) true;
    
    /*调用每个驱动程序的初始化函数*/
    对于(I = 0;I < I2C_COUNT;I++){
    I2C_CONFIG[i]。fxnTablePtr->initFxn ((I2C_Handle)&(I2C_CONFIG[i]));
    }
    }
    
    Hwi_restore (key);
    } 

    我还尝试了该帖子中的建议、这些建议具有类似的重新定义问题、但不幸的是、在我的案例中、 https://e2e.ti.com/support/tools/ccs/f/81/t/601905?tisearch=e2e-sitesearch&keymatch=CC2650%2525252520redefined 不起作用

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

    您好 Pritesh、

    您能否为您的项目共享链接器设置?  

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

    您好、M-W、

    我正在附加一个文件、其中包含项目链接器设置的屏幕截图。 请告诉我您的发现。

    此致、

    Priteshe2e.ti.com/.../Linker-Settings.docx

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

    您好 Pritesh、


    您能否尝试取消选中"disable automatic RTS selection"选项、看看这是否会影响任何内容? 我曾尝试根据这种"旧 TI-RTOS "自行设置类似的示例、但我看不到这种方法有任何问题。 您可以和我分享您的完整项目吗?

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

    您好、M-W、

    我尝试取消选中"disable automatic RTS selection"、但它未解决问题。 我在 Side SDK 文件夹中构建项目、与由于大量依赖关系而生成某些示例项目的方式相同。 BLE SDK 和 tirtos 封装都是几百 MB。 不知道我是否可以上传如此大的 zip 文件。

    我发现了新 I2C 文件的问题、但不仅限于我的项目。 "ble_sdk_2_02_04_06"附带的"sensortag_cc2650stk_app"项目也会以相同的重新定义问题运行、并产生与我的项目相同的错误列表。 也许您可以尝试一下、如果问题在"sensortag_cc2650stk_app"项目中得到解决、则它将解决我的项目中的问题。

    我要附加我切换的 I2C 文件、并能够重新创建错误。

    e2e.ti.com/.../I2C_5F00_v4.20.zip

    e2e.ti.com/.../I2CCC26XX_5F00_v4.20.zip

    设置:

    BLE SDK:         tirtos_cc13xx_cc26xx_2_21_01_08 ble_sdk_2_02_04_06

    TIRTOS 版本:    tirtos_cc13xx_cc26xx_2_21_01_08

    项目:            sensortag_cc2650stk_app

    要重新创建问题:

    1.将"C:\ti_tirtos_cc13xx_cc26xx_2_21_01_08\products\tidrivers_cc13xx_cc26xx_2_21_01_01\packages/ti\drivers"中的 I2C.h/c 替换为附加存档"I2C_v4.20"中的文件。

    2.将"C:\ti_tirtos_cc13xx_cc26xx_2_21_01_08\products\tidrivers_cc13xx_cc26xx_2_21_01_01\packages/ti\drivers\i2c"中的 I2CCC26XX_v4.20"替换为附件存档"I2CCC26XX_v4.20"中的文件。

    其中随附的存档 I2C 文件来自最新的 BLE SDK 4.20。

    3.尝试编译"ble_sdk_2_02_04_06"中的"sensortag_cc2650stk_app"项目。

    请告诉我您的发现。

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

    您好 Pritesh、

    根据私下谈话、问题似乎已经解决。 I2C 端口成功、但实际错误被称为主应用程序中的堆栈溢出。