关于i2c写入字节的问题

2个职位/0个新职位
最后一篇文章
张XW211
离线
最后一次见到:5年2个月前
已加入:2015-04-14 08:15
关于i2c写入字节的问题

在i2c\ eeprom\写入\字节功能中,它首先等待eeprom就绪。在i2c中,等待,直到eeprom就绪;如果没有确认就重复。但是,它只是在i2c数据总线上发送0x08,而不是设备地址。公共汽车上不应该有AKC。然后它会在这里无限循环。

当我进入SEND_I2C_COMMAND(0x08)时,run按钮是灰色的,似乎cpu已经停止了。然后我点击停止按钮,指针仍然在SEND\ ui2c\ u命令。

有人知道怎么解决这个问题吗?

无效i2c\ eeprom\写入字节(uint32\ t地址,uint8\ t wr\ U数据)
{
i2c_等待_直到_eeprom_就绪();
i2c\发送\地址(address);

等待_I2C _FIFO _已满();//如果I2C Tx FIFO已满,请等待
发送I2C命令(wr_data&0xFF);//发送写入数据
等待_I2C _FIFO _为空();//等待Tx FIFO为空

等待_,直到_NO _MASTER _ACTIVITY();//等到没有主活动
}

void i2c等待eeprom就绪(void)
{
uint16 \u t中止\u SR \u状态;//TX中止源寄存器
//轮询,直到EEPROM确认,以检测繁忙时段
做{
发送I2C命令(0x08);//进行虚拟访问
等待_I2C _FIFO _为空();//等待Tx FIFO为空
等待_,直到_NO _MASTER _ACTIVITY();//等到没有主活动
abort_SR_Status=GetWord16(I2C_TX_ABRT_SOURCE_REG);//读取Tx中止源寄存器
GetWord16(I2C_CLR_TX_ABRT_REG);//清除发送中止标志
}while((abort \u SR \u Status&ABRT \u 7B \u ADDR \u NOACK)!=0 ); // 如果没有确认,则重复
}

关键词:
设备:
肯尼思·奥尔
离线
最后一次见到:4年9个月前
已加入:2015-09-03 15:31
你好,

你好,

SEND_I2C_COMMAND()只是写入DA14580寄存器,所以它不应该无缘无故地停在那一行。也许你想再检查一下你的硬件连接?

同样在SEND_I2C_COMMAND()上。如果执行正确,它将发送从属地址和数据(0x08)。代码是正确的,所以我的建议和以前一样。检查DA14580芯片的硬件连接以及与EEPROM的连接。如果可能,在示波器上观察I2C总线。
祝你好运。