申博公司优惠登入官网: [技术问答] 硬件I2C读EEPROM的问题

永利游戏开户直营
44|1
楼主
目前用IO模拟的方式读写EEPROM是正常的,申博公司优惠登入官网:说明硬件已经没问题了。但是硬件I2C读EEPROM有问题,写没问题。读的代码如下:
while (((I2Cx->STATUS_1.STATUS_1_Byte & 0x28) != I2C_STATUS_1_READY_MASK) && (timeout < I2C_READY_STATUS_TIMEOUT))
    {
        timeout ++;
    }
    if (timeout >= I2C_READY_STATUS_TIMEOUT)
    {
        errorStatus |= I2C_ERROR_START_NO_BUSY_FLAG;
    }

    errorStatus |= I2C_Start(I2Cx);
    errorStatus |= I2C_WriteOneByte(I2Cx, slaveAddr);
    if(addrbit == 16)
        errorStatus |= I2C_WriteOneByte(I2Cx, (addr >> 8));
    errorStatus |= I2C_WriteOneByte(I2Cx, (addr & 0xff));
    errorStatus |= I2C_Start(I2Cx);
    errorStatus |= I2C_WriteOneByte(I2Cx, slaveAddr | 0x01);
    while(len > 1 && (errorStatus == I2C_ERROR_NULL))
    {
        errorStatus |= I2C_ReadOneByte(I2Cx, pdata, I2C_SEND_ACK);
        pdata++;
        len--;
    }
    errorStatus |= I2C_ReadOneByte(I2Cx, pdata, I2C_SEND_NACK);
    errorStatus |= I2C_Stop(I2Cx);
    if(errorStatus == I2C_ERROR_NULL)
        return TRUE;
    else
    {
        Printf("I2C Read Fail:%x, len:%d\n", errorStatus, len);
        return FALSE;
    }


errorStatus没有错误,返回都是I2C_ERROR_NULL,读回来的数据错了一个字节。
然后我在errorStatus |= I2C_WriteOneByte(I2Cx, slaveAddr | 0x01);后面加一句空读就正常了。
errorStatus |= I2C_ReadOneByte(I2Cx, pdata, I2C_SEND_ACK);//dummy read?
这个是必须的吗?没看到文档有说明这部分的内容。
沙发
| 2019-11-8 17:57 | 只看该作者
IIC驱动代码里有一个专门的Restart函数,你可以用这个试试I2C_Restart
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
王者威尼斯人棋牌现金网 永利游戏开户直营 冠军彩票代理直营网 mg轮盘 高额德州扑克第六季04网上娱乐场
伯爵娱乐快速充值中心 葡京网址开户 挂机网赚平台 139777申博太阳城百家乐登入官网 电子游戏投注
bbin平台出租登入 竞彩篮球投注量分析 澳洲国际香港六合彩官方网 新葡京官方网址 u宝娱乐游戏
澳门永利娱乐官方网站 澳洲国际天津时时彩网址 www.tyc123.com 必胜博最新官网站 沙龙娃娃多少钱