打印

关于AT24C02的时序问题~~~

[复制链接]
2913|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jj89816657 于 2011-8-7 13:32 编辑


void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
根据停止时序写的程序,但是我把,SCL和SDA的顺序换一下之后就完全不行了~~不知道是为什么,请各位大牛指导《我的理解是,SCL直接拉高,SDA先是低,再高,这样我觉得也正确啊,可是实际却是必须SDA先低,再拉高SCL,再SDA拉高才行》,求解啊~~~!!我是菜鸟~~嘿嘿。。。。起始信号SDA,SCL~哪个先拉高都可以~~所以我很郁闷

相关帖子

沙发
NE5532| | 2011-8-7 14:34 | 只看该作者
理解错误,SCL为高的时候SDA下跳是启动,上跳是发送,其他时候只有SCL为低的时候,SDA才能动。

使用特权

评论回复
板凳
jj89816657|  楼主 | 2011-8-7 17:09 | 只看该作者
2# NE5532
我知道,但是我问的不是这个问题~~你没有仔细看我的问题吧

使用特权

评论回复
地板
NE5532| | 2011-8-7 22:29 | 只看该作者
那我确实看不懂你想问什么了。

使用特权

评论回复
5
jj89816657|  楼主 | 2011-8-7 22:49 | 只看该作者
4# NE5532
我的意思是,我看停止时序图上的的理解是只要scl是高,sda在一个上升沿前后保持一段时间就可以了,......可是事实是,必须要先拉低sda再拉高scl,最后拉高sda才能正常的工作..这个地方我就很不明白了~~...这个是芯片是E2PROM,掉电保存的芯片(上电后可以读出上次掉电前你存进去的数据).......这样你能理解吗?求解答,谢谢

使用特权

评论回复
6
jj89816657|  楼主 | 2011-8-7 22:52 | 只看该作者
5# jj89816657
还有我知道,scl在高的时候,下跳是启动,上跳是停止,我就是想问一下,为什么SCL,SDA的顺序换一下就不行了呢~详细请看楼上

使用特权

评论回复
7
jj89816657|  楼主 | 2011-8-7 22:55 | 只看该作者
4# NE5532
还有我知道,scl在高的时候,下跳是启动,上跳是停止,我就是想问一下,为什么SCL,SDA的顺序换一下就不行了呢~我的想法是
scl=1;
delay();
sda=0;
delay();
sda=1;
delay();
实际上下面这样才可以~:
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
sda和scl的位置换了一下就不行了呢???求解释~~~~

使用特权

评论回复
8
linqing171| | 2011-8-8 07:31 | 只看该作者
第二种更标准一点,因为标准有说明,在通讯的一个包之内,不用的时候要占用总线,也就是输出0. 直接可以发第二个的时序。
但是第一个也肯定没有问题,可以正常工作,如果不能,说明有两个情况:
1 stop的建立时间不够,start+stop组合时序肯定是没有问题的,stop之前多延时一下看看。
2 楼主没有发送应答。也就是少了个时钟,每个字节都发8个数据时钟加一个应答时钟。
另外,还是有示波器的图有真相。

使用特权

评论回复
9
linqing171| | 2011-8-8 07:35 | 只看该作者
楼主在sda=1;
这行暂停,执行完之后看看SDA是不是被24C02输出了个0导致你的上拉拉不上去。
如果是,说明你前面的代码有问题。

使用特权

评论回复
10
zdhwangep| | 2011-8-8 08:18 | 只看该作者
你的delay有多长时间?

使用特权

评论回复
11
bnyuli| | 2011-8-8 10:38 | 只看该作者
现在的时间还是会有很多很多种的要求的

使用特权

评论回复
12
NE5532| | 2011-8-8 15:23 | 只看该作者
I2C只有我说的那几个时序,其他的都是错误理解。

使用特权

评论回复
13
jj89816657|  楼主 | 2011-8-8 17:55 | 只看该作者
10# zdhwangep
我的延时函数是这样的:
void delay()
{ ;; };

使用特权

评论回复
14
NE5532| | 2011-8-8 22:53 | 只看该作者
你先搞清楚需不需要delay再说嘛

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

43

帖子

1

粉丝