先看原理图
可以看到有一块at24c02(原理一样的)
内部组织32页 每一页8Byte 总共256Byte 即2Kbit
按字节寻址 说明地址范围0-255D
再看用户手册的这一页
A2A1A0就是看芯片引脚E3E2E1接的是高电平还是低电平
由此可知 写指令0xA0 读指令0xA1
看着用户手册的时序图 我们就可以写出写数据 读数据函数
uint8_t eeprom_read(uint8_t addr)
{
uint8_t dat;
I2CStart();
I2CSendByte(0xa0); //写地址指令
I2CWaitAck(); //等待应答
I2CSendByte(addr);
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1); //读数据指令
I2CWaitAck();
dat = I2CReceiveByte();
I2CWaitAck();
I2CStop();
return dat;
}
//rom里默认数据为255
void eeprom_write(uint8_t addr, uint8_t dat)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(addr);
I2CWaitAck();
I2CSendByte(dat);
I2CWaitAck();
I2CStop();
HAL_Delay(10); //连续写的时候 要加延迟 因为存储写速度远没有单片机运行速度快
}