微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > AD5311R用I2C读写无ACK

AD5311R用I2C读写无ACK

时间:10-02 整理:3721RD 点击:

调试了很久了,感觉要影响项目进度了,小女子先谢过大家了,实在快被这个给整疯了~~o(>_<)o ~~

MCU使用MSP430F2618,IO模拟I2C时序,4块芯片,3个都是正常的,其中有一块在写第一个字节(AD地址)后,SDA配置为输入,然后就直接拉高了,没有ACK信号,后面都是这样的,写失败,示波器抓图如下,画9的为第9个bit,本来应该在CLK下降沿才拉高的,可是现在是SDA一配置为输入就自动拉高了:

 

代码如下:

void I2C_Write(u8 data)
{
    u8 i;

    I2C_SDA_OUT;
    for(i=0; i<8; i++)
    {
        if (((data<<i)&0x80) == 0)
        {
            I2C_SDA_LOW;
        }
        else
        {
            I2C_SDA_HIGH;
        }
        I2C_DELAY_2US();
        //I2C_DELAY_2US();

        I2C_SCL_HIGH;
        I2C_DELAY_2US();
        I2C_DELAY_2US();

        I2C_SCL_LOW;
        I2C_DELAY_2US();
    }

    I2C_DELAY_3US();
    I2C_DELAY_3US();
    I2C_DELAY_3US();
    I2C_DELAY_3US();
    I2C_DELAY_3US();
}

u8 JudgeAck(void)
{
    u8 ack;

    I2C_SDA_IN;
    I2C_SCL_HIGH;
    I2C_DELAY_2US();

    if(P4IN & BIT0)
    {
        ack = fail;
    }
    else
    {
        ack = success;
    }

    I2C_SCL_LOW;
    I2C_DELAY_2US();

    I2C_SDA_OUT;
    return ack;
}

u8 DACWriteRegister(u8* dataBuf, u8 len) 
{
    u8 tmp[5] = {1,1,1,1,1};
   
    I2C_Init();
    I2C_Start();
    I2C_Write(AD5311R_ADDRESS_W);
    tmp[4] = JudgeAck();

    for(u8 i=0; i<len; i++)
    {
        I2C_Write(dataBuf[i]);
        tmp[i] = JudgeAck();
    }

    I2C_Stop();
    if ((tmp[0] == fail) ||(tmp[1] == fail) ||(tmp[2] == fail) ||(tmp[3] == fail))
        return fail;
    else
        return success;

 

有没有替代法试一下是不是芯片的问题

ASIC同事说他自己写了个程序在芯片上跑了下,说能正常读写,会有ACK。

所以现在很困惑 不知道为什么430 IO模拟I2C  写DAC时没有把SDA拉低,其他芯片都能正常读写,所以很困惑

先不要配置SDA_IN,SDA脚状态不变,用示波器看第9个CLK有没有ACK

这样的话 第9个CLK ,SDA一直为低电平

这样看不能确定是否是应答信号,能不能把第八个bit改为1,然后看地9个是否有拉低

我尝试了下读,第一个字节为写地址0x99,第二个字节读数据

上面说错了 读的话  第一个字节是0x99(地址+R(1)),后面是数据,这样的话我看不出来拉低了

上面我说错了,我尝试了下读,第一个字节为0x99,看不出来第9个CLK把SDA拉低了啊

用IO模拟I2C,要注意IO内部是否已经上拉了,如果已经上拉,那么I2C外部则不需要上拉电阻了。

现在的情况是5块板子只有这一块出现了问题。现在硬件设计外面接了10K的上拉电阻,如果IO在配置为输入时,不知道默认是上拉还是不上拉,我没有对此进行配置。

现在我在SDA IN时disable了内部上拉,波形和第一个图一样,无法拉下来。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top