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.

[参考译文] CC3235SF:我无法通过软件跟踪 I2C 线路上 SCL 和 SDA 的状态。

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1487166/cc3235sf-i-cannot-follow-the-status-of-scl-and-sda-on-the-i2c-line-via-software

器件型号:CC3235SF
主题中讨论的其他器件: SysConfig

工具与软件:

我无法通过软件跟踪 I2C 线路上 SCL 和 SDA 的状态。 我想通过将 SDA 和 SCL 置于输入模式并遵循其状态、跟踪叔叔 CC3235SF 上在 I2C 通信过程中出现的任何错误。 如果 SCL 和 sda 为零、我将重新启动系统、但这样不起作用。 您可以帮助我解决这个问题吗?

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

    您好!

    您能否更好地描述 I2C 恢复过程? 为什么在 CC32xx 器件复位时使用此类方法? 当 I2C 芯片内的状态机卡在错误状态时、这种方法无法正常工作。 无论 MCU 类型如何、通常都将 SCL 线路切换到 GPIO 输出并生成少量时钟(SCL)脉冲。

    1月

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

    我正在使用 TI_RTOS。 我通过 LPDS 模式进入睡眠模式、并且系统通过 http 请求唤醒。 我在阻塞模式下使用 I2C。 由于 I2C 线、系统会锁定处理器。 甚至 Whatcdog 计时器也锁定。 我正在调查原因。 因此、如何在不锁定系统的情况下控制 I2C 线路?或者我在哪里犯了错误? I2C 中有一种超时机制、但尽管存在该机制、系统仍会锁定。 尤其是当与 I2C 通信的从器件中存在错误时、集成的从器件发生故障时、系统想要与 I2C 通信、但当从器件不响应时、整个系统会锁定。 尽管有 Whatcdog 时间,它不工作,系统锁定。 当没有 I2C 时不会出现此类问题。

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

    您好!

    很难说、但代码中需要有明显的错误。 没有理由由于 I2C 总线上的问题而导致 MCU 崩溃或"冻结"。 我甚至从未见过这样的看门狗问题。 根据我的经验、CC32xx 器件的看门狗非常可靠。 我记得的唯一问题是、当错误信号馈送到硬件复位引脚时看门狗锁定。

    我使用 CC3220、其外设与 CC3235完全相同。 我使用 TI-RTOS、但与 driverlib 库配合使用。 我不会将 ti-drivers 与 SysConfig 一起使用。 这是因为我的工程是在 SysConfig 可用之前启动的。 另一个原因是 ti-drivers 大幅减少了硬件本身可用的功能。 即使是最新的 SDK 版本、TI 驱动程序也存在缺陷的最后一个原因。

    您确定看门狗重置存在问题吗? 由于硬件问题(例如、由于内部保护二极管寄生供电而导致引导加载程序冻结、错误的 SOP 模式和悬空 UART RX 引脚等)、复位后的器件启动会出现什么情况?

    1月

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

    如果没有 LPDS 模式、我不会遇到此类问题。 在 LPDS 模式下、系统消耗1mA 电流。 当消耗1mA 电流时 i2c 线出现错误时、例如、我关闭从器件的电源、在这种情况下、它会在尝试通信时锁定。 如果我在没有 LPDS 的情况下进行同样的操作、系统会消耗30mA、当我在绘制30mA 的同时关闭从器件的能量并尝试进行通信时、不会出现死锁。 我还使用了回调模式、我使用了阻塞模式、我不知道要使用哪一种模式。 我无法解决我的问题。

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

    您好!

    对我来说、这似乎是硬件设计的问题。 如果您的硬件有多条电源总线可以关闭、则需要正确处理、尤其是在使用低功耗模式时。 也许您应该在进入 LPDS 模式之前检查如何停止引脚。

    1月

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

    /*  I2C 回调 Fonksiyonu */
    静态 void I2C_Callback (I2C_Handle handle、I2C_Transaction *事务、bool transferStatus){
    transferComplete = true;
     SemaphoreP_POST (i2cSemaphore);//  İşlem tamamlandığında semaphore'u serbest bırak

    如果(!transferStatus){
     I2C_CANCEL (i2cHandle);//  Hata durumunda I2C işlemini iptal et
    }
    }

    void initI2C (void){
    I2C_Params i2cParams;
    I2C_Params_init (&i2cParams);
    i2cParams.transferMode = I2C_MODE_CALLBACK;//非阻塞模式
    i2cParams.transferCallbackFxn = I2C_Callback;
    i2cParams.bitrate = I2C_400kHz;// 400kHz hızlı mod

    i2cHandle = I2C_open (0、&i2cParams);
    if (i2cHandle == NULL){
    // I2C başlatma başarısız oldu、hata yönetimi yapılabilir。
    }

    //İşlem tamamlanmasını beklemek için bir semaphore oluştur
    SemaphoreP_Params semParams;
    SemaphoreP_PARAMS_init (&semParams);
    semParams.mode = SemaphoreP_Mode_binary;
    i2cSemaphore = SemaphoreP_create (0、&semParams);
    }  通过这种方式,我将其与回调结构一起使用。 在此结构中、i2c 行不应阻止代码的其他部分、正确吗?  

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

    您好!

    我不会看到该代码有任何明显错误。

    1月