打印

请教大家关于IIC,SPI总线释放的问题!

[复制链接]
4587|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qwe70007|  楼主 | 2011-8-9 19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RT:初学单片机的过程中遇到了AT24C02,DS1302这两种IIC和SPI的代表,但在学习的过程中遇到了以下问题,特来请教大家.

1. IIC,SPI是否都需要释放总线?
2. 若需要释放总线,是不是在读OR写后都需要释放?还是只需在读后释放?
3. 是不是只需要释放数据线,而不需要管时钟线呢?


在此先谢谢大家了!!:handshake

相关帖子

沙发
老鱼探戈| | 2011-8-9 19:29 | 只看该作者
1、是
2、都需要释放
3、同2

使用特权

评论回复
板凳
qwe70007|  楼主 | 2011-8-9 20:01 | 只看该作者
本帖最后由 qwe70007 于 2011-8-9 20:53 编辑

2# 老鱼探戈

再请问下这两个总线释放都是拉高么?

为什么我的24c02读之后再释放SCL线时就会出错呢?
uchar read_byte()             //读一个字节
{
        uchar i,dat;
        SCL=0;
        SDA = 1;
        for(i=0;i<8;i++)
        {        
                read_data <<= 1;
                SCL=1;                 
                if(SDA)
                    read_data |= 0x01;        
                SCL=0;                              
        }
        SDA=1;
        SCL=1;
        return  dat;
}
若无最后的SCL=1,或写成SCL=0则正常。(延时在此删掉,和延时无关系)

请教一下这是为什么呢?能帮忙解释下么,谢谢!

使用特权

评论回复
地板
电子write_cai| | 2011-8-9 20:06 | 只看该作者
看时序图。

使用特权

评论回复
5
jj89816657| | 2011-8-9 20:11 | 只看该作者
https://bbs.21ic.com/icview-253888-1-1.html   看下我的帖子吧,我反正是没有释放的, 我的提问你知道就回答下吧,谢谢

使用特权

评论回复
6
jj89816657| | 2011-8-9 20:14 | 只看该作者
uchar read_byte()
{
        uchar i,k;
        scl=0;
        delay();
        sda=1;
        delay();
        for(i=0;i<8;i++)
        {
                scl=1;
                delay();       
                k=(k<<1)|sda;
                scl=0;
                delay();       
        }
        return k;
}
这个是郭天祥写的程序,我也是新手,我弱弱的问下
              if(SDA)   //这个if语句里面只写一个那个是什么意思啊,不用判断什么的吗?
                    read_data |= 0x01;   //还有你这个或0x01不是慢慢的就把read_data变成0xff了吗

使用特权

评论回复
7
jj89816657| | 2011-8-9 20:17 | 只看该作者
我觉得哈,sda不管,每次只要把SCL拉低就好了~但是我实际上是完全没有关他们的

使用特权

评论回复
8
NE5532| | 2011-8-9 20:24 | 只看该作者
I2C没有释放不释放的说法,静态的时候两根线必须为高电平,其本来就是个多主机多从机总线。SPI主机不见得,有的单片机把他做成平时释放的,有的不释放。如果不涉及多机共享总线,可以不纠结这个问题。

使用特权

评论回复
9
mxh0506| | 2011-8-9 20:26 | 只看该作者
这两种总线的硬件结构不一样
IIC通过线与逻辑(OD输出)连接在一起, 硬件上只要不把数据/时钟线拉低就算是释放了.
SPI通过片选信号控制输出线, 只在选通时才能驱动总线, 否则处于高阻态(即释放)

使用特权

评论回复
10
jxgxlm2008| | 2011-8-10 08:56 | 只看该作者
if(SDA)   //这个if语句里面只写一个那个是什么意思啊,不用判断什么的吗?
括号内的就是判断的吧,SDA为高时候为真既;逻辑值 1 括号里的应该是判断是逻辑值。呵呵  我是做硬件的C只是懂点

使用特权

评论回复
11
jack_shine| | 2011-8-10 09:58 | 只看该作者
都需要的,不要用的时候就是放,不用占着资源

使用特权

评论回复
12
bnyuli| | 2011-8-10 14:56 | 只看该作者
都需要的,不要用的时候就是放,不用占着资源

使用特权

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

本版积分规则

5

主题

41

帖子

0

粉丝