ringhui 发表于 2024-9-29 09:46:52

AI8H库函数SOFT_I2C的部分异常

本帖最后由 DebugLab 于 2024-9-29 10:02 编辑

最近使用AI8H_1K28做了一些程序,发现STC8G_H_Soft_I2C.c在24M的时候使用SI2C_ReadNbyte可以正常读取到公司的24C02内存储的数据,当频率降低到6M的时候就会读出异常,经过验证发现程序I2C_ReadAbyte需要进行修改,具体修改方法如下:

源代码:
u8 I2C_ReadAbyte(void)          //read A byte from I2C
{
u8 i, dat;
i = 8;
SDA = 1;

do
{
    SCL = 1;
    I2C_Delay();
    dat <<= 1;

    if (SDA)   dat++;

    SCL= 0;
    I2C_Delay();
} while (--i);

return (dat);
}

修改后代码:

u8 I2C_ReadAbyte(void)          //read A byte from I2C
{
u8 i, dat;
i = 8;
SDA = 1;

do
{
    dat <<= 1;
    SCL = 1;
    I2C_Delay();

    if (SDA)   dat++;

    SCL= 0;
    I2C_Delay();
} while (--i);

return (dat);
}或者
u8 I2C_ReadAbyte(void)          //read A byte from I2C
{
u8 i, dat;
i = 8;
SDA = 1;

do
{

    SCL = 1;
    I2C_Delay();
    dat <<= 1;
    if (SDA)   dat++;

    SCL= 0;
    I2C_Delay();
} while (i--);

return (dat);
}


DebugLab 发表于 2024-9-29 10:04:12

用硬件I2C

乘风飞扬 发表于 2024-9-29 15:52:49

我将库函数例程包里面读写AT24C02的例子改成软件模拟I2C方式
主时钟改为6MHz、5.5296MHz测试都是正常的
你用附件例子试试看


页: [1]
查看完整版本: AI8H库函数SOFT_I2C的部分异常