3894|10

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430f5529 I2C求助 [复制链接]

 
小弟用P3.5和P3.6模拟I2C总线,但是得不出正确的波形,大佬们能指点一下吗?程序和波形图如下:
void IICstart()
{
    P3OUT|=BIT5;//先保证SDA数据总线为高,保证在时钟信号为高的前提下以便于变低
    _NOP();
    _NOP();
    _NOP();
    P3OUT|=BIT6;
    _NOP();
    _NOP();
    _NOP();
    P3OUT&=~BIT5;//数据信号由高到低,启动信号发出
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    P3OUT&=~BIT6;//使时钟信号为底,以便数据下次的变化
    _NOP();
    _NOP();
    _NOP();
    _NOP();
}
//IIC停止信号,在scl为高的前提下,使SDA由低到高;
void IICstop()
{
    P3OUT&=BIT5;//先保证SDA数据总线为低,保证在时钟信号为高的前提下以便于变高
    _NOP();
    _NOP();
    _NOP();
    P3OUT|=BIT6;
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    P3OUT|=BIT5;//数据信号由低到低高,停止信号发出
    _NOP();
    _NOP();
    P3OUT&=~BIT6;
    _NOP();
    _NOP();

}
//IIC写一个字节,在scl为低的前提下,SDA上的数据才能变化;在SCL为高,SDA的数要稳定
void IICWrite1byte(unsigned char Buf)
{
    unsigned char k;
    for(k=0;k<8;k++)//一个字节为8位,故要读八位出来
    {
        if(Buf&0x80)//屏蔽低7位,保留高一位并且做出判断;
            P3OUT|=BIT5;
        else
            P3OUT&=~BIT5;
        _NOP();
        _NOP();
        //上面几句代码是为了在SCL为低的前提下,SDA做好数据准备
        P3OUT|=BIT6;
        _NOP();
        _NOP();
        _NOP();
        _NOP();
        _NOP();
        Buf=Buf<<1;//Buf左移一位,因为最高位的数已经写入到SDA上面了,为写
                 //次高位做好准备
        _NOP();
        _NOP();
        P3OUT&=~BIT6;//拉低SCL,为SDA上的数变化做好准备
        _NOP();
        _NOP();
    }
    P3DIR&=~BIT5;//
    _NOP();
    _NOP();
    P3OUT|=BIT6;//当8位数据发送完毕后,第9个脉冲是要检测应答位
        //当SDA=0时,数据发送完毕,SDA=1时未发送完
    _NOP();
    _NOP();
    _NOP();
    if(P3OUT&BIT5){
    P3OUT&=~BIT6;
    _NOP();
    _NOP();
    P3DIR=BIT5;
}
}


//往AT24C02中写一个字节
void WriteAT24C02(unsigned char address,unsigned char Databuf)
{
    IICstart();
    IICWrite1byte(0xA0);//写从器件的地址
    IICWrite1byte(address);//要写到从器件的什么地址中
    IICWrite1byte(Databuf);//地址中写的数
    IICstop();
}
void delay(unsigned int z)
{
    unsigned i;
    for(i=0;i<=z;i++);
}
void main()
{

        WriteAT24C02(0x18,99);
    while(1);
}


波形图很乱,不知道问题处在哪,如下:

file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1779521811\QQ\WinTemp\RichOle\0D1O`X$MZW9K7WRJ]9L1~Z1.png

QQ图片20171205160255.png (13.25 KB, 下载次数: 0)

QQ图片20171205160255.png

最新回复

协议你自己对照手册看吧。  一帧数据的结构应该是有说明的。i2C的协议,你好好理解一下。i2C的协议,你可以抛开手册,看基本规则。协议本身理解了。再结合手册中,时序的要求。一般不会有太大的差异。时序这块就应该能清楚了。  按照时序要求去写。  时钟间隔不一致。这样开发不太规范。开发要踏下心来分析。  详情 回复 发表于 2017-12-14 13:59
 
点赞 关注

回复
举报

3471

帖子

11

TA的资源

五彩晶圆(高级)

沙发
 
void IICstop()
{
    P3OUT&=BIT5;//先保证SDA数据总线为低,保证在时钟信号为高的前提下以便于变高
这个地方不对。没有取反。好好检查一下还有没有类似的问题。
你注意一下,逻辑分析仪的电平设置。要和波形的幅度匹配,否则,容易出问题。
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
ienglgge 发表于 2017-12-8 12:57
void IICstop()
{
    P3OUT&=BIT5;//先保证SDA数据总线为低,保证在时钟信号为高的前提下以便于变高
这 ...

您说的是把逻辑分析仪的阈值电压设置成和VDD一样的值吗?
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

4
 
ienglgge 发表于 2017-12-8 12:57
void IICstop()
{
    P3OUT&=BIT5;//先保证SDA数据总线为低,保证在时钟信号为高的前提下以便于变高
这 ...

您说的是把逻辑分析仪的阈值电压设置成和VDD一样的值吗?
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

5
 
hxm3213 发表于 2017-12-12 11:20
您说的是把逻辑分析仪的阈值电压设置成和VDD一样的值吗?

你看你手里的型号,是否有电平的设置。他会显示电压幅度和阈值,比如选择3V3 ,阈值就应该显示1V65左右。  你选择电压时,他应该有显示的。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

6
 
ienglgge 发表于 2017-12-13 11:41
你看你手里的型号,是否有电平的设置。他会显示电压幅度和阈值,比如选择3V3 ,阈值就应该显示1V65左右。  ...

嗯嗯,对的,很感谢你,波形对了,但是存储器没响应,除了地址错误还会有其他原因吗
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

7
 
hxm3213 发表于 2017-12-13 16:54
嗯嗯,对的,很感谢你,波形对了,但是存储器没响应,除了地址错误还会有其他原因吗

看从设备芯片手册的时序。起始,位宽等等,每一个部分都认真检查,是否和手册相符。当然,从设备硬件首先得正常
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

8
 
ienglgge 发表于 2017-12-13 18:13
看从设备芯片手册的时序。起始,位宽等等,每一个部分都认真检查,是否和手册相符。当然,从设备硬件首先 ...

给您看下我的波形图吧。我从设备地址是110111M(M为0或者1),然后加上写位就是11011100,16位是DC。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

9
 
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1779521811\QQ\WinTemp\RichOle\V18B7}NYVMDH)R]D9CXE`LY.png

 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

10
 
ienglgge 发表于 2017-12-13 18:13
看从设备芯片手册的时序。起始,位宽等等,每一个部分都认真检查,是否和手册相符。当然,从设备硬件首先 ...

看从设备手册,它还提到了发送只能两字节两字节发,我有点没搞明白
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

11
 

协议你自己对照手册看吧。  一帧数据的结构应该是有说明的。i2C的协议,你好好理解一下。i2C的协议,你可以抛开手册,看基本规则。协议本身理解了。再结合手册中,时序的要求。一般不会有太大的差异。时序这块就应该能清楚了。  按照时序要求去写。  时钟间隔不一致。这样开发不太规范。开发要踏下心来分析。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表