总线技术|接口技术
直播中

易萧寒

8年用户 3经验值
私信 关注
[问答]

I2C总线技术的时序问题

看了郭天祥的I2C总线这一节,发现他在编写向AT24C的E2PROM时时序有问题。
原始部分程序为:
typedef unsigned char uchar;
uchar read_byte()
{
uchar i,j,k;
scl=0;//先置时钟为0
delay();//延时一段时间
sda=1;//释放数据总线
delay();//延时
for(i=0;i<8;i++)//一位一位的读数据
{
scl=1;//置时钟为1
delay();
j=sda;//读数据
k=(k<<1)|j;//将读取的8位数保存到k中
scl=0;//时钟信号变为0
delay();
}
return k;
}
我的疑问是:在时钟为高电平时,数据总线应该保持稳定,否则将会与起始信号与终止信号混淆。但是,程序时序存在一定问题,(for循环中)在scl高电平时读取数据,这时候数据有可能是变化的,例如上一电平为低,而这时为高,数据引起跳变。我觉得应该是这样的。
for(i=0;i<8;i++)
{
scl=0;
delay();
j=sda;//读数据
scl=1;//高电平,数据保持稳定传输
k=(k<<1)|j;
delay();
}
return k;
  • 数据在传输开始时scl开始为低,传输为高
已退回1积分

回帖(7)

曲终人散

2016-8-26 07:00:15
跟着时序图写不就行了
举报

刘元喜

2016-8-26 14:02:25
以时序图为准,写书的不一定写编码,写编码的也不一定去写书。中国教授特色!
举报

pku

2016-8-26 14:15:55
原程序是对的,你的是错的。
写到单片机里试一下就知道了
举报

pku

2016-8-26 14:16:50
引用: nealcc 发表于 2016-8-26 14:02
以时序图为准,写书的不一定写编码,写编码的也不一定去写书。中国教授特色!

郭天祥并不是教授。。。
举报

Chris_z

2017-1-17 16:22:22
根据芯片资料中的时序要求进行编程,如果没有达到时序要求,数据肯定会存在问题。
举报

曾进荣

2017-2-27 17:46:25
时序要求很关键啊
举报

1145167054

2017-4-21 09:11:40
有时序图,看着那个编写时序
举报

更多回帖

发帖
×
20
完善资料,
赚取积分