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; //发送停止命令
}
可参考STC32G实验箱例程包例子“28-I2C主机模式访问AT24C02程序”。用示波器测量I2C接口信号,确认发完数据后是否能收发ACK信号 如外部没加10K上拉电阻,你要打开内部4K上拉电阻,最好将你原理图的PDF发上来 神农鼎 发表于 2023-3-21 18:18
如外部没加10K上拉电阻,你要打开内部4K上拉电阻,最好将你原理图的PDF发上来 ...
两个口上都有10K上拉 用的是屠龙刀实验板 神清气爽 发表于 2023-3-21 18:32
用的是屠龙刀实验板
对于这种情况,你需要对设备返回的ACK信号进行判断一下
看看信号究竟是ACK还是NAK
如果是NAK,说明设备根本没有相应,读取的数据一定FF
建议最好用示波器或者LA抓一下波形看看 内部上拉了4K电阻,并且两个口成开路输入就成功了。如果不是开路就不行。不知道你们是不是必须设成开路
页:
[1]