From 74303a79e195083144c9d63fd2346b5828015a31 Mon Sep 17 00:00:00 2001 From: Cyril C Date: Thu, 15 Feb 2024 19:24:40 +0100 Subject: [PATCH] drivers/batt_smbus: fix BQ40Z80 timeout problem (#22751) Co-authored-by: cyril.calvez --- src/drivers/batt_smbus/batt_smbus.cpp | 6 ++++++ src/drivers/batt_smbus/batt_smbus.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/drivers/batt_smbus/batt_smbus.cpp b/src/drivers/batt_smbus/batt_smbus.cpp index fa3b14edb8..913bbbe7b8 100644 --- a/src/drivers/batt_smbus/batt_smbus.cpp +++ b/src/drivers/batt_smbus/batt_smbus.cpp @@ -392,6 +392,12 @@ int BATT_SMBUS::get_startup_info() uint16_t state_of_health; ret |= _interface->read_word(BATT_SMBUS_STATE_OF_HEALTH, state_of_health); + /* ManufacturerAccess dummy command to init the ManufacturerBlockAccess routine + in the BQ40Zx0 and avoid timeout during LifetimeDataFlush. + test Sleep > 20 ms to give time to init the ManufacturerBlockAccess routine*/ + ret |= _interface->write_word(BATT_SMBUS_MANUFACTURER_ACCESS, BATT_SMBUS_DEVICE_TYPE); + px4_usleep(30_ms); + if (!ret) { _serial_number = serial_num; _batt_startup_capacity = (uint16_t)((float)remaining_cap * _c_mult); diff --git a/src/drivers/batt_smbus/batt_smbus.h b/src/drivers/batt_smbus/batt_smbus.h index 1915865c80..b2b1e0b702 100644 --- a/src/drivers/batt_smbus/batt_smbus.h +++ b/src/drivers/batt_smbus/batt_smbus.h @@ -107,6 +107,7 @@ using namespace time_literals; #define BATT_SMBUS_SECURITY_KEYS 0x0035 +#define BATT_SMBUS_DEVICE_TYPE 0x0001 #define BATT_SMBUS_LIFETIME_FLUSH 0x002E #define BATT_SMBUS_LIFETIME_BLOCK_ONE 0x0060 #define BATT_SMBUS_ENABLED_PROTECTIONS_A_ADDRESS 0x4938