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.

[参考译文] CC3220S-LAUNCHXL:当 SCL 一直处于低电平时、I2C 会锁定处理器

Guru**** 2543760 points
Other Parts Discussed in Thread: CC3220S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/833906/cc3220s-launchxl-i2c-locks-up-processor-when-scl-stuck-low

器件型号:CC3220S-LAUNCHXL
主题中讨论的其他器件:CC3220S

在总线故障状态期间、当 I2C SCL 线路被一个从器件或短接线卡在低电平时、整个处理器锁定。  我正在阻塞模式下使用 I2C。  我认为它不应该以这种方式处理它。  我从 最新的 SDK 中查看了 I2CCC32XX.c、至少我可以说、它似乎没有解决这个问题。  一种简单的测试方法是在引导时将 SCL 接地、您将看到它锁定。

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

    尊敬的 Andrew:

    我们最近为 I2C 实现了新的超时功能、该功能将在下一版 SDK 中提供。  同时、您可以将随附的文件添加到您的 CCS 工程中、直到下一个 SDK 可用。

    此致、

    Janet

    e2e.ti.com/.../I2C.h

    e2e.ti.com/.../I2C.c

    e2e.ti.com/.../I2CCC32XX.h

    e2e.ti.com/.../I2CCC32XX.c

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

    Janet、

    感谢您提供该代码。

    因此、我只需将文件添加到我的常规源文件中、编译器就会自动使用这些文件、而不是从当前的 SDK 源文件中提取?

    我假设我需要使用 I2C_transferTimeout()而不是 I2C_transfer()?   

    此外,在哪里可以找到 sys tick 传递到 I2C_transferTimeout()的时间?

    我看到 I2C_transferTimeout()不会返回像 I2C_transfer()这样的 bool。

    *==== I2C_transfer ====
    //
    bool I2C_transfer (I2C_Handle handle、I2C_Transaction * transaction)
    {
    int_fast16_t 结果=(handle->fxnTablePtr->transferFxn (handle、transaction、I2C_wait_forever));
    
    if (result=I2C_STATUS_SUCCESS){
    返回(true);
    }
    否则{
    返回(false);
    }
    }
    
    /*
    === I2C_transferTimeout ====
    //
    int_fast16_t I2C_transferTimeout (I2C_Handle handle、I2C_Transaction *事务、uint32_t 超时)
    {
    返回(handle->fxnTablePtr -> transferFxn (handle、transaction、timeout));
    } 

    下面是它在旧 SDK 中的情况

    /*
    === I2C_transfer ====
    //
    bool I2C_transfer (I2C_Handle handle、I2C_Transaction * transaction)
    {
    返回(handle->fxnTablePtr -> transferFxn (handle、transaction));
    } 

    我还发现在 I2CCC32XSX_hwiFxn()内部为 I2CCC32XX_TIMEOUT 添加了一个案例,该案例可能用于时钟低电平超时,但未使用。

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

    尊敬的 Andrew:

    是的、没错。  通过将这些文件添加到项目中、将使用它们、而不是驱动程序库中的 I2C。

    I2C_transferTimeout()返回状态代码。  在阻塞模式下、它将是 I2C_STATUS_SUCCESS、I2C_STATUS_ERROR 或 I2C_STATUS_TIMEOUT、因此您需要检查返回值。

    要获得以微秒为单位的节拍时间,可以使用 ClockP_getSystemTickPeriod():

    #include

    uint32_t tickPeriodu;

    tickPeriodUs=ClockP_getSystemTickPeriod();

    此致、

    Janet

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

    Janet、

    我终于开始尝试将这些集成到中。  我右键单击项目名称、然后"添加文件"、然后将其复制到中。   我尝试组合、但我会得到一个很长的编译错误列表:

    说明资源路径位置类型
    未声明的'I2C_STATUS_TIMEOUT'(在此函数中首次使用) I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 977 C/C++ problem
    未声明的'I2C_WAIT_Forever (在此函数中首次使用) I2C.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 137 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第451行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路456 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路464 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路469 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路476 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第479行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 500 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 行537 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第729行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第732行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 736 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路742 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第745行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第329行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第341行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 350 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第357行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第798行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路801 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路805 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第811行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'burstWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 819 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 365 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第387行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 428 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路463 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 500 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第513行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 行537 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第728行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第732行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第845行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 859 C/C++线路问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalReadCountIdx'的成员;您是指'readCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第889 C/C++行问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路349 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第357行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 363 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第387行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第797行 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路801 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 818 C/C++ problem
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 线路842 C/C++问题
    'I2CCC32XX_Object{aka struct I2CCC32XX_Object}'没有名为'totalWriteCountIdx'的成员;您是指'writeCountIdx'? I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc 第852行 C/C++问题
    'I2CCC32XX_TIMEOUT'未声明(在此函数中首次使用) I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 324 C/C++ problem
    'I2CCC32XX_TIMEOUT'未声明(在此函数中首次使用) I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 1017 C/C++ problem
    gmake:***[I2C.o]错误1 OUT_OW_BOOD_CC3220S_LAUNCHXL_tirtos_gcc C/C++问题
    gmake:***[I2CCC32XX.o]错误1 OUT_OW_BOOD_CC3220S_LAUNCHXL_tirtos_gcc C/C++问题
    gmake:目标"全部"不会由于错误而重新生成。 out_for_box_CC3220S_LAUNCHXL_tirtos_gcc C/C++问题
    目标'I2C.o'的配方失败 subdir_rules.mk /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc/调试行9 C/C++问题
    目标'I2CCC32XX.o'的配方失败 subdir_rules.mk /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc/调试行9 C/C++问题
    函数'handle->fxnTablePtr->transferFxn' I2C.c /out_of_box_CC3220S_LAUNCHXL_tirtos_gcc line 137 C/C++ problem 的参数过多
    函数'handle->fxnTablePtr->transferFxn' I2C.c /out_of_box_CC3220S_LAUNCHXL_tirtos_gcc line 152 C/C++ problem 太多参数
    从不兼容的指针类型[-Wincompatible -pointer-types] I2CCC32XX.c /out_for_box_CC3220S_LAUNCHXL_tirtos_gcc line 108 C/C++ problem 初始化

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

    我通过修改文件以不查看头文件的 SDK 来解决依赖项错误。