I2C总线中文讲解,详尽通俗(一些概念):
http://wenku.baidu.com/link?url=n8aVmARYADcKwBAX5-3b9aml3nwPZh7k9R4FzREmGS8isp9UHCsQ47GiS4nZyerr4SwZLA9-4WGqWmuSEbDcx7yplDc39lGO5-8qBI9iPxq
i2c 相关知识总结(转):
http://blog.youkuaiyun.com/hygzxf/article/details/17416725
I2C通讯的C语言程序:
http://blog.sina.com.cn/s/blog_6a4482d10100yp6j.html
i2c 编程接口:
http://blog.youkuaiyun.com/g_salamander/article/details/8064627
//正点原子例子:
//在AT24CXX指定地址写入一个数据
//WriteAddr :写入数据的目的地址
//DataToWrite:要写入的数据
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16) //判断容量,不同容量写法不同
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址
}
else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //正点原子中:发送器件地址0XA0
}
IIC_Wait_Ack(); //等待应答信号
IIC_Send_Byte(WriteAddr%256); //发送低地址
IIC_Wait_Ack(); //等待应答信号
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack(); //等待应答信号
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
//在AT24CXX指定地址读出一个数据
//ReadAddr:开始读数的地址
//返回值 :读到的数据
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16) //芯片为大容量的时候
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//发送高地址
IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据
IIC_Wait_Ack(); //等待应答
IIC_Send_Byte(ReadAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}