ωǒメ№懂爱 发表于 2019-9-12 16:55:59

谁能给我解释一下I2C的读出时序是怎么样的呀

第一个问题是为什么刚开始为什么要拉高SDA=1?让什么处于空闲状态?然后为什么拉低了数据就变成了零了?
函数如下:
/*******************************************************************************
* 函数名         : I2cReadByte()
* 函数功能      : 使用I2c读取字节
* 输入             : 无
* 输出             : dat
*备注            : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/
unsigned char I2cReadByte()
{
unsigned char a=0,dat=0;
SDA=1;   //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
}
return dat;
}
再然后更想问的,芯片的数据从高位到地位依次通过SDA付给dat吗?但是SDA是怎么变化的?比如芯片里要读出的数据是1000 0001,首先SDA等于芯片的最高位1然后才dat|=SDA的吧?但是什么时候最高位1赋给SDA的?然后又什么时候SDA变成了下一位0?
就是芯片怎么依次把数据通过SDA给了dat?
SCL等于1的时候SDA不会变SDA一等于0SDA就变吗?但为什么又恰恰只得到了要读的数据的下一位而不会跳过去?
求大佬详解一下,跪谢!!






能跟我说一下,I2C的操作时序是怎么样的吗?
写入的时候,大概能理解,但是读取的时候有点难以理解,按照上面的程序我的理解是,SDA=1,然后SCL=1,然后数据移位(变化),然后SCL=0,这理解不了呀,不是应该数据先移位,然后稳定了就SCL=1,延时后,SCL=0,然后数据再移位,不是这样循环的吗?
麻烦大神帮我解答一下谢谢谢谢
页: [1]
查看完整版本: 谁能给我解释一下I2C的读出时序是怎么样的呀