1.吐槽
最近公司項目【Android 7.0 MTK8321平臺】換新的地磁af133[afx8133j]胖喳,又遇到坑了然走!報了這個錯誤疆前,真奇葩H暇场!课竣!
報錯如下
afx133err->[1243][@afx133_create_attr] driver_create_file (daemon) = -17
錯誤一:一開始遇到的是i2c報錯嘉赎,通信失敗。
1.檢查i2c地址有沒有配對
地址有2個稠氮,0x1C和0x1E
規(guī)格書
從規(guī)格書中看曹阔,地址取決于A0叫接地還是接電源半开。
A0腳-接地的話:地址為0x1C
A0腳-接AVDD或者DVDD【就是接電源】的話:地址為0x1E*
2.檢查reset有沒有拉高
規(guī)格書
從規(guī)格書來看隔披,地址是低有效,因此我們默認(rèn)要拉高寂拆,跟硬件和fae溝通奢米,要配置成output抓韩,并且拉高[outhigh],但是很奇葩的是鬓长,原理圖上
原理圖1
原理圖2
【查看GPIO表谒拴,硬件上ENIT8[AH26]對應(yīng)的就是GPIO8】
硬件原理圖上接的是enit,因此配置的時候涉波,配成中斷拉高即可英上!這樣通信才不會報錯,配成out拉高還是無法通信啤覆!
GPIO
報錯二:driver_create_file (daemon) = -17
afx133err->[1243][@afx133_create_attr] driver_create_file (daemon) = -17
afx133err->[2384][@afx133_i2c_probe] create attribute err = -17
afx133err->[2478][@afx133_i2c_probe] err = -17
log
這個錯誤是真的奇葩苍日,跟蹤代碼,最后發(fā)現(xiàn)
代碼
錯誤是-EEXITST,其實就是ERROR-EXITST窗声,表示的是該節(jié)點存在了O嗍选!笨觅!
錯誤碼查詢網(wǎng)址
錯誤碼
思考良久拦耐,懷疑是不是驅(qū)動代碼有問題,找fae換了一份新的代碼就ok了见剩!
問題根源
image.png
注釋掉這行代碼就可以了杀糯,驅(qū)動就正常了。我把地址打印出來苍苞,發(fā)現(xiàn)賦值前后地址不同;鹇觥!柒啤!
log
這里打印的格式不同倦挂,前面打印的%x,后面打印的是%d担巩,
轉(zhuǎn)換成16進(jìn)制就是
i2c_addr[0]=0x1e,client->addr=0x0d
i2c_addr[0]=0x1e,client->addr=0x1e
代碼中
client->addr = hw->i2c_addr[0]進(jìn)行賦值方援,就改變了client->addr(設(shè)備地址),導(dǎo)致錯誤涛癌!