Khadas VIM3: One of the best performing SBCs you can't make use of (yet)

At the end of the day all that remains is basically a tiny SBC with great specs nobody can actually make use of yet.

Khadas VIM3: One of the best performing SBCs you can't make use of (yet)

While working on a rather large and complex project of mine, I was looking for hardware that allows building a very compact but powerful sub-system that features a fast SSD interface for storing large amounts of data, two MIPI CSI connectors that allow for a dual camera (stereoscopic vision) setup and a NPU/TPU/GPU that brings accelerated on-board AI/ML to the game - all that on a tiny footprint (size- and weight-wise) and at the lowest cost possible. There are plenty of individual components that deliver on some of these features, however, none of them seem to tick all the boxes. None but one: The Khadas VIM3.

When I found out about the VIM3, Khadas still had it at a pre-order stage, so I backed the project after reading through the material they published back then: Four 2.2Ghz Cortex-A73 cores, paired with 2 1.8Ghz Cortex-A53 cores, a Neural Processing Unit rocking 5 TOPS, 4 lane MIPI-CSI with up to 8MP ISP on 30 pin FPC and a M.2 socket that allows for connecting a full-blown NVMe to it. All that for around 140€ and obviously a much lower price for bulk. That seemed like a pretty sweet deal!

Fast-forward three months. I received the board and began investigating into it, when the first weird things came up. Unlike communicated by Khadas, the VIM3's eMMC storage wasn't preloaded with Ubuntu, but with Android. It didn't really bother me, as I was intending to solely use the NVMe drive. However, as I found out later, this isn't possible (yet?). The board can apparently only boot from eMMC and SD card. I tried a trick that worked on the RockPi 4 before, where it's possible to have the boot-loader on the SD card and make it load the Linux system contained on the SSD, but unfortunately this didn't seem to work for the VIM3. Okay then, let's just use the internal eMMC for Ubuntu and have the NVMe as a data store. After a couple of fights with Khadas' Windows tool for flashing the eMMC, I finally got it to run Khadas' own Ubuntu Server (Bionic) image that features a Linux 4.9 kernel (arm64). So far, so good.

Next, I looked up the schematics of the board to find out which of the MIPI CSI cameras that I have here I could use to test the much advertised dual camera feature of the VIM3. According to the documents, the VIM3 uses a rather weird 30 pin connector which unfortunately doesn't match the pin setup of popular cameras like the Raspberry Pi cameras or the FriendlyArm CAM1320. After some back and forth on the Khadas forum, a Khadas staff member basically admitted that there wasn't really any cameras available that could be used in a plug-n-play fashion.

https://forum.khadas.com/t/multiple-cameras-on-the-vim-3/5020/12

While there seems to be support for a couple of sensors (IMX290, IMX307, IMX415, OS08A10) it looks like you either need to KiCad your own camera board that works with the VIM3's pin layout or you simply have to wait for Khadas to release a camera that matches your requirements. Errrr, yeah, right.

So, let's recap: Using an SSD is sort of possible, but not as a boot medium. Unfortunate, but not a show-stopper, since the VIM3 at least provides an eMMC storage with decent performance. Dual cameras might work in theory, but there is no way to test this feature yet without any ready-made cameras being available. Also even with Khadas shipping a camera sometime in the (near?) future, I have doubts for them to be able to provide a fully functional configuration that supports dual camera streams through e.g. Gstreamer or a different way that's suitable for OpenCV/TensorFlow. Frustration level is rising. Okay.. let's stay positive and have a look at TensorFlow then. At least this much advertised feature of the Khadas VIM3 kicks ass, right?

Well, not really. At the time I'm writing this there doesn't even seem to be an easy solution for just installing TensorFlow on Khadas' Ubuntu.

https://forum.khadas.com/t/tensorflow-not-working-on-vim3-no-documentation-on-the-npu/4998/3

There seems to be a way of hacking it by downgrading the Python version on their Ubuntu image, but even with TensorFlow installed, the main issue remains: Khadas is using VeriSilicon IP for the NPU and they haven't seem to have agreed on a deal with VeriSilicon (yet) that allows their users to actually benefit from the NPU. Or to put it in plain-english: If you hack your way through the TensorFlow installation, it will run solely on CPU without any of the benefits the NPU might bring.

https://forum.khadas.com/t/npu-documentation-and-tools/5214/4

At the end of the day all that remains is basically a tiny SBC with great specs nobody can actually make use of yet. All these things might come to a point where they become available of course, but considering the velocity of other SBC manufacturers (Firefly, Libre, etc.) in terms of software support, I don't have high hopes of Khadas being able to deliver on what they initially promised in a foreseeable amount of time. Also always remember that technology does not stand still. The power-house of today will likely be the rusty ol' steam-engine of tomorrow. If Khadas won't deliver on their promises within a reasonable amount of time, the VIM3 will slowly become less relevant with competitors pushing specs even further.

As for me, I'm continuing to look elsewhere for now.