我用例程里的模拟IIC程序去和我自己板子上的芯片(PCA9534a)通信,在发了从机地址后接收应答失败,每次都失败。下面写寄存器的一个程序,大家帮我找一下问题
#define    CA9534 0x70
#define Cmd_Config 0x03
#define Cmd_PolarInv 0x02
#define Cmd_OutPut 0x01
#define Cmd_InPut 0x00
void Write_config(u8 ConfigData)
{
u8 temp;
IIC_Start();
IIC_Send_Byte(PCA9534);
temp = IIC_Wait_Ack();
IIC_Send_Byte(Cmd_Config);
IIC_Wait_Ack();
IIC_Send_Byte(ConfigData);
IIC_Wait_Ack();
IIC_Stop();
}
还有在 IIC_Wait_Ack()函数中有一段程序不是非常明白
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;
return 0;
}
SDA设置为输入之后还能给SDA赋值呢,SDA线不是本来就上拉的吗?
我用示波器看了,SDA上从地址数据发送都是正确的,但就是没有收到应答。还有我从开发板连出来的的线可能有50cm-80cm长,这样会影响IIC通信吗?芯片供电 从地址都没问题的,难道是芯片坏了,但是芯片上电默认值还是正确的啊
以前只在LPC上用过IIC,模拟IIC还是第一次用呢
|