问题描述
昨天遇到一个问题,就是使用i2cdetect检测不到外部所挂载的eeprom芯片。
root@localhost:~# i2cdetect -r -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
检查了设备树的配置如下:
&i2c3 {
status = "okay";
eeprom_24c256:24c256@50 {
compatible = "gt24c08_eeprom";
pagesize = <64>;
reg = <0x50>;
};
};
然后又检查了引脚配置发现没有错误
将i2c总线的时钟频率进行减低,试一下。(后来发现和这个无关)
i2c3:i2c@300d0000 {
compatible = "snps,designware-i2c";
#address-cells = <1>;
#size-cells = <0>;
clock-names = "i2c-clk";
//#clock-frequency = <100000>;
#clock-frequency = <50000>;
timeout = <10>; /* ms */
status = "disabled";
};
最后检查硬件,发现SCL和SDA接反了。
正常情况应该是这样的。
root@localhost:/dev# i2cdetect -r -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
解决方案:
总的来说,嵌入式软件的调试里面涉及到软硬件的联调,当找不到软件的配置原因之后,我们需要找硬件工程师定位一下硬件的问题,要细致呀!