Browsing this Thread:
1 Anonymous Users
|
Re: SAMC21 I2C Bus Error
|
|
管理員

Joined
: 2017/11/22 11:20 最後登入時間
: 2024/10/22 7:37
Group:
站務管理者 註冊會員
Level : 17 HP : 0 / 407 MP : 114 / 8610 EXP : 29
|
BUSSTATE : 3 代表 Bus in BUSY state, 可能有其他 I2C Host 正在使用 Bus BUSERR : 1 顧名思義是任何I2C Bus 上的協議錯誤/衝突都會讓這個bit為 1 如果要清除BUSERR bit時, 可以對 ADDR.ADDR寫入值即可清除, 對I2C Bus執行讀寫時SERCOMx_I2C_Write() or SERCOMx_I2C_Read(), 即會設置 ADDR.ADDR (I2C slave address), 也就是會清除BUSERR bit(如果成功的話) 至於執行SERCOMx_I2C_TransferAbort() 時, 則會對CTRLA的ENABLE bit下達一次關閉再開啟, 藉此關閉SERCOM_I2C再開啟一次, 同時會將But State設為 Idle, 這樣也是會清除BUSERR bit, 主要是看你I2C Bus上面的設計, 如果有兩個 Host同時對一個Slave進行通訊時, 得要小心處理衝突的問題. 當然執行完Wirte/Read之後你也可以使用SERCOMX_I2C_IsBusy()來等待自己的傳輸完成再離開.
發表於: 2023/3/27 14:32
|
|
|
SAMC21 I2C Bus Error
|
|
新會員

Joined
: 2023/2/16 17:36 最後登入時間
: 2023/3/22 18:33
Group:
註冊會員
Level : 1 HP : 0 / 2 MP : 1 / 15 EXP : 10
|
請教若遇到 SAMC21 I2C Status = BUSERR = 1 / BUSSTATE = 3, 需做這樣處理? 是只要再執行 SERCOMx_I2C_Write()函數就會自動清除, 或者要執行 SERCOMx_I2C_TransferAbort()來取消該次I2C發送
發表於: 2023/3/22 18:33
|
|
You can view topic.
你 不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.