问题描述
尝试从 EEPROM m24lc128 (bus=3,slave_addr=0x50) 读取,但失败并显示 I2C receive timeout
和 I2C read failed: bus 3 addr 0x50
。
尝试在 coreboot 中修改 src/include/device/i2c_simple.h 如下,
static inline int eeprom_read_bytes(unsigned int bus,uint8_t slave,uint8_t reg,uint8_t *data,int len)
{
struct i2c_msg seg[2];
uint8_t buff_addr[2];
buff_addr[0] = 0;
buff_addr[1] = reg;
printk(BIOS_INFO,"buff_addr[0]=0x%x buff_addr[1]=0x%x\n",buff_addr[0],buff_addr[1]);
seg[0].flags = 0;
seg[0].slave = slave;
seg[0].buf = (uint8_t*)&buff_addr;
seg[0].len = sizeof(uint16_t);
seg[1].flags = I2C_M_RD;
seg[1].slave = slave;
seg[1].buf = data;
seg[1].len = len;
return i2c_transfer(bus,seg,ARRAY_SIZE(seg));
}
I²C DesignWare init 调用在此之前成功,任何提示将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)