神清气爽 发表于 2023-3-21 13:11:36

STC32G12K128 I2C需帮助

请教STC32G12K128    I2C的读写问题。程序使用数据手册例程。

硬件是铁电FM24C128,用模拟I2C能正常读写。但用系统I2C读写不能正常。读出数据都是FF(可能写也是错的)。为了排除FM24CL128问题,换成24c128问题同样。程序如下:
A0,A1,A2接地。

void Write_byte(uint addr,uchar dat)
{
      uchar i,j;
      i=addr/256;
    j=addr%256;
    Start();                              //发送起始命令
    SendData(0xa0);                         //发送设备地址+写命令
    RecvACK();
    SendData(i);                         //发送存储地址
    RecvACK();
    SendData(j);                         //发送存储地址
      RecvACK();
    SendData(dat);
    SendNAK();
      Stop();                                 //发送停止命令
}
uchar ReadNbyte(uint addr)
{
         uchar i,j;
      i=addr/256;
    j=addr%256;
    Start();                              //发送起始命令
    SendData(0xa0);                         //发送设备地址+写命令
    RecvACK();
    SendData(i);                         //发送存储地址
    RecvACK();
    SendData(j);                         //发送存储地址
    RecvACK();
    Start();                              //发送起始命令
    SendData(0xa1);                         //发送设备地址+读命令
    RecvACK();
      Stop();
    return i;                            //发送停止命令
}

一轮明月 发表于 2023-3-21 16:24:29

可参考STC32G实验箱例程包例子“28-I2C主机模式访问AT24C02程序”。用示波器测量I2C接口信号,确认发完数据后是否能收发ACK信号

神农鼎 发表于 2023-3-21 18:18:22

如外部没加10K上拉电阻,你要打开内部4K上拉电阻,最好将你原理图的PDF发上来

神清气爽 发表于 2023-3-21 18:30:14

神农鼎 发表于 2023-3-21 18:18
如外部没加10K上拉电阻,你要打开内部4K上拉电阻,最好将你原理图的PDF发上来 ...

两个口上都有10K上拉

神清气爽 发表于 2023-3-21 18:32:23

用的是屠龙刀实验板

zhp 发表于 2023-3-21 18:59:57

神清气爽 发表于 2023-3-21 18:32
用的是屠龙刀实验板

对于这种情况,你需要对设备返回的ACK信号进行判断一下
看看信号究竟是ACK还是NAK
如果是NAK,说明设备根本没有相应,读取的数据一定FF

建议最好用示波器或者LA抓一下波形看看

神清气爽 发表于 2023-11-12 13:14:18

内部上拉了4K电阻,并且两个口成开路输入就成功了。如果不是开路就不行。不知道你们是不是必须设成开路
页: [1]
查看完整版本: STC32G12K128 I2C需帮助