兴睿康-林生 发表于 2024-9-4 10:40:12

8G1K08-36I-SOP8 I2C 读写外设slave 设备 失败问题

本帖最后由 DebugLab 于 2024-9-4 11:05 编辑

请教一下,目前使用8G-STC8H-LIB-DEMO-CODE-20240429独立程序 里的 “18-I2C主机模式访问AT24C02程序” 做基础,修改为 访问其他I2C slave设备,
修改了 I2C 地址,也修改的对应的 端口号,但是运行程序的时候,卡在I2C_ReadNbyte 函数,不能往下进行! I2C使用的是 MCU 的 第 7 和 第 8脚位(P3.2 和 P3.3)
I2C_config 里面也选用了这两个脚位 I2C_SW(I2C_P33_P32); 大概是什么问题导致 主程序不能执行下去!





DebugLab 发表于 2024-9-4 11:10:33

8G1K08A硬件I2C测试正常:
#define         SCL                P32
#define         SDA                P33
bit I2C_Busy;

void I2C_Start(void)
{
        I2C_Busy=1;
        I2CMSCR=0x81;
        while(I2C_Busy);
}

void I2C_SendData(unsigned char dat)
{
        I2CTXD=dat;
        I2C_Busy=1;
        I2CMSCR=0x82;
        while(I2C_Busy);
}

void I2C_RecvACK(void)
{
        I2C_Busy=1;
        I2CMSCR=0x83;
        while(I2C_Busy);
}

//unsigned char I2C_RecvData(void)
//{
//        I2C_Busy=1;
//        I2CMSCR=0x84;
//        while(I2C_Busy);
//        return I2CRXD;
//}

//void I2C_SendACK(void)
//{
//        I2CMSST=0x00;
//        I2C_Busy=1;
//        I2CMSCR=0x85;
//        while(I2C_Busy);
//}

//void I2C_SendNAK(void)
//{
//        I2CMSST=0x01;
//        I2C_Busy=1;
//        I2CMSCR=0x85;
//        while(I2C_Busy);
//}

void I2C_Stop(void)
{
        I2C_Busy=1;
        I2CMSCR=0x86;
        while(I2C_Busy);
}

void Init(void)
{
        P_SW2|=EAXFR;
        P3M0=0x00;
        P3M1=0x00;
        P5M0=0x00;
        P5M1=0x00;
        P3PU=0x0c;
        I2CCFG=0xC1;        //921.6K@11.0592M
        I2CMSCR=EMSI;
        I2CMSST=0x00;
        EA=1;
}

void I2C_Isr(void) interrupt 24
{
        if(I2CMSST&MSIF)
        {
                I2CMSST&=~MSIF;
                I2C_Busy=0;
        }
}

hsrzq 发表于 2024-9-4 19:46:27

你的其它IIC设备是啥呢?它的协议是否支持I2C_ReadNbyte这个行为?

邮箱 发表于 2024-9-4 22:04:12

硬件i2c没有使能会卡的

邮箱 发表于 2024-9-4 22:08:59

初始化i2c后,打印i2c的寄存器看有没有正确写入初始化数据

乘风飞扬 发表于 2024-9-5 10:27:57

请问P3.2 和 P3.3的IO口模式初始化了吗?
默认是高阻输入,没有初始化不能通信。

兴睿康-林生 发表于 2024-9-5 17:23:39

附图是我的代码,应该是初始化过了吧

乘风飞扬 发表于 2024-9-5 18:48:33

再查一下你修改过的程序,看看有没有哪些地方修改了P_SW2寄存器,例如调用EAXRAM,误关闭了扩展寄存器访问使能。
I2C寄存器基本上都是扩展寄存器,如果关闭了扩展寄存器访问使能,就会导致无法正常读写I2C寄存器。

兴睿康-林生 发表于 2024-9-5 22:23:55



整个project,只有定义 EAXRAM, 没有其他地方调用!

兴睿康-林生 发表于 2024-9-5 22:26:46

本帖最后由 兴睿康-林生 于 2024-9-5 22:28 编辑

现在是要用MCU I2C主模式,访问,读写 外部其他芯片的I2C 寄存器,不是读写MCU 寄存器哦
是不是I2C_ReadNbyte 这个函数,只能读取eeprom ,连续N个 data, 不能读取其他芯片 寄存器,先写寄存器地址,后读取data?
页: [1] 2
查看完整版本: 8G1K08-36I-SOP8 I2C 读写外设slave 设备 失败问题