野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10186|回复: 2

用逻辑分析仪抓取到的I2C读取寄存器数据波形

[复制链接]
发表于 2019-2-28 08:05:57 | 显示全部楼层 |阅读模式
QQ截图20190228075804.jpg



读取到这样子的波形,请问我该判断是程序哪里出了问题呢?

程序如下:

void IIC_GPIO_Config(void)                       
{                                             
        GPIO_InitTypeDef GPIO_InitStructure;
        SD7218AS_I2C_GPIO_APBxClock_FUN(SD7218AS_I2C_GPIO_CLK,ENABLE);          
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(SD7218AS_I2C_SDA_PORT , &GPIO_InitStructure);
        GPIO_SetBits(SD7218AS_I2C_SDA_PORT ,GPIO_Pin_5|GPIO_Pin_6);
}

void IIC_Start(uchar a)

{        IIC_SDA=1;                  
        IIC_SCL=1;
        SDA_OUT();
        delay_us(400);
        IIC_SDA=0;
        delay_us(300);
        IIC_SCL=0;
        delay_us(300);}

}          




void IIC_Ack(uchar a)

{ IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=0;
        delay_us(200);
        IIC_SCL=1;
        delay_us(200);
        IIC_SCL=0;}

}


void IIC_Stop(uchar a)

{
        {IIC_SCL=0;
        IIC_SDA=0;
        SDA_OUT();
        delay_us(200);
        IIC_SCL=1;
        delay_us(200);               
        IIC_SDA=1;//       
        delay_us(200);

        }
}


}


u8 I2C_WaitToAck(uchar a)

        {
        SDA_IN();    // SDAéèÖÃÎaêäèë

        delay_us(10);
        IIC_SCL=1;
        delay_us(10);
        if(READ_SDA)
        {
                return 1;
        }
else
       
        {IIC_SCL=0;
        delay_us(10);
        return 0;  
} }
}



void IIC_NAck(uchar a)

        {IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=1;
        delay_us(200);
        IIC_SCL=0;
        delay_us(200);
        IIC_SCL=1;}
       


}












void I2C_SendByte(uchar txd,uchar a)      //  u8


        {IIC_SCL=0;
        SDA_OUT();             

    for(t=0;t<8;t++)
    {   
                if((txd&0x80)>0)
                        IIC_SDA=1;
                else
                        IIC_SDA=0;
                txd<<=1;        
               
                delay_us(200);
                IIC_SCL=1;
                delay_us(200);
                IIC_SCL=0;       
    }}         



}             





u8 IIC_Read_Byte(unsigned char ack,uchar a)

        {        SDA_IN();
    for(i=0;i<8;i++ )
        {
        IIC_SCL=0;
        delay_us(200);
                IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
                delay_us(200);
    }                                         
    if (!ack)
        IIC_NAck(0);
    else
        IIC_Ack(0);
    return receive;       

  }

  }





u8 ReadByte(uchar Reg_Addr )
{
  u32 data;
  IIC_Start(0);
  I2C_SendByte(0x54|0,0);
        I2C_WaitToAck(0);
        I2C_SendByte(Reg_Addr,0);
        I2C_WaitToAck(0);
        IIC_Start(0);
        I2C_SendByte(0x54|1,0);
        I2C_WaitToAck(0);
        data=IIC_Read_Byte(0,0);
        IIC_NAck(0);
        IIC_Stop(0);
  return data;
       
       
}





void delay_us(u32 i)   
{u32 temp;
        SysTick->LOAD=9*i;  
        SysTick->CTRL=0x01;   
        SysTick->VAL=0;     
  do
        {
          temp=SysTick->CTRL;   
       
        }
while((temp&0x01)&&(!(temp&(1<<16))));  
SysTick->CTRL=0;   
SysTick->VAL=0;      


}

附件是对应的芯片数据手册


OZ3710_DS_v1.1_182306.pdf

2 MB, 下载次数: 3

回复

使用道具 举报

发表于 2019-2-28 14:47:14 | 显示全部楼层
可以直接用野火例程里的模拟I2C驱动
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-28 16:00:11 | 显示全部楼层
巢易白 发表于 2019-2-28 14:47
可以直接用野火例程里的模拟I2C驱动

不兼容啊。。。。。。。。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-7 11:22 , Processed in 0.027868 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表