IIC作为一种通信协议,由SCL和SDA构成,下面直接放干货:
1.所有的启动、终止、数据传输、应答、非应答,这些操作想要有效,前提是SCL是高电2频。简单的说,就是SCL高电平时才能传信号;
2.IIC数据传输有三种方式(个人总结):(1) 主机对从机发一字节的数据;(2)主机对从机读取一字节数据;(3)主机对从机读 / 写多字节数据;
以AT24C02芯片(从机)为例:
步骤如下:(1)启动---> 写从机地址(写 【0】)--> 从机应答(一段时间没有收到到则默认接收) --> 写从机的存储地址 --> 从机应答 --> 主机向从机写一字节数据 --> 从机应答 --> 终止;
(2)启动---> 写从机地址(写 【1】)--> 从机应答(一段时间没有收到到则默认接收) --> 写从机的存储地址 --> 从机应答 --> 主机从从机读一字节数据 --> 主机非应答 --> 终止;
第三个程序我借鉴了博客一位博主的:
uchar AT_Read(uchar add)
{
uchar dat;
IIC_Start;
IIC_Write(0xa0);
IIC_WaitAck();
IIC_Write(add);
IIC_WaitAck();
dat = IIC_Read();
IIC_SendAck(1);
return dat;
}
void AT_ReadStr(uchar *dat, uchar add, uchar num)
{
while(num)
{
dat = AT_Read(add);
dat++;
add++;
num--;
}
}