现象在i2c_write_byte

2个职位/ 0个新职位
最后发表
zhangxw211
离线
最后看到:5年2个月前
加入:15 2015-04-14
现象在i2c_write_byte

在函数i2c_eeprom_write_byte中,它首先等待eeprom就绪。在i2c_wait_until_eeprom_ready ();它重复,如果不是ACK。但是,它只在i2c数据总线上发送0x08而不是设备地址。车上不应该有AKC。然后它会在这里无限循环。

当我进入SEND_I2C_COMMAND(0x08)时,运行按钮是灰色的,似乎cpu停止了。然后我点击停止按钮,指针仍然在SEND_I2C_COMMAND。

有人知道如何解决这个问题吗?

Void i2c_eeprom_write_byte(uint32_t address, uint8_t wr_data)

i2c_wait_until_eeprom_ready ();
i2c_send_address(地址);

WAIT_WHILE_I2C_FIFO_IS_FULL ();//如果I2C Tx FIFO是满的,等待
SEND_I2C_COMMAND (wr_data & 0 xff);//发送写数据
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待直到Tx FIFO为空

WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动

空白i2c_wait_until_eeprom_ready(空白)

uint16_t abort_SR_Status;// TX终止源寄存器
//轮询直到EEPROM ACK检测忙周期
{做
SEND_I2C_COMMAND (();//创建一个虚拟访问
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待直到Tx FIFO为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动
abort_SR_Status = GetWord16 (I2C_TX_ABRT_SOURCE_REG);//读取Tx终止源寄存器
GetWord16 (I2C_CLR_TX_ABRT_REG);//清除Tx终止标志
} while((abort_SR_Status & abt_7b_addr_noack) != 0);//如果没有ACK则重复

关键词:
设备:
kenneth.er
离线
最后看到:4年9个月前
加入:2015-09-03 15:31
你好,

你好,

SEND_I2C_COMMAND()简单地写入DA14580寄存器,因此它不应该无缘无故地在该行停止。也许你想再检查一下硬件连接?

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