I2C 通讯问题

       最近芯片缺货得严重,我们之前用的一款触摸芯片供货出了问题。供应商说可以用另外一款芯片替代,因为工艺不一样供货不成问题,但是需要修改程序。在和供应商调试的过程中发现我的i2c出了问题,但是之前一直没事。

       通过对通讯波形的对比发现,和新款芯片通讯时少了一个CLK。有时候这个CLK的地方变得很窄。思来想去应该是我的软件出了问题,于是把通讯速率放低。这时通讯正常了,CLK数量没有少。但是总有一个CLK变窄了。和供应商的技术沟通了才知道,触摸芯片在通讯一个字节之后会处理忙状态。在这个状态下它会把SCLK拉低,导致主机不能拉高。所以波形上看到有个别SCLK丢失或者变窄。

      供应商的技术还是很有经验的。技术 给出的方案是主机在拉高SCLK后等等SCLK变高。

      一直以来没有太留意这些细节。网络上的资料也是没有这一部分的内容。一般情况下不会出问题,只是代码的容错性不是很好。

 

修改的代码:

//i2c.h
//============================================================================
#define SetI2CSCK()	    GROUP_OF_PIN_I2C_SCLK->ODR |= (unsigned char)(PIN_I2C_SCLK);\
                        WaiteI2CSClkHigh();

#define GetI2CSCK()     (GROUP_OF_PIN_I2C_SCLK->IDR & (unsigned char)(PIN_I2C_SCLK))

//i2c.c
//============================================================================
BOOL WaiteI2CSClkHigh(void)
{
    unsigned int t = 500;
    while(--t)
    {
        if(0 != GetI2CSCK())
            return true;
    }
    return false;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值