Hello NXP Community,
I'm working on an i.MX8MP Phytech Evaluation Board running a Yocto-based Linux image,
and I'm trying to interface an RRC2040 SMBus smart battery pack over I²C.
Hardware setup:
- Board: Phytech i.MX8MP Evaluation Board
- Battery: RRC2040 (SMBus Smart Battery)
- I²C port: I²C3 (connected via external header)
- Expected SMBus address: 0x0B
- Command used for State of Charge (RSOC): 0x0D
Software environment:
- Yocto BSP for i.MX8MP (unmodified)
- Linux kernel with `/dev/i2c-3` device node available
- Using `i2cdetect -y 3` to probe the bus
Problem:
The battery at address 0x0B does not appear in the `i2cdetect` scan.
Other I²C devices on the board are detected correctly.
Even when running as root, 0x0B does not respond.
Test code:
I also tested with a minimal C++ program using `i2c-dev` and `i2c_smbus_read_word_data(fd, 0x0D)`:
cpp
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <cstring>
extern "C" { #include <i2c/smbus.h> }
int main() {
const char* dev = "/dev/i2c-3";
int fd = open(dev, O_RDWR);
ioctl(fd, I2C_SLAVE, 0x0B);
int res = i2c_smbus_read_word_data(fd, 0x0D); // RSOC command
std::cout << "Result: " << res << std::endl;
}

So i tried other i2c ports such as /dev/i2c-0 and /dev/i2c-1 but it did not work.
My hardware connection are correct.