大家好、我需要一些帮助。 我在主机控制器 AT90CAN128芯片上遇到 I2C 通信错误。
当我尝试从 BQ76940接收 ACK 脉冲时、我会得到奇怪的脉冲电平。
这里是我的代码 、它是 osc 波形的图片。
字节数据= 0;
TWCR =(1<<TWINT)|(1<TWSTA)|(1<TWEN);
while (!(TWCR &(1<<TWINT)));
while ((TWSR & 0xf8)!= 0x08);
//------------------ ------------ ------------ ----
TWDR = 0x10;
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
//while ((TWSR & 0xf8)!= 0x18);
//------------------ ------------ ------------ ----
延迟(10);
TWDR = reg_addr;
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
//while ((TWSR & 0xf8)=0x28);
//------------------ ------------ ------------ ----
TWCR =(1<<TWINT)|(1<TWSTA)|(1<TWEN);
while (!(TWCR &(1<<TWINT)));
//while ((TWSR & 0xf8)!= 0x10);
//------------------ ------------ ------------ ----
TWDR = 0x11;
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
PORTA = TWSR;
//------------------ ------------ ------------ ----
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
PORTA = TWSR;
延迟(10);
Data=TWDR;
//------------------ ------------ ------------ ----
TWCR =(1<<TWINT)|(1<TWSTO)|(1<TWEN);
返回数据;
->>上面的代码生成此波形

字节数据= 0;
TWCR =(1<<TWINT)|(1<TWSTA)|(1<TWEN);
while (!(TWCR &(1<<TWINT)));
while ((TWSR & 0xf8)!= 0x08);
//------------------ ------------ ------------ ----
TWDR = 0xF0;
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
//while ((TWSR & 0xf8)!= 0x18);
//------------------ ------------ ------------ ----
延迟(10);
TWDR = reg_addr;
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
//while ((TWSR & 0xf8)=0x28);
//------------------ ------------ ------------ ----
TWCR =(1<<TWINT)|(1<TWSTA)|(1<TWEN);
while (!(TWCR &(1<<TWINT)));
//while ((TWSR & 0xf8)!= 0x10);
//------------------ ------------ ------------ ----
TWDR = 0xF1;
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
PORTA = TWSR;
//------------------ ------------ ------------ ----
TWCR =(1<<TWINT)|(1<twen);
while (!(TWCR &(1<<TWINT)));
PORTA = TWSR;
延迟(10);
Data=TWDR;
//------------------ ------------ ------------ ----
TWCR =(1<<TWINT)|(1<TWSTO)|(1<TWEN);
返回数据;
->>此代码具有错误的用于欺骗 NACK 信号的斜线地址。

BQ76940发送奇怪的 ACK 脉冲电平(位:0)、但 NACK 脉冲电平是正常的。
如何解决此问题?