ZHCAGA5 August   2026 BQ78702B , BQ78706 , BQ79718B-Q1 , BQ79731-Q1 , BQ79731B-Q1

 

  1.   1
  2.   摘要
  3. 1AFE和BJB的I2C功能介绍
  4. 2AFE和BJB的I2C硬件介绍
  5. 3I2C 通讯指令实操
    1. 3.1 EEPROM写操作
    2. 3.2 EEPROM读操作
      1. 3.2.1 读取任意寄存器地址的一个字节
      2. 3.2.2 连续读取任意地址多个字节
  6. 4总结
  7. 5参考文档

EEPROM写操作

案例1: 将设备ID为000的EEPROM地址范围0x0000~0x0004,分别写入0x00,0x01,0x02,0x03,0x04,0x05.

写指令有三部分组成:设备ID,寄存器起始地址,写入的数据。

 EEPROM 写指令协议 图 3-1 EEPROM 写指令协议

设备ID: TARGET ADDR

阅读EEPROM手册地址定义,绝大部分EEPROM地址定义如下:

设备类型固定为0b1010。设备地址由A2~A0的引脚状态决定。Bit0在写操作是0,读操作时1。

表 3-1 EEPROM 设备ID定义
Device Type Identifier Device Address Bits R/W̅
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
1 0 1 0 A2 A1 A0 R/W̅

以下图为例:

写操作时,ROM0地址0xA0 (0b1010 0000), ROM1地址0xA2 (0b1010 0010)

读操作时,ROM0地址0xA1 (0b1010 0001), ROM1地址0xA3 (0b1010 0011)

 EEPROM 地址示意图 图 3-2 EEPROM 地址示意图

寄存器地址的起始地址REG ADR H/L:

可以从任意地址开始写,连续写入字节不能超过一个Pape的长度。EEPROM知道起始地址后,每写入一个字节,地址会自动+1, 再写入下一个字节。但地址不会跨页累加,否则会产生地址回绕问题(Roll Over),写入的字节数超过了当前Page的剩余空间,地址计数器可能会自动 "回绕" 到该Page的开头,导致之前的数据被意外覆盖。

不同芯片的Page大小不一样,查看手册搜"byte page"可以找到Page大小。比如是32byte-page,那么从Page起始位置0x00开始写,最多可以连续写32字节。如果在Page结束位置0x1F开始写, 只能写一个字节。

 寄存器地址自动累加到Page底部自动回绕Page起始位置 图 3-3 寄存器地址自动累加到Page底部自动回绕Page起始位置

大量数据跨页写入时,需拆分成多条写指令。每条写指令需间隔5ms以上,这是EEPROM数据手册的要求: Self-Timed Write Cycle within 5 ms Maximum。这个时间用于EEPROM擦除、电荷泵加压,数据写入和验证的一套复杂内部流程。

下面是连续写入6个字节的指令


# 使能I2C,将GPIO0和GPIO1设置为SCL和SDA.
B0 03 0A 05 10 47
# I2C_WR_DATA写设备ID 0xA0 。I2C_CTRL写0x29,SEND-START-I2C_GO
B1 03 70 A0 29 E0 5B
# ADDH=00.  SEND-I2C_GO
B1 03 70 00 21 99 9D
# ADDL=00. SEND-I2C_GO
B1 03 70 00 21 99 9D
#写1~5个字节 
B1 03 70 00 21 99 9D
B1 03 70 01 21 98 0D
B1 03 70 02 21 98 FD
B1 03 70 03 21 99 6D
B1 03 70 04 21 9B 5D
# 写最后一个字节, SEND-STOP-I2C_GO
B1 03 70 05 25 9B 0E
# 读故障寄存器,检查I2C_LOW和I2C_NACK是否有故障。
A0 05 3D 00 22 B5

在TI 评估板上位机输入上面指令执行一次I2C通讯,下图是逻辑分析仪记录的通讯数据。

 I2C 发送A0的逻辑分析仪数据解析 图 3-4 I2C 发送A0的逻辑分析仪数据解析