Issue initializing three i2c devices on voxl-px4
-
Hi,
I'm working on a voxl2 with sdk 1.4.1 and I need to handle three i2c devices in voxl-px4. The devices are the following:- ina231 on bus 2 with device id 0x44
- vl53l1x on bus 4 with device id 0x29
- a second distance sensor on bus 4 with device id 0x77
Each of the device is handled by a px4 module, initialized in voxl-px4-start. Until I start only two i2c devices everything works fine however the third one always fails at this line "_i2c_fd = _config_i2c_bus(get_device_bus(), get_device_address(), _frequency);" of i2c.cpp.
Note that the order of initialization matters, for example if I initialize the devices in the order 0x44, 0x29, 0x77 the device 0x77 will fail. If the order is 0x29, 0x77, 0x44 would be the 0x44 device to fail.This is how the three modules are initialized in the voxl-px4-start script
qshell vl53l1x start -X -b 4 -R 0 #range finder facing forward
qshell finder_i2c start -X -b 4 -M 0 #custom module that handles the rangefinder facing downwards
if [ "$POWER_MANAGER" == "VOXLPM" ]; then
# APM power monitor
qshell voxlpm start -X -b 2
fiIn this case the voxlpm fails to initialize with the following error log
INFO [qshell] Send cmd: 'voxlpm start -X -b 2'
INFO [muorb] SLPI: Marking DeviceNode(qshell_req) as advertised in process_remote_topic
INFO [muorb] SLPI: qshell gotten: voxlpm start -X -b 2
INFO [muorb] SLPI: arg0 = 'voxlpm'
INFO [muorb] SLPI: arg1 = 'start'
INFO [muorb] SLPI: arg2 = '-X'
INFO [muorb] SLPI: arg3 = '-b'
INFO [muorb] SLPI: arg4 = '2'
INFO [muorb] SLPI: *** I2C Device ID 0xd24411 13779985
INFO [muorb] SLPI: Initializing VOXLPM on channel 0
INFO [muorb] SLPI: Set up I2C bus mutex for bus 2
ERROR [muorb] SLPI: i2c init failed
INFO [muorb] SLPI: PX4_qshell: no instance started (no device on bus?)
ERROR [muorb] SLPI: Failed to execute command: voxlpm start -X -b 2
INFO [qshell] cmd returned with: -1
INFO [qshell] qshell return value timestamp: 356875512, local time: 356879115
ERROR [qshell] Command failed -
@Riccardo Make sure that the 2 devices sharing bus 4 have the same i2c frequency.