Hardware & OS:
Board: Jetson Orin Nano Developer Kit
JetPack Version: JetPack 6.2
External Hardware: LSM6DS3 IMU Breakout Board (3.3V logic) connected via SPI1 on the 40-pin header.
The Problem:
I am building a robotics project and trying to communicate with an LSM6DS3 IMU via SPI. However, reading the WHO_AM_I register continuously returns 0xFF.
After some hardware debugging, I suspect the Jetson’s default SPI pin drive strength is too weak to overcome the built-in pull-up resistors on the IMU breakout board. When I toggle a standard GPIO pin (Pin 31) HIGH using Jetson.GPIO and measure it with a multimeter, it only reaches ~1.6V instead of a clean 3.3V. I suspect the SPI Clock and CS pins are experiencing the same voltage drop, preventing the IMU from recognizing the signals and waking up from I2C mode.
Troubleshooting Steps Already Taken:
Verified Physical Wiring: SPI1_SCK (Pin 23), SPI1_MOSI (Pin 19), SPI1_MISO (Pin 21), SPI1_CS0 (Pin 24). Power is supplied via 3.3V (Pin 1) and GND (Pin 9).
Forced CS Low: Physically tied the IMU’s CS pin directly to a Jetson GND pin to permanently force SPI mode. Still received 0xFF.
Lowered SPI Frequency: Dropped the SPI clock speed in my C++ code from 1 MHz down to 100 kHz to allow more time for weak signals to rise/fall. No change.
My Questions for NVIDIA Support:
Is there a known issue with the Orin Nano’s 40-pin header not outputting a true 3.3V logic HIGH when interfacing with sensor breakout boards?
What is the recommended method to force the SPI pins to output a full 3.3V to overcome external pull-up resistors?
Thank you for your help