有人用过24C02和24C512共用一条总线吗

2019-07-21 04:40发布

24c20的地址是0xA0,24C512的地址是0xA4,有没有人这样用过,单片单独读写都是可以的,虽然地址不同两片连起来存储的数据会乱,不知道是我程序问题还是不可以这样串起来?
用的模拟iic,原子的例程修改的
[mw_shl_code=c,true]#define Package_Base_Addr 512
void Write_24C512_Byte(unsigned int WriteAddr,unsigned char DataToWrite)
{
WriteAddr= WriteAddr+ Package_Base_Addr;
          I2C_Start();
                I2C_SendByte(0xA4);            //发送写命令
                I2C_WaitAck();
                I2C_SendByte(WriteAddr>>8);//发送高地址
    I2C_WaitAck();
    I2C_SendByte(WriteAddr%256);   //发送低地址
    I2C_WaitAck();
    I2C_SendByte(DataToWrite);     //发送字节
    I2C_WaitAck();
    I2C_Stop();//产生一个停止条件
    delay_ms(5);
}

unsigned char Read_24C512_Byte (unsigned int ReadAddr)
{
          u8 temp=0;
ReadAddr = ReadAddr+ Package_Base_Addr;
    I2C_Start();
                I2C_SendByte(0xA4);           //发送写命令
                I2C_WaitAck();
                I2C_SendByte(ReadAddr>>8);//发送高地址
    //I2C_WaitAck();
    I2C_SendByte(ReadAddr%256);   //发送低地址
    I2C_WaitAck();
    I2C_Start();
    I2C_SendByte(0xA5);           //进入接收模式
    I2C_WaitAck();
    temp=I2C_ReceiveByte();
                I2C_NoAck();
    I2C_Stop();//产生一个停止条件
    return temp;
}[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
Jochen
1楼-- · 2019-07-21 10:39
不同系列分开设计了
Jochen
2楼-- · 2019-07-21 12:08
24c02的是A0 A1 A2,24C512的只有A0 A1,是不是这方面的问题?
loudianxin
3楼-- · 2019-07-21 16:36
如果真的会导致数据变乱,可以使能保护脚
Jochen
4楼-- · 2019-07-21 17:13
 精彩回答 2  元偷偷看……
mack13013
5楼-- · 2019-07-21 17:14
楼主放弃吧。现在很多24系列的iic存储器,设计的并不严格,有的地址脚改做他用了(我碰到过的,地址脚干脆不起作用,或者挪做写保护),除非你能保证24系列存储器参数比较严格,要不然估计是不行了。
Acuity
6楼-- · 2019-07-21 18:49
mack13013 发表于 2019-3-2 13:06
楼主放弃吧。现在很多24系列的iic存储器,设计的并不严格,有的地址脚改做他用了(我碰到过的,地址脚干脆 ...

不是设计不严格,一开始的24系列EEPROM是1字节寻址,那么范围是0——255,那么大于256字节的EEPROM为了兼容老设计就“占用”了地址线,每超过256字节则占用一根地址线,24c04——24c16遵循这样的规则,芯片手册有明确说明。24c32以上是2字节寻址,不再“占用”地址线!

一周热门 更多>