一、實際應(yīng)用開發(fā)中遇到的“坑”
??(1)不要使用邏輯分析儀的自動分析功能,這款軟件BUG太多,波形的分析還是需要自己根據(jù)時序來,不要依賴工具;
??(2)在I2C的時序通信過程中,從機必然是要有ACK信號回復(fù)的,不然整個通信是不可能進行下去。之前以為ACK并非從機發(fā)送的,即使沒有從機也可以在GM5的引腳上觀察到完整的I2C時序圖,卡在這里很久。如果沒有從機,邏輯分析儀只能抓取到主機兩次尋址的波形。
??(3)關(guān)于I2C從設(shè)備地址的問題,之前在開發(fā)中是直接把從設(shè)備地址寫上去,后面發(fā)現(xiàn)無論使用任何方法都無法啟動設(shè)備,一度卡了很久,后面在問題的分析過程中發(fā)現(xiàn)原廠的驅(qū)動會把地址左移一位。
??所以我們需要把設(shè)備地址右移一位后再使用:
??(4)關(guān)于外設(shè)的電源供電問題,一定要嚴格按照說明來,比如RTC module的供電是5V,OLED屏幕的供電是3.3V,那么就不能使用GM5的3.8V VDD引腳進行供電,會提高bug出現(xiàn)的幾率或者無法啟動外設(shè)。可以借用DC POWER SUPPLY進行供電。
??(5)由于我拿到手的RTC和OLED只是外設(shè),沒有芯片手冊和說明書,所以在確定外設(shè)的從設(shè)備地址這件事情上耽誤了很長時間。但是同一類型的外設(shè)的從設(shè)備地址也是有規(guī)律的,比如時鐘RTC的地址一般是0X68,OLED的地址一般是0X3C或者0X3D,紅外傳感器的地址是0X60。具體的常見I2C從設(shè)備地址可以參考文章https://www.arduino.cn/thread-84222-1-1.html,一篇非常完整的總結(jié)。
二、I2C開發(fā)總結(jié)
??如果遇到了故障,一般而言排故的方法遵循以下步驟:
??(1)首先檢查硬件本身,如果主設(shè)(GM5)或者外設(shè)(OLED屏幕和RTC時鐘模塊)本身就有問題,模塊本身燒掉了肯定無法實驗成功,所以要確保硬件本身沒有問題,對外設(shè)的檢查可以使用替換法或者讀寄存器的地址。
??(2)第二步就是檢查線路的連接,線路是否正確連接。一般先連線GND,在連接數(shù)據(jù)線(I2C、SPI通信數(shù)據(jù)線),確認無誤后最后再連線VCC進行供電。同時請確保杜邦線的良好。
??(3)最后才是軟件層次的檢查。先要確保你的參數(shù)是正確,比如設(shè)備地址;然后是對空間的申請釋放、野指針的不當(dāng)操作、一級指針二級指針的錯誤使用;對故障的定位需要使用大量log信息打印來鎖定故障點在哪里,也可以使用ResearchDownload的DBG功能進行調(diào)試。
原文標題:二、I2C開發(fā)總結(jié)
文章出處:【微信公眾號:愛搞研究的阿燦】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
I2C
+關(guān)注
關(guān)注
28文章
1484瀏覽量
123620 -
邏輯分析儀
+關(guān)注
關(guān)注
3文章
214瀏覽量
23165 -
RTC
+關(guān)注
關(guān)注
2文章
538瀏覽量
66468 -
I2C通信
+關(guān)注
關(guān)注
0文章
22瀏覽量
8824
發(fā)布評論請先 登錄
相關(guān)推薦
評論