主题中讨论的其他器件: SysConfig
工具与软件:
我无法通过软件跟踪 I2C 线路上 SCL 和 SDA 的状态。 我想通过将 SDA 和 SCL 置于输入模式并遵循其状态、跟踪叔叔 CC3235SF 上在 I2C 通信过程中出现的任何错误。 如果 SCL 和 sda 为零、我将重新启动系统、但这样不起作用。 您可以帮助我解决这个问题吗?
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.
我正在使用 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 的同时关闭从器件的能量并尝试进行通信时、不会出现死锁。 我还使用了回调模式、我使用了阻塞模式、我不知道要使用哪一种模式。 我无法解决我的问题。
/* 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 行不应阻止代码的其他部分、正确吗?