华芯微特开发论坛

 找回密码
 立即注册
搜索
热搜: SWM341 资料
查看: 1270|回复: 1

SWM19S的IIC程序中遇到的问题与解决,请教专家……

[复制链接]

4

主题

10

帖子

111

积分

注册会员

Rank: 2

积分
111
QQ
发表于 2024-2-23 16:24:08 | 显示全部楼层 |阅读模式
使用的板子是https://item.taobao.com/item.htm?ft=t&id=727695718084
IIC所使用的扩展IC是AW9523B。

原理图

原理图

我使用了库中的ExI2C.c

uint8_t I2C_Master_Transmit(I2C_TypeDef * i2c_x, uint8_t mAddr,uint8_t * dat, uint8_t datLen)
{
//        uint8_t ack,i;
//        for(i=0; i<datLen; i++)
//        {
//                ack = I2C_Write(i2c_x, *dat++);
//        }
//        return ack;

    uint8_t re = 0,i,ack;
    uint8_t * p;
    p = dat;
//    I2C_Stop(i2c_x);
    ack = I2C_Start(i2c_x, mAddr);  //(mAddr << 1) | 0);
    if(ack == 0)
    {
        I2C_Stop(i2c_x);
        return ++re;
    }
    for(i=0; i<datLen; i++)
    {
        ack = I2C_Write(i2c_x, *p++);
        ++re;
        if(ack == 0)
        {
            I2C_Stop(i2c_x);
            return re;
        }
    }
    I2C_Stop(i2c_x);
    return re;
}


上面的I2C_Stoop(i2c_x);必须要注掉。
还有一个什么问题我一下想不起来了。
搞好之后我的I2C工作就正常了。
是不是不同的IC的特点不同?
我想起来再来补充另一个问题。

回复

使用道具 举报

4

主题

10

帖子

111

积分

注册会员

Rank: 2

积分
111
QQ
 楼主| 发表于 2024-2-23 16:30:25 | 显示全部楼层
我想起来了,因为我的I2C线上挂了两片芯片。不知是芯片的问题还是厂家库的问题。我一直不能正常工作。有一次我用逻辑分析议单步调的过程中发现,波形与连续跑的不同,连续跑的不是正常的I2C波形。
因为我的程序在别的MCU上是使用过的。之前问过厂家FAE,可能我表达的问题也不清楚。最终没有解决。
最后我想到了,是不是不同的芯片之间发I2C信息要延时一下?
最后加了延时,一切正常了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|华芯微特开发论坛

GMT+8, 2025-1-10 06:30 , Processed in 0.046747 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表