voxl_spi_init, failed to open /dev/spidev device: No such file or directory.
-
I confirmed that kernel from SDK 1.1.1 does not have the spi mapped. So i tried the kernel from SDK 1.0.0 and it does. In this case my board has SDK 1.1.1 installed, but i am booting into kernel from SDK 1.0.0.
voxl2/builds/voxl2-mini_SDK_1.0.0/system-image$ adb reboot bootloader voxl2/builds/voxl2-mini_SDK_1.0.0/system-image$ fastboot boot qti-ubuntu-robotics-image-m0104-boot.img Sending 'boot.img' (17552 KB) OKAY [ 0.508s] Booting OKAY [ 0.034s] Finished. Total time: 0.573s ... adb shell system-image: 1.7.1-M0104-14.1a-perf-nightly-20231025 kernel: #1 SMP PREEMPT Fri May 19 22:53:15 UTC 2023 4.19.125 -------------------------------------------------------------------------------- hw version: M0104 -------------------------------------------------------------------------------- voxl-suite: 1.1.1 -------------------------------------------------------------------------------- no current network connection -------------------------------------------------------------------------------- voxl2-mini:/$ ls /dev/spidev* /dev/spidev0.0 /dev/spidev11.0 /dev/spidev14.0 /dev/spidev3.0
Now, i am not sure why your manual kernel build did not work. if you still cannot get it to work, let us know, we can build it with spi enabled and test it for you.
-
I downloaded voxl2-mini_SDK_1.0.0.tar.gz from https://developer.modalai.com/asset/eula-download/127
It was tested as follows.
C:\Users\User\Desktop\OpenSDP\platform-tools_r33.0.3-windows\platform-tools>adb reboot bootloader
C:\Users\User\Desktop\OpenSDP\platform-tools_r33.0.3-windows\platform-tools>fastboot flash boot_a qti-ubuntu-robotics-image-m0104-boot.img
Sending 'boot_a' (17552 KB) OKAY [ 0.399s]
Writing 'boot_a' OKAY [ 0.023s]
Finished. Total time: 0.565s
C:\Users\User\Desktop\OpenSDP\platform-tools_r33.0.3-windows\platform-tools>fastboot flash boot_b qti-ubuntu-robotics-image-m0104-boot.img
Sending 'boot_b' (17552 KB) OKAY [ 0.397s]
Writing 'boot_b' OKAY [ 0.019s]
Finished. Total time: 0.561s
C:\Users\User\Desktop\OpenSDP\platform-tools_r33.0.3-windows\platform-tools>fastboot reboot
Rebooting OKAY [ 0.000s]
Finished. Total time: 0.005s
C:\Users\User\Desktop\OpenSDP\platform-tools_r33.0.3-windows\platform-tools>adb shellsystem-image: 1.7.1-M0104-14.1a-perf-nightly-20231025
kernel: #1 SMP PREEMPT Fri May 19 22:53:15 UTC 2023 4.19.125hw version: M0104
voxl-suite: 1.1.2
no current network connection
voxl2-mini:/dev$ ls spi*
spidev0.0 spidev11.0 spidev14.0 spidev3.0OK!
The spidev14.0 file exists.I tested it as below:
voxl2-mini:/dev$ qrb5165io-spi-test -d 0
failed to ping icm42688p IMUvoxl2-mini:/dev$ qrb5165io-spi-test -d 11
failed to ping icm42688p IMUvoxl2-mini:/dev$ qrb5165io-spi-test -d 3
[INFO] success! ICM42688 Detectedvoxl2-mini:/dev$ qrb5165io-spi-test -d 14
There is no response to the qrb5165io-spi-test -d 14 command.
is this right?
Is spidev14.0 not working? -
@이광철 , do you have anything connected to spidev14.0 ? You need a device connected to the spi port.
If you look at the source code for this test app, it simply tries to ping a specific IMU device, which happens to be installed on board on SPI3 (ICM42688 IMU) : https://gitlab.com/voxl-public/voxl-sdk/core-libs/libqrb5165-io/-/blob/master/apps/examples/qrb5165io-spi-test.c
So, you should connect your desired device to J10 and modify the example to communicate with your device.
Also, based on this documentation, https://docs.modalai.com/voxl2-mini-connectors/#j10-pin-out-spi-mode-gpio_67--low-kernel-rebuild-required-to-use, you need to set the GPIO before using:
voxl-gpio -w 67 1
I hope that helps
-
Another quick tip for testing SPI stuff. I found this useful:
https://github.com/rm-hull/spidev-test/blob/master/spidev_test.c
You can download this file to VOXL2, build it using
gcc -O2 spidev_test.c -o spidev_test
and then you can actually query the IMU on spi 3:
voxl2-mini:~$ ./spidev_test -D /dev/spidev3.0 -p "\x76\x00\xF5\x00" spi mode: 0x0 bits per word: 8 max speed: 500000 Hz (500 KHz) RX | 00 00 00 47 ...
and from here we know that 0x47 is actually the value WHOAMI register of ICM42688 IMU
The data i am sending to the device is 4 bytes used to query the imu, as done here . the value
0xF5 = 0x75 | 0x80
which tells the IMU to send back the value of register0x75
-
I will connect my spi device and let you know the results after testing.
Thanks for your help. -
Hi.
I tested it by connecting my spi device to j10.
This spi device is working normally in voxl2.
My program for testing also operates normally with this spi device in voxl2.
However, when I test the spi device and test program on voxl mini, there is no response to the voxl_spi_write function.Also, the test below is the same as before.
voxl2-mini:/dev$ qrb5165io-spi-test -d 14
There is no response to the qrb5165io-spi-test -d 14 command.I need your help and thanks in advance.
-
I tested according to your advice.
This is the result of testing on my mini.voxl2-mini:~$ cd /usr/bin
voxl2-mini:/usr/bin$ spidev_test -D /dev/spidev3.0 -p "\x76\x00\xF5\x00"
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
can't send spi message: Invalid argument
Aborted -
Alex-Kushleyev sorry.
voxl2-mini:~$ cd /usr/bin
voxl2-mini:/usr/bin$ spidev_test -D /dev/spidev3.0 -p "\x76\x00\xF5\x00"
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
can't send spi message: Invalid argument
AbortedThis test was my mistake.
Below are the final test results.
voxl2-mini:/usr/bin$ spidev_test -D /dev/spidev3.0 -p "\x76\x00\xF5\x00"
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | 00 00 00 47 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ | ...G -
@이광철 ,
Please note that
qrb5165io-spi-test -d 14
is a test app that just tries to detect a specific IMU on the SPI port. If the specific IMU is not connected, the test will not be successful.Are you able to read any data from your SPI sensor (using
spidev_test -D /dev/spidev14.0 ...
? Can you share what your sensor is? You should look in the documentation of your sensor and it will tell you how to communicate with it. SPI protocol for reading / writing is specific to the device.Also, don't forget about the gpio setting that needs to be made before using SPI 14 (
voxl-gpio -w 67 1
). this needs to be run after each reboot.Alex
-
Please note that qrb5165io-spi-test -d 14 is a test app that just tries to detect a specific IMU on the SPI port. If the specific IMU is not connected, the test will not be successful.
Yes I know.My spi device and test program works fine on volx2's J10.
Please refer to j10 in the url below.
https://docs.px4.io/main/en/flight_controller/modalai_voxl_2.html -
@이광철 , do you still have any issue? Does spidev_test work with spi 14?
-
I tested it by connecting my spi device to j10.
This spi device is working normally in voxl2.
My program for testing also operates normally with this spi device in voxl2.voxl_spi_init(SPI_BUS, SPI_MODE_0, VOXL_SPI_MAX_SPEED) is OK
but, there is no response to the voxl_spi_write function. -
@이광철 , can you confirm that you are setting gpio 67 on voxl2 mini before testing spi 14?
-
-
Hmm.. we will investigate.
-
Hi @이광철
Sorry for missing guidance, I do think an alias is also needed like this:
https://gitlab.com/voxl-public/system-image-build/meta-voxl2-bsp/-/commit/e97a22de6b4e5582fc276a963b958d01a478d56b#999b45d40c8aafd81669d788073c2ea1315dac66_66_62Also for this to work, I believe you will want to use the older devcfg.mbn file as well from SDK 1.0.0 as that has trustzone setup for SPI, and the new devcfg.mbn is setup for UART.
If trustzone isn't configured correctly I do think the kernel halts on bootup.
Flashing devcfg.mbn is like this, which is likely needed once alias is setup, to convert back to SPI from UART.
fastboot flash devcfg_a devcfg.mbn
fastboot flash devcfg_b devcfg.mbn -
Hi.
I try a test on voxl-mini with your advice applied.
voxl-mini sdk version is 1.0.0
My program and spi device operates is normal.
Thanks for your advice.