本帖最后由 yici1988 于 2015-3-27 11:57 编辑
uint8_t at24cxx_ReadOneByte(uint16_t addr)
{
uint8_t temp;
i2c_Start();
if( EE_TYPE > AT24C016 ) //双字节地址
{
i2c_SendByte(0xA0);
i2c_WaitAck();
i2c_SendByte(addr>>8); //发送数据地址高位
}
else //单字节地址
{
i2c_SendByte(0xA0+((addr/256)<<1); //器件地址+数据地址
}
i2c_WaitAck();
i2c_SendByte(addr%256); //数据地址低8位地址
i2c_WaitAck();
i2c_Start();
i2c_SendByte(0xA1); //
i2c_WaitAck();
temp = i2c_ReadByte(0);//
i2c_Stop();
return temp;
}
假设以AT24C16为例,读的流程应该是
开始
发送器件地址i2c_SendByte(0xA0+((addr/256)<<1); //器件地址+数据地址,
为什么多加了一个数据地址
应该是响应完才发啊?
AT24C16的器件地址就是固定的A0 ?
AT24C08的器件地址就是固定A0 或者A8?
资料上说AT24C16的P0 P1 P2三位没有用作器件地址,用作data word address
,如果这3位接地,那么字地址的高三位就是固定的000?
-
一周热门 更多>