微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 求高手解答!mtk82平台I2C读写错误!

求高手解答!mtk82平台I2C读写错误!

时间:10-02 整理:3721RD 点击:
如标题。
I2C0上挂载多个从设备。目前有一个从设备读写错误。用示波器量后发现是noack错误。
noack错误目前想到的和尝试的方法:
1、slave addr错误,从i2c波形来看,addr是正确的。如下图对应 datasheet write addr 0x88


2、i2c的速率,降到100[size=13.63636302947998px]kbit/s也还是不行。(朋友提供的办法,原来是用默认的400)
各位还有什么办法。求解!

另外补充一下i2c的读写函数:
static int uc_i2c_rxdata(char *rxdata, int length, u8 cmd)
{
        int ret;
        u8 read_cmd[1] = {cmd};
        
        struct i2c_msg msgs[] = {
                /*{
                        .addr        = this_client->addr,
                        .flags        = 0,
                        .len        = 1,
                        .buf        = read_cmd,
                },*/
                {
                        .addr        = this_client->addr,
                        .flags        = I2C_M_RD,
                        .len        = length,
                        .buf        = rxdata,
                },
        };
        //printk("IIC addr = %x\n",this_client->addr);
        ret = i2c_transfer(this_client->adapter, msgs, 1);
        if (ret < 0)
                printk("msg %s i2c read error: %d\n", __func__, ret);
       
        return ret;
}

static int uc_i2c_wxdata(char *txdata, int length)
{
        int ret;
        struct i2c_msg msg[] = {
                {
                        .addr        = this_client->addr,
                        .flags        = 0,
                        .len        = length,
                        .buf        = txdata,
                },
        };
        ret = i2c_transfer(this_client->adapter, msg, 1);
        if (ret < 0)
                printk("%s i2c write error: %d\n", __func__, ret);
        return ret;
}
这两个函数应该没什么问题,很通用。贴出来,以免犯低级错误。
再者,82平台好像也没有72 89平台的一次传输8个字节的限制。

可以将别的料去掉,看看这独立一个行不行?
有可能是IIC上有器件没供电,拉死了。

解决了吗,我和你一样,也碰到这个问题

解决了。忘了回复,其实很简单,主要在于没有根本的理解。
从图像中就可以看出我上面的波形是有问题的。有个元器件个规格用错了,修改后是正常的方波。

上一篇:MTK智能机工具
下一篇:求套61的代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top