当前位置: 代码迷 >> 驱动开发 >> 请问:2440下访问24C02的地址有关问题
  详细解决方案

请问:2440下访问24C02的地址有关问题

热度:369   发布时间:2016-04-28 10:00:04.0
请教:2440下访问24C02的地址问题
请教:24c02芯片的地址不是0xa0吗?
可在linux下iic访问24c02的地址会变为0x50?
------解决思路----------------------
是啊,这样说的话又说不过去了,希望高手指点啊
------解决思路----------------------
有没有这样的

slave_addr=0x50<<1
------解决思路----------------------
R_OR_W;

地址不对怎么访问24C02呢,你再仔细看哈。。。
------解决思路----------------------
24C02正如楼主所说,它的地址是可配置的,一般来说一个I2C器件的I2C地址由7bit的地址+读写位(R-1 or W-0),
假设数你将24c02的A2 A1 A0脚都接地的话,那么这个I2C器件的地址就固定为A0(写地址),读地址为A1

如果你要读取这个器件offset为0的值的话
S+A0 +ACK(From 24c02) +0x00 +ACK(24c02) + SR + A1+ ACK(24c02)+ Data(from 24c02) + ACK(Master)+ P

为可在linux下iic访问24c02的地址会变为0x50?
因为我们在编写I2C驱动的时候,我们是不会将A0的最后位算在内,驱动关心的只是7位的地址即A0>>1,在需要的时候,驱动会添加上读写位。
------解决思路----------------------
一般I2C的地址不都是以7bit来表示的么,不会超出0x7f,你说的0xa0肯定是补齐最后一位读写位了
到底是需要传入7bit还是补齐的8bit,需要看你的i2c驱动是怎么写的了
------解决思路----------------------
引用:
听各位大神说的,大概是明白了,在linux下配置的地址0x50是假的,实际访问24C02时,还会把地址左移一位=0xa0。因为我试了几个不同地址的IIC外设,都需要把实际地址/2,才能在LINUX下访问成功。
产生一个新问题是,为何要如此做呢?


有些底层的东西就是这样搞的,没有理由,只是习惯而已。就像支持I2C通信的芯片,有些需要向左移1位,有些则不需要