I2C總線中文講解,詳盡通俗(一些概念):
http://wenku.baidu.com/link?url=n8aVmARYADcKwBAX5-3b9aml3nwPZh7k9R4FzREmGS8isp9UHCsQ47GiS4nZyerr4SwZLA9-4WGqWmuSEbDcx7yplDc39lGO5-8qBI9iPxq
i2c 相關知識總結(轉):
http://blog.csdn.net/hygzxf/article/details/17416725
I2C通訊的C語言程序:
http://blog.sina.com.cn/s/blog_6a4482d10100yp6j.html
i2c 編程接口:
http://blog.csdn.net/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;
}