通过 coreboot I²C DesignWare 从 EEPROM m24lc128 读取字节

问题描述

尝试从 EEPROM m24lc128 (bus=3,slave_addr=0x50) 读取,但失败并显示 I2C receive timeoutI2C 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 (将#修改为@)