当前位置: 代码迷 >> 驱动开发 >> I2C有关问题
  详细解决方案

I2C有关问题

热度:100   发布时间:2016-04-28 11:18:00.0
I2C问题
大家好,我想问大家一个I2C的问题,下面我贴出程序段:
RMstatus init_i2c_tw( struct RUA *pInstance, 
RMuint8 delay, 
RMuint8 dev, 
RMuint8 i2c_data[][2], 
RMuint32 data_size)
{
RMstatus err=RM_OK;
RMuint32 i;

struct I2C_DeviceParams_type i2c;
struct I2C_WriteRMuint8_type i2c_write;

i2c.PioClock = 0;
i2c.PioData = 1;
i2c.WrAddr = dev << 1;
i2c.RdAddr = i2c.WrAddr | 0x01;
i2c.DelayUs = delay;
上面是dev应该是设备地址,为什么i2c.WrAddr = dev << 1;以及i2c.RdAddr = i2c.WrAddr | 0x01;
呢?I2C的写地址和读地址不是一样的吗?


------解决方案--------------------
为什么i2c.WrAddr = dev << 1
每个器件都有它自己的读写指令,至于为什么是dev左移1得到,那应该是dev跟写指令刚好有这个关系
i2c.RdAddr = i2c.WrAddr | 0x01;
呢?I2C的写地址和读地址不是一样的吗?
不一样,IIC的写指令是最后一们为0(bit7),读是1
IIC的操作顺序一般是
读/写命令+应答+要操作的寄存器地址+应答+要操作的数据
------解决方案--------------------
地址的最低位,表示进行读操作,还是写操作

如果最低位为0 表示要执行写操作
如果最低位为1 表示要执行读操作
------解决方案--------------------
设备地址是7位。而i2c内部的地址寄存器是8位。前7位用来存放你要写的设备地址,最后一位存放读写信号。
你的程序意思是写的目标设备地址是dev,读的目标地址也是dev。
  相关解决方案