普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2325|回复: 0

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

 关闭 [复制链接]

5

主题

24

帖子

72

积分

注册会员

Rank: 2

积分
72
QQ
发表于 2019-9-12 16:55:59 | 显示全部楼层 |阅读模式
第一个问题是为什么刚开始为什么要拉高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 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-20 22:26 , Processed in 0.084343 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表