引言:調試I2C從器件的第一步就是嘗試去讀它的地址,如果無法讀取地址或者向其發送讀寫命令卻沒有收到ACK回饋,都說明與器件通訊失敗。常規發生無法讀取I2C地址的情況時,第一懷疑點往往是硬件互聯出現問題,本節分享一個和軟件相關的調試案例。
1.問題背景
一枚視頻轉換芯片的I2C連接前端MCU上,調試時發現I2C通訊失敗,同一總線上的另外兩個器件地址均正常。發送讀寫命令波形也沒有ACK反饋,檢查過硬件互聯和Reset配置,均沒有問題。
2.懷疑點和排除過程
總線器件過多
考慮到一個I2C上掛載了三個從器件,分支和節點過多,并且走線也不短,所以懷疑是從器件過多導致Cload過大,無法和遠端通訊成功。于是摘掉和另外兩個器件的互聯電阻,再次嘗試,依然無法通訊,并且測量得到的波形質量并不差,如圖1-所示,我們向地址0X8A發送命令,卻沒有ACK回饋,說明并不是總線負載電容問題。
圖1-1:向設備發送讀寫命令波形
復位操作
雖然上電后復位Reset就為高電平,但是嘗試在從器件啟動后再復位一次,再嘗試讀取I2C地址,依然無法讀到,側面說明和時序沒有關系。為了驗證無法通訊是不是器件本身的問題,將其與MCU斷開,直接飛線I2C通過盒子連接到上位機,發現可以讀到地址,并且讀寫寄存器均正常,如下圖1-2是邏輯分析儀抓取到的波形圖,有明顯的ACK標志。
圖1-2:與上位機通訊抓取的讀寫波形
排除掉硬件互聯和引腳配置以及器件本身的問題,那么只有一個問題就是MCU端的I2C參數配置出現問題。
主器件I2C參數
那么主器件I2C涉及哪些參數呢,總線速度100KHz(標準),400KHz(快速),1MHz(超快速)、Data setup Time、Data hold Time等等這些參數可調,如圖1-4抓取上位機和器件通訊成功的波形,測試的Data hold Time大概為560ns,遠遠大于圖1-5器件手冊中的10-250ns,說明手冊中的此參數標注和實際不符,而MCU端I2C配置的是100ns,所以才通訊失敗。
圖1-3:與上位機通訊波形時間參數測量
圖1-4:與上位機通訊波形時間參數測量
圖1-5:器件手冊I2C時間參數
3.如何修正
如表1-5聯系原廠核對修改后的參數,修改主機I2C設置的Data hold time即可。
圖1-6:更正后的時間參數
4.總結
對于支持不同通訊速率的I2C設備,高速率的往往可以兼容低速率的,比如1MHz-I2C的A器件,它可以接收來自100KHz、400KHz、1MHz的速率信息,但是如果與它互聯的B器件只支持400KHz,那么B只能接收A發送100KHz、400KHz的信息。而100KHz、400KHz、1MHz的時間參數都有差異,在調試時不僅速率要匹配,與速率相關的時間參數也必須修改以保持兼容,因為芯片里面的I2C收發器ADC轉換速率與頻率f息息相關,而ADC轉換速率就決定著這些時間參數。
圖1-7:I2C主從機基本結構
從圖1-8可以明顯看出,三種速率下的數據保持時間和數據設置時間均有明顯的差異,以上述參數為例,Data hold time實際為560ns,說明器件僅支持到快速模式,但實際設置為100ns,而器件并不能支持這么快的采樣速度,所以無法識別Bit位,因此僅僅保持SCK一致,通訊也會fail。
圖1-8:幾種I2C模式的時間參數
另外有的器件支持好幾種系統時鐘(Syetem Clock),這時候其I2C時間參數可能就以System Clcok為單位,而不是直觀的us/ms,如圖1-9所示:
圖1-9:和系統時間掛鉤的I2C參數
-
mcu
+關注
關注
146文章
17123瀏覽量
350992 -
調試
+關注
關注
7文章
578瀏覽量
33923 -
通訊
+關注
關注
9文章
902瀏覽量
34890 -
總線
+關注
關注
10文章
2878瀏覽量
88052 -
I2C
+關注
關注
28文章
1484瀏覽量
123620
發布評論請先 登錄
相關推薦
評論