How to clear SMBALERT on the LTC4015 via I2C

We have C/C++ I2C code running on the Raspberry Pi that works well with the LTC4015 operating at I2C device address 0x68. We can read and write many LTC4015 register values to configure the LTC4015 and monitor battery charging and discharging.

Now we are exploring SMBALERT. We can enable SMBALERT via I2C for a couple of experimental alerts EN_CC_CV_CHARGE_ALERT and EN_CHARGER_SUSPENDED_ALERT, and the SMBALERT pin on the LTC4015 DC2039A dev board is asserted low as we would expect.

We could use some guidance to better understand the SMBALERT ARA (Alert Response Address) and how to clear SMBALERT.

Should the host (Raspberry Pi running Linux) try to read or write I2C device address 0x19 to clear SMBALERT? The LTC4015 datasheet and other web references seem to indicate that the LTC4015 and other SMBALERT compliant devices sharing the SMBALERT line should all respond to that ARA.

But on the Raspberry Pi, with SMBALERT asserted, the i2cset and i2cget commands fail when attempting to write or read I2C device address 0x19, as shown:

  user@rpi:~$ sudo i2cset -y 1 0x19 0
  Error: Write failed

  user@rpi:~$ sudo strace i2cset -y 1 0x19 0
  <snip>
  openat(AT_FDCWD, "/dev/i2c-1", O_RDWR) = 3
  ioctl(3, _IOC(_IOC_NONE, 0x7, 0x5, 0), 0xbeab5614) = 0
  ioctl(3, _IOC(_IOC_NONE, 0x7, 0x3, 0), 0x19) = 0
  ioctl(3, _IOC(_IOC_NONE, 0x7, 0x20, 0), 0xbeab55b0) = -1 EREMOTEIO (Remote I/O error)
  write(2, "Error: Write failed\n", 20Error: Write failed
  ) = 20
  close(3) = 0
  exit_group(1) = ?
  +++ exited with 1 +++

  user@rpi:~$ sudo strace i2cget -y 1 0x19
  <snip>
  openat(AT_FDCWD, "/dev/i2c-1", O_RDWR) = 3
  ioctl(3, _IOC(_IOC_NONE, 0x7, 0x5, 0), 0xbe99f634) = 0
  ioctl(3, _IOC(_IOC_NONE, 0x7, 0x3, 0), 0x19) = 0
  ioctl(3, _IOC(_IOC_NONE, 0x7, 0x20, 0), 0xbe99f5c8) = -1 EREMOTEIO (Remote I/O error)
  close(3) = 0
  write(2, "Error: Read failed\n", 19Error: Read failed
  ) = 19
  exit_group(2) = ?
  +++ exited with 2 +++

We would appreciate any guidance how to clear SMBALERT via I2C, particularly if you know how to invoke that on the Raspberry Pi (or other Linux) using the i2cset and i2cget utilities.

Thanks!

Jim

Parents Reply Children
No Data