主题中讨论的其他器件: TPS25751
工具/软件:
您好:
遗憾的是、在为电路开发软件的过程中、我们遇到了一个问题、即无法从 BQ25756逆变器中读取 ADC 寄存器的值。
我们担心这可能与我们遇到的另一个问题有关、即使用 I2Cw 写入寄存器时出现问题。
类似于 e2e.ti.com/.../tps25750-4cc-i2cw-command-problem-with-missing-data 帖子
我们必须在事务有效载荷值中的字节数添加"1"。
我们通过4CC 设置要发送的数据、如下所示:
serial.println ("开始传输");
Wire.beginTransmission(TPS25751_ADDR);
wire.write (0x09);// DATA1寄存器
WIRE.WRITE (0x40);//保留=寄存器长度
Wire.write (BQ25756 _ADDR);//目标 I2C 地址
Wire.write (0x02);//事务有效载荷中的字节数+ 1
电线。 写入(BQ Channel_Control_Reg);//要写入的字节数
wire.write (value);//数据
wire.endTransmission();
这段代码适用于0x2C 寄存器(8.5.32 REG0x2C_ADC_2B Channel_Control)、遗憾的是、给定的方案似乎不适用于0x2B 寄存器(REG0x2B_ADC_Control 寄存器)。
尽管设置并将其值发送到0x94、但在读取时、它会继续具有值0x68。
我们将数据写入寄存器的整个函数的工作原理如下:
我们使用上面给出的数据设置0x09寄存器(DATA1)->我们在0x08寄存器(CMD1)上设置"I2Cw"命令->我们检索 CMD1寄存器的值以确定何时执行代码(4x 0x00)
然后、我们会检索寄存器2B 和2C 的值、以检查其写入的正确性。
同样、就像寄存器2C 的情况一样、我们设法获得 A 的值、它确实与我们尝试写入的值不同(2)、但这是保留位内的变化、因此它不会影响程序的操作、因此对于寄存器2B、很遗憾、尽管尝试写入值94、但得到的值为68。
我们认为、这会导致 ADC 读取在输出中没有任何响应(读取寄存器时以值0打印64个字节)、这对我们至关重要。
例如、让我将序列中的几行组合在一起:
======= BQ25756 I2Cr 测试-读取输出电压=====
0x09设置
设置0x08
轮询 CMD1直到缓冲区为空-迭代:0
读数0x08
缓冲区中的[CMD1]字节:4 |数据:0x49 0x32 0x43 0x72
轮询 CMD1直到缓冲区为空-迭代:1.
读数0x08
缓冲区中的[CMD1]字节:4 |数据:0x0 0x0 0x0 0x0 0x0 0x0 0x0
命令发送成功!
打印输出0x09 - DATA1
[DATA1] 64字节:0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
电压:0.00 V
==============================
[读取 ADC 通道控制寄存器]
0x09设置
设置0x08
轮询 CMD1直到缓冲区为空-迭代:0
读数0x08
缓冲区中的[CMD1]字节:4 |数据:0x49 0x32 0x43 0x72
轮询 CMD1直到缓冲区为空-迭代:1.
读数0x08
缓冲区中的[CMD1]字节:4 |数据:0x0 0x0 0x0 0x0 0x0 0x0 0x0
命令发送成功!
打印输出0x09 - DATA1
[DATA1] 64字节:0x0 0x68 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
==============================
[读取 ADC 控制寄存器]
0x09设置
设置0x08
轮询 CMD1、直到缓冲区为空-。 迭代:0
读数0x08
缓冲区中的[CMD1]字节:4 |数据:0x49 0x32 0x43 0x72
轮询 CMD1直到缓冲区为空-迭代:1.
读数0x08
缓冲区中的[CMD1]字节:4 |数据:0x0 0x0 0x0 0x0 0x0 0x0 0x0
命令发送成功!
打印0x09 - Data1 x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
ADC 通道控制寄存器:10.
此致、
Adam Czerwiec