How to enable SPI on Radxa NIO-12L (MT8395) – Need step-by-step guidance

Hi Radxa Team and Community,

I am a beginner working with the Radxa NIO-12L (MediaTek MT8395) development board.
My first task is to interface an SPI sensor using the 40-pin expansion header, but I am not sure how to properly enable the SPI interface in Linux.

I have flashed the official Radxa Ubuntu image, and the board is working fine.
However:

  • I do not see any /dev/spidev* devices

  • The documentation does not clearly explain how to enable SPI on NIO-12L

  • I see that the header pins include multiplexed SPIM1_CSB / CLK / MO / MI, but I don’t know how to activate them in Linux

I would like to know the correct procedure:

  1. Does SPI require a Device Tree Overlay (DTBO) on NIO-12L?

    • If yes, is there an official SPI overlay provided by Radxa?

    • Or do I need to create a custom DTBO that enables a spidev node?

  2. How do I add a custom DTBO to the NIO-12L boot process?

    • Should it be added to the u-boot-initial-env list_dtbo variable?

    • Do I need to push the overlay using genio-flash board-assets?

  3. Which SPI controller corresponds to the 40-pin header?

    • Is it SPI0 or SPI1 in the MT8395 device tree?
  4. After enabling SPI, what should /dev show?

    • /dev/spidev0.0 or /dev/spidev1.0 ?
  5. Is there an official example (DTS/DTBO or C/C++ userspace code) to test SPI communication on NIO-12L?

My goal

I simply want to connect an SPI sensor and access it from userspace using /dev/spidevX.Y.

Any official guidance, DT overlays, or example configurations would be extremely helpful for beginners like me.

Thank you!