打印

求助:为什么5509a的iic设置后没有SCL没有信号?

[复制链接]
1490|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天调试iic,按照csl库的例程,设置了IIC,但在示波器上看不到SCL信号,当然也就访问不了外部IIC设备了。会是什么原因呢?设置如下:
/*锁相环的设置*/
PLL_Config  myConfig      = {
  0,    //IAI: the PLL locks using the same process that was underway
                //before the idle mode was entered
  1,    //IOB: If the PLL indicates a break in the phase lock,
                //it switches to its bypass mode and restarts the PLL phase-locking
                //sequence
  12,    //PLL multiply value; multiply 12 times
  1             //Divide by 2 PLL divide value; it can be either PLL divide value
                //(when PLL is enabled), or Bypass-mode divide value
                //(PLL in bypass mode, if PLL multiply value is set to 1)
};
/* Create and initialize an I2C initialization structure */
I2C_Setup iicInit = {
        0,              /* 7 bit address mode */
        0,         /* own address - don't care if master */
        120,            /* clkout value (Mhz)  */
        20,            /* a number between 10 and 400*/
        0,              /* number of bits/byte to be received or transmitted (8)*/
        0,              /* DLB mode on*/
        1               /* FREE mode of operation on*/
};
void main(void)
{
   Uint16 iicBuf[3];
               
    CSL_init();

    PLL_config(&myConfig);
                    
   I2C_setup(&iicInit);
   
    /* Write a data byte to I2C */
    //x=I2C_write(databyte1,1,1,0x70,1,30000);
    for(i = 0; i < 100; i++)
    {
    /* Read data byte from I2C */
    count=I2C_read(iicBuf,3,1,0x70,1,30000,0);
    }
}
在读IIC的时候,通过示波器观察SCL脚,并没有脉冲信号。读一次就会拉低。

相关帖子

沙发
lishong|  楼主 | 2015-3-5 15:58 | 只看该作者
下午调试测试现象是scl有波形了(IIC时钟设置有问题),但每次我读三个字节,输出的SCL总是只有一个字节的脉冲(即只有9个脉冲)。脉冲宽度是对的,与设置的一样。而且读出的数根本就不对,函数返回为2.我现在主频为20M,iic的频率设置为10khz。
/* Create and initialize an I2C initialization structure */
I2C_Setup iicInit = {
        0,              /* 7 bit address mode */
        0,         /* own address - don't care if master */
        20,            /* clkout value (Mhz)  */
        10,            /* a number between 10 and 400*/
        0,              /* number of bits/byte to be received or transmitted (8)*/
        0,              /* DLB mode on*/
        1               /* FREE mode of operation on*/
};

使用特权

评论回复
板凳
zhangmangui| | 2015-3-5 23:12 | 只看该作者
你参考一下 里面有没有相关例程
C5000系列资料总结

AIC23的相关操作有没有问题?

使用特权

评论回复
地板
lishong|  楼主 | 2015-3-6 10:14 | 只看该作者
我不是读AIC23,读iic接口的EEPROM。我想不通的是为什么读数据的时候SCL只有9个脉冲。这样的话没有SCL信号数据怎么能读到。

使用特权

评论回复
5
lishong|  楼主 | 2015-3-6 10:20 | 只看该作者
本帖最后由 lishong 于 2015-3-6 10:24 编辑


使用特权

评论回复
6
lishong|  楼主 | 2015-3-6 10:26 | 只看该作者
发送完地址0x70后,为什么后面没有了scl脉冲信号了?没有scl信号,sda当然也就不会有数据过来了。那为什么scl信号没有了呢?

使用特权

评论回复
7
lishong|  楼主 | 2015-3-6 10:52 | 只看该作者
应该是SLAVE返回的no ack信号导致后面没有SCL信号的。正常应该返回ack信号,我再查查

使用特权

评论回复
8
lishong|  楼主 | 2015-3-6 16:33 | 只看该作者
本帖最后由 lishong 于 2015-3-6 16:37 编辑

今天反复测试了,还是没找到问题。如果加上总线检测,则会函数返回提示为总线忙,直接就写地址的时候,只有start信号,地址都不能写了。count=I2C_read(iicBuf,3,1,0x70,1,30000,1);----返回为1.硬件电路上没发现什么问题,简单的电路连接,目前IIC总线上就只挂了一IIC设备(其他IIC设备还没焊接),sda,scl都有接上拉。EEPROM跟换过也没效果。搞不懂啥问题的了。

使用特权

评论回复
9
vivilzb1985| | 2015-3-7 17:40 | 只看该作者
采用I2C总线的,需要注意SCK信号的。

使用特权

评论回复
10
lishong|  楼主 | 2015-3-7 19:15 | 只看该作者
本帖最后由 lishong 于 2015-3-7 19:16 编辑

好奇怪的问题了。原来是发送的地址数据与实际波形就不一致!写的时候,我发送的地址是0x70,而从波形上读出的地址是0xe0(R/W = 0);读的时候应该是0X71,而实际波形上读出的是0xe1(R/W = 1).我试了发送写地址位0x50,从波形上读出的地址是0xa0.为什么会这样?

使用特权

评论回复
11
lishong|  楼主 | 2015-3-7 19:37 | 只看该作者
在这里找到答案了,原来如此。

使用特权

评论回复
12
shenmu2012| | 2015-3-8 15:38 | 只看该作者
这个检查下硬件连接啥的,以及相关的I2C寄存器的。

使用特权

评论回复
13
firstblood| | 2015-3-9 21:50 | 只看该作者
采用示波器的测试检查下的吧。

使用特权

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

本版积分规则

49

主题

137

帖子

3

粉丝