ch582硬件I2C卡死要怎么解決?

代碼通過TMOS任務(wù),每隔500ms讀一次從機I2C數(shù)據(jù)?,F(xiàn)在測試結(jié)果就是,跑了幾分鐘或者十幾分鐘后就會卡死在I2C,數(shù)據(jù)線拉低。

1708342357115884.png

1708342357178864.png


您好,卡死時可以調(diào)用以下接口復(fù)位一下硬件IIC模塊。

I2C_SoftwareResetCmd(ENABLE);

I2C_SoftwareResetCmd(DISABLE);

排查①外圍電路是否有5~10K的上拉電阻上拉到V33

②出故障時打印一下IIC狀態(tài)寄存器R16_I2C_STAR1和R16_I2C_STAR2,查看哪些標(biāo)志位異常

③可以嘗試提高IIC的中斷優(yōu)先級,接口函數(shù):PFIC_SetPriority

image.png


上拉電阻是10K,中斷也只有I2C中斷開著。

目前發(fā)現(xiàn),只要一出現(xiàn)I2C卡死,電流會莫名的高5mA。我現(xiàn)在是一個任務(wù)里多次讀I2C,這個是否會有影響呢?

R16_I2C_STAR2狀態(tài)如圖

1708409048116108.png

1708409048111043.png



把編譯器中的代碼優(yōu)化改成無優(yōu)化貌似就不會死掉了,現(xiàn)在掛著讓它跑了三小時都還正常,取而代之的是內(nèi)存暴漲= =。優(yōu)化程度怎么還會影響這個的?


掛了一晚上,無優(yōu)化也還是會死,不過無優(yōu)化可以運行3,4個小時才會死,全優(yōu)化最多半小時。

而且無優(yōu)化死的時候是報的錯是總線忙,沒有數(shù)據(jù)線拉低的動作。

? ? while(wait && (i2c_state == I2C_MTX)) {

? ? ? ? continue;

? ? }

會一直卡在這個地方。

這個問題有點神奇,導(dǎo)致我想優(yōu)化都無從下手= =


您發(fā)送聯(lián)系方式到郵箱zhaiyw@wch.cn,交流更多信息以協(xié)助您排查。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频