Orange Pi i96 Getting Started Guide

Orange Pi i96
Orange Pi i96

Recently I reviewed the Orange Pi Zero 2 and thought it was a fantastic board. I really like the amount of polish that the Orange Pi line of products have as it is the closest I have seen to anything approaching a Raspberry Pi experience. We also benchmarked the Orange Pi Zero 2 and determined it’s a very capable board.

I recently got a Orange Pi i96 (thanks munecito!) and this board is very exciting because it was purchased on sale for ~$10! That is insanely cheap. The reason it’s so cheap is because it’s a headless board that doesn’t contain any display-out ports.

If you are going to be using the board headless anyway (I use most of my SBCs headlessly) you may be able to save a fortune with this board. Let’s get started!

Hardware Used

Orange Pi i96
Orange Pi i96

The Orange Pi i96 is a low-cost board from the Orange Pi line of SBCs. It uses the RDA8810 SoC and has 256MB LPDDR2 SDRAM. It’s well suited for headless tasks and is astonishingly cheap.


Geekworm Copper Heatsink Set
Geekworm Copper Heatsink Set

The Geekworm copper heatsink set is designed to fit many different single board computers. It uses thermal conductive adhesive which many “cheap” heatsink kits for SBCs don’t have. Eliminates hotspots and reduces throttling. Can be further enhanced by powered cooling over the heatsinks.


Orange Pi Wireless Mouse
Orange Pi Wireless Mouse

The Orange Pi official mouse uses 2.4GHz wireless to give you a wireless mouse experience with the Orange Pi

Links:*, AliExpress*

Orange Pi Portable Monitor
Orange Pi Portable Monitor

The Orange Pi monitor is meant to be a portable monitor you can take anywhere. It has a resolution of 1080P and features a hinge in the back that folds out to support the monitor.

Links:*, AliExpress*

Getting Started

EDIT: I now recommend using my fixed Orange Pi i96 image as it will fix your USB port to be able to operate at full speed and give you a much newer OS of Debian Bullseye.

Alternatively you may use the official images (not recommended for this board). If you’d like to use the official images instead head to the official Orange Pi downloads page:

Orange Pi - Official Downloads Page
Orange Pi – Official Downloads Page

Now select the Orange Pi i96 from the list. I will be using Ubuntu Linux for this guide but you may use Armbian as well.

If you are wanting to try Android I highly recommend seeing my Orange Pi Android Installation Guide as the installation process is different than Linux.

Writing the Image

The images are typically distributed as a .tar.gz file. The name of the Ubuntu image tar.gz file at time of writing was OrangePi_i96_ubuntu_xenial_server_linux3.10.62_v0.0.4.tar.gz.

We will need to extract this file. If you are using Windows then grab 7-zip to be able to extract a .tar.gz file.

Inside this file will be a .img file. Since I downloaded the Ubuntu image the name of my file was OrangePi_i96_ubuntu_xenial_server_linux3.10.62_v0.0.4.img. This is the image that we are going to write to our SD card.

There are several choices to write the image to your SD card. If you are on Windows I recommend Win32DiskImager. Etcher is also available for Windows/Linux/Mac OS X.

Write the image to the SD card using your preferred software.

First Startup

Before starting up you should make sure that the Orange Pi’s switches are in these positions (indicating to boot from SD card):

Orange Pi - SD Startup Position
Orange Pi – SD Startup Position
Orange Pi - SD Startup Position
Orange Pi – SD Startup Position

We’re ready to put the SD card into the Orange Pi i96. But how are we going to connect to the device? There’s no network port and the device isn’t configured to connect to our WiFi yet.

Connection Option #1

If you happen to have a USB to Ethernet adapter that is the easiest way to connect to the device for initial configuration:

USB to Ethernet Adapter
USB to Ethernet Adapter

Connection Option #2

If you have a TTL to USB serial debug adapter* you can use that as well. See the OrangePi instructions for that method.

Initial Configuration

orangepi-config Utility

Once you’ve connected it’s time to do some basic configuration. We will use the tool orangepi-config:

sudo orangepi-config

You may now set the WiFi settings, etc. The orangepi-config is just like raspi-config if you’ve ever used that on a Raspberry Pi.

Don’t reboot before doing the next section.

Fix Second Startup (Debian / Ubuntu)

You will notice if you reboot the device it will often not come up the second startup. This is especially likely if you performed a sudo apt dist-upgrade.

To prevent this I recommend removing the alsautils package. This will impact sound functionality on the board but as I was not using it and intended to use this more as a headless board this was fine for me.

sudo apt purge alsa-utils

If you need to have the sound working on the board there is an alternate solution available here.

This is not necessary in my Legendary image as it has kernel fixes for these issues (highly recommended)

Set Timezone

Replace my timezone with yours in the following commands:

rm /etc/localtime
ln -s /usr/share/zoneinfo/America/Denver /etc/localtime

Setup Locales

Setting the locales isn’t in orangepi-config (such as it is in raspi-config) but here’s a quick way to set them:

sudo apt install locales -y
sudo dpkg-reconfigure locales

Setup Wireless CRDA Regulatory Domain

For the wireless to function very well at all you need to set the wireless regulatory domain.

If you are not using my image then you will first need to install the crda package with:

sudo apt install crda -y

Now we can set the regulatory domain by editing the following file:

sudo nano /etc/default/crda

At the bottom of the file there is this line:


Put the 2 letter country code for your country. Mine is “US”. Once finished press Ctrl+X then Y to save the file.

Optional – Upgrade Debian OS to Buster/Bullseye

Note that this will not upgrade the kernel. You can upgrade everything else though including all the way up to Bullseye. You should do this one release at a time and start with “Stretch” and then do “Bullseye” afterward.

If you are using the Debian installation you can upgrade to Buster by editing your /etc/apt/sources.list file.

Change all instances of “stretch” in the file to “buster” and then do the following:

sudo apt update && sudo apt dist-upgrade -y

Once this has completed reboot the system (make sure you’ve done my fix second reboot section first by purging alsa-utils). Verify you are on Buster with

cat /etc/os-release

for example:

root@orangepii96:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION="10 (buster)"

Now you can upgrade to Bullseye. It’s almost the same as upgrading from Stretch to Buster but there has been a change in the security updates server format. Here is a working “Bullseye” apt sources file for the Debian Orange Pi i96 image:

root@orangepii96:/# cat /etc/apt/sources.list
deb bullseye main contrib non-free
#deb-src bullseye main contrib non-free
deb bullseye-updates main contrib non-free
#deb-src bullseye-updates main contrib non-free

deb bullseye-security main contrib non-free
#deb-src bullseye-security main contrib non-free

Once you’ve changed the files do a sudo apt update and make sure you don’t see any errors. If everything looks okay start the Bullseye upgrade with:

sudo apt full-upgrade -y

After a reboot you should be on Bullseye! We can verify this with cat /etc/os-release:

orangepi@orangepii96:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION="11 (bullseye)"
orangepi@orangepii96:~$ uname -a 
Linux orangepii96 3.10.62-rel5.0.2+ #4 PREEMPT Wed Mar 18 18:49:25 CST 2020 armv7l GNU/Linux

Notice that the kernel has not changed at all (as cautioned at the beginning of the section) but everything else on the system will be Bullseye!

Performance Benchmarking

I benchmarked the board using a SanDisk Extreme SD card on my Pi Benchmarks web site. This gives us comparable results between boards and there are over 30,000 benchmarks submitted for various boards / storage devices.

I had a total score of 497. This was below average or off from an average Raspberry Pi setup by about 47%.

To be clear the storage performance on the board is relatively low compared to the Orange Pi Zero 2 or a Raspberry Pi (Zero or 4). That is to be expected for a price of around ~$7-$10.

I’m not sure I would say this is a disappointing result though. We are talking about a board that is a single digit number of dollars. For the price point that is fantastic performance! In fact for the price point it’s a wonder that it works at all.


It’s a great board. At a price point of $7-$10 it reminds me of the really, really old Raspberry Pi Zero days where you could actually get a Raspberry Pi for around that price point.

The Zero 2 is a significantly more powerful board. It benchmarked much higher than the i96 but it also costs significantly more. If you need more power that board will be a better choice. If you’ve never had an Orange Pi before I would recommend the Zero 2 first as this board is quite a bit trickier and has more outdated software available for it.

The version of Ubuntu on this board is also quite old (Ubuntu 16.04 / Xenial) compared to the Orange Pi Zero 2 which is actually running a modern 5.X kernel whereas this one is a 3.X kernel. Make sure that is not going to be a problem or you will want to step up to a higher Orange Pi. The i96 is definitely meant for simple services / projects that don’t need a lot of power. It’s perfect for those.

If you need a headless board then the Orange Pi i96 may very well fit the bill for you, the price is certainly right! Don’t skip the heatsinks though. It got very warm during testing (warm enough to freeze once during consecutive benchmarks) and Orange Pis are known to get quite hot!

Other Resources

I highly recommend using the Legendary i96 Debian Bullseye image available here

I’ve also reviewed the Orange Pi portable monitor here

Don’t miss my Orange Pi Zero 2 Review / Tips / Guide for another great board (with display connections)

I’ve also reviewed the Orange Pi 3 LTS which is roughly equivalent in power to a 2GB Pi 4

If you’re trying to set up Android definitely see my Orange Pi Android Installation Guide

For the fastest storage options check out my Linux storage benchmarking script

Notify of

Inline Feedbacks
View all comments
Steve Gotthardt
Steve Gotthardt
1 year ago

Thanks for the image – I have several i96 to use for 3D printing host for klipper since RPi are so hard to get now…
I bought a TTL-USB via Amazon.. It uses CP2102 HiLetgo CP2102 USB 2.0 to TTL Module Serial Converter Adapter Module USB to TTL Downloader With Jumper Wires – drivers here.
Using PuTTY – here
Using image 1.5 – here are interesting parts:

RDA8810 Boot_ROM V1.6
HW_CFG: 0286
SW_CFG: 0000
Open eMMC
EMMC OCR timeout
Open eMMC card Failed
Load EMMC Fail
Load SD
Open SD card
Card is SDHC
Inserted Card is a SD card
mcd_Open Done
Loading image from SD card ................................................................................................Done

rda2 stand for dqs_prsel_preset
rda2=0 rda2=1 rda2=2 rda2=3 rda2=4 rda2=5 rda2=6 rda2=7
R R R R R * * R
Please check the result and choose the best one
final rda2= 1, rda2_old = 2
setup ddr vtt to 1
pll freq CPU = 988
pll freq BUS = 800
pll freq MEM = 260
Init DDR, flag = 0x0002, para = 0x00001338
32bit dll-on Mode ...
ddr2 phy init done!
format ctrl value: 22000202
address ctrl value: 30301
decode ctrl value: 10
dram init done ...

U-Boot 2012.04.442-rel5.0.2-g5ee06c1-dirty (Sep 01 2022 - 17:48:37)

RDA8810 SoC
Board: RDA8810
DRAM: 236 MiB
CPU: enable instruction caches
CPU: enable data caches
CPU: enable neon
CPU: p15-c1-c1 (NSACR): 0x00000000 -> 0x00000c00
CPU: p15-c1-c0 (CPACR): 0x00000000 -> 0x00f00000
NAND: metal 28 hwcfg 286, use eMMC, skip nand init
0 MiB
MMC: MMC: registered mmc interface 0
Cannot find the emmc corresponding mclk adj and inv.Now use default zero. Please add it
MMC: registered mmc interface 1
ERROR: v7_dcache_inval_range - stop address is not aligned - 0x8dae5e88

Welcome to Debian GNU/Linux 11 (bullseye)!
[ 3.011291] systemd[1]: Set hostname to .

Steve Gotthardt
Steve Gotthardt
1 year ago

heh – somehow the log was cut off. Yes, it boots – ill try 1.6 – using BelenaEtcher seems to be fine.

Steve Gotthardt
Steve Gotthardt
1 year ago

v1.6 booted – I don’t have SPI needs (right now 😉 seems to work – some findings on WiFi:
The wifi connected – once in moments and the next time it was at 830 seconds with these messages 15-30 seconds apart dropping onto the console:
[ 770.773071] cfg80211: Calling CRDA to update world regulatory domain

I also found I had to start and enable resolved.service so DNS lookups would work:
systemctl start systemd-resolved.service
systemctl enable systemd-resolved.service

Steve Gotthardt
Steve Gotthardt
1 year ago

The Wifi will work and then not: I won’t be able to resolve , SSL won’t work, and then it will start working and clone a repo…
I stopped systemd-resolved.service and DNS still worked – so it may have been coincident turning resolved on helped…
I set the US country as you advised – I still got a message. Now I am exploring maybe antenna orientation/signal strength? So a better wifi connection and ‘things’ work better (no messages, names resolve, SSL is good)? I’ll plod on with wifi – at the moment it is working 😉

Steve Gotthardt
Steve Gotthardt
1 year ago

The antenna may be the weak point – I used wavemon to monitor signal strength and the signal-strength jumps all over with even slight movement. I moved my i96 to within 10 feet of router and it might be better at connecting (I was around 30ft) but I still get these:

WiFi info – from journalctl -r

Sep 03 00:43:12 orangepii96 kernel: cfg80211: Calling CRDA for country: US
Sep 03 00:43:12 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-DISCONNECTED>
Sep 03 00:42:48 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-CONNECTED - >
Sep 03 00:42:48 orangepii96 wpa_supplicant[257]: wlan0: WPA: Key negotiation co>
Sep 03 00:42:46 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-SUBNET-STATU>
Sep 03 00:42:46 orangepii96 wpa_supplicant[257]: wlan0: Associated with d4:5d:6>
Sep 03 00:42:44 orangepii96 wpa_supplicant[257]: wlan0: Trying to associate wit>
Sep 03 00:42:42 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-DISCONNECTED>
Sep 03 00:42:42 orangepii96 kernel: cfg80211: Calling CRDA to update world regu>
Sep 03 00:42:37 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-CONNECTED - >
Sep 03 00:42:37 orangepii96 wpa_supplicant[257]: wlan0: WPA: Key negotiation co>
Sep 03 00:42:36 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-SUBNET-STATU>
Sep 03 00:42:36 orangepii96 wpa_supplicant[257]: wlan0: Associated with d4:5d:6>
Sep 03 00:42:35 orangepii96 sudo[731]: pam_unix(sudo:session): session closed f>
Sep 03 00:42:34 orangepii96 wpa_supplicant[257]: wlan0: Trying to associate wit>
Sep 03 00:42:32 orangepii96 kernel: cfg80211: Calling CRDA for country: US
Sep 03 00:42:32 orangepii96 wpa_supplicant[257]: wlan0: CTRL-EVENT-DISCONNECTED>
Sep 03 00:42:00 orangepii96 sudo[731]: pam_unix(sudo:session): session opened f>
Sep 03 00:42:00 orangepii96 sudo[731]: orangepi : TTY=ttyS0 ; PWD=/home/orangep>
Sep 03 00:41:52 orangepii96 sudo[700]: pam_unix(sudo:session): session closed f>

Steve Gotthardt
Steve Gotthardt
1 year ago

I am running v1.7
I was able to clone and start the klipper3d repo (my main use case for the i96) in one try!
I am going to research (connector type varies) antenna and order some – I see many on Amazon

Steve Gotthardt
Steve Gotthardt
1 year ago

I also found that the US setting was not ‘taking’ and I found this article.

Steve Gotthardt
Steve Gotthardt
1 year ago

Thanks. That’s better than hacking the systemd.
I’ll try it

Steve Gotthardt
Steve Gotthardt
1 year ago

re CDRA for US. I found kernel code was looking in the environment for a code so:
on the command line:
$ export COUNTRY=US

I got a lot of output 😉 but now sudo iw reg get shows US – where before it was not sticking

my solution: In /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service
I added the Environment line in the [Service] section:
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

1 year ago

Hello James,
Great job, thank you for the updates and the tutorial.
I’m running your latest Image Bullseye 1.3 got from your git repo, and I see overuns on the serial cnsole.
I see also bad characters definition/encoding with orangepi-config menu and with locale reconfiguration.
Any clue how to fix that.
I’m going next to generate my own image for development purposes.
My Best

1 year ago

Yes sure I can do.
First, I think that the high serial bitrate 921600 is what is set by the boot rom, even before uboot. Changing console bitrate may be done by changing the bootcmd in uboot.
Now from the stakoverflow thread, with “make menuconfig” :
HSUART is not found ( old kernel),
CONFIG_8250 are all disabled,
CONFIG_DW is tens of flags, most of them disabled.
DMA also is disabled on most of device drivers and especially SERIAL_RDA_UART_DMA [=n]

Now I have used the same bitrate for the Xenial image and the display was correct, the wrong chars encoding in the orangepi-config menu appeared in the bullseye images 1.2 and 1.3.
I’m switching to more recent kernel, I’ve found a discussion that RDA8810pl and i96 were added to kernel since 5.0.2. It has not booted yet but it’s interesting to have more recent kernel and make more peripherals run. I need I2c, spi, spidev, socketcan, CAN with mcp2515, gpios etc. I have’nt spent much time on bullseye to check them or add them.


1 year ago

Hi James,
Re configuring the locales to add en_US.UTF-8 and en_US.ISO-8859-15 and setting SYSTEM env variables locale to en_US.ISO-8859-15 worked this time. Menus ( dpkg-reconfigure locales and orangepi-config) are displayed correctly.
I’ve seen no more overruns on the serial port and copy paste to edited file ( with vi) of hundreds of chars worked fine.
Congrats and thank you.

My best.

1 year ago
Reply to  MZA

It was with your bullseye 1.4

1 year ago

If you mind, I’ll continue testing with you. I’m interested in bringing up more peripherals ( spi/CAN through MCP2515) on this board.
I’ve compiled the spidev device as a loadable modules, it can be inserted but does not bring the /dev/spidev.
here’s what I see
orangepi@orangepii96:~$cat /sys/bus/spi/devices/spi0.0/modalias
orangepi@orangepii96:~$cat /sys/bus/spi/devices/spi0.1/modalias

Does this mean that the spi are already used ? ( ALSA SoC TLV320AIC23 codec driver )

1 year ago
Reply to  MZA

orangepi@orangepii96:~$ find /sys/bus -name "*spi*"


1 year ago

Uboot is old and does not use dts. The kernel 3.10 does.
I’ve searched in uboot code ( after retrieving compilation steps in the scripts) for ports settings and passing them to kernel and I found nothing.
I’ve at the end found this document from freescale / nxp that explains how to make recent linux ( with dts) boot from older uboot. Interesting.
Google search “old uboot dts” if the link does not work.
In summary, if uboot does not provide the device tree to the kernel, then they can be appended to zImage when building the kernel.
Hope this helps.

1 year ago

Incredible what you have done so far!
I have tested V1.5 but SPI is not working. I am able to open the device, but when I try to send data over SPI 1.0 the system freezes and I have to reset it. I tested python and c, the result is the same.

After looking at the schematics and the RDA8810PL datasheet I don’t understand why our spi should be spi1.0.
The schematic says SPI2_CLK, DIO, DI, CS_1 is connected to GPIO_A_2, 3, 4, 6. The full RDA8810PL datasheet confirms this.

1 year ago

The most basic test for the SPI would be just a loopback connection from DI to DIO. You don’t need extra hardware for that. But the I96 crashed somewhere in the sending data part. I have never build a Linux system before. Maybe I can narrow down the part where the crash happens.

1 year ago

Fantastic, you’ve done a great job.
Thank you very much. I am reading your explanations and I will test it asap.

1 year ago
Reply to  MZA

I’ll receive a small TFT in the coming days and I’ll try the same, thank you for this miraculous link and tips. I think the dislay I’ll get is a cheap i2c display, but I have, since years now, an e-Ink spi display that has never been used. I’ll try it if the first is not satisfactory.
For now I’ll focus on the mcp2515, it is to be connected to the spi from the 40 pin header, it needs a GPIO interrupt and a slave select. If it works, it will bring CAN interface to the board.
I guess I must add this device and GPIO pin number in the files you’ve already modified ?

1 year ago

Hello James,
Thank you fot the guide and the Debian Bullseye Image.
I am using an Amazon basics USB to Ethernet adapter. It is working fine.
Is there a way to get SPI working?

1 year ago

Thank you for the link to patb’s tools. I get the same gpio status as you.
The hardware for the spi seems to be OK, though it says spi0.1 instead of spi2:
root@orangepii96:~# dmesg | grep spi
[ 0.551757] rda-spi rda-spi.0: master is unqueued, this is deprecated
[ 0.552429] spi spi0.0: max_speed_hz = 500000, bus_speed_hz = 200000000, divider = 199
[ 0.553466] spi spi0.1: max_speed_hz = 1000000, bus_speed_hz = 200000000, divider = 99
[ 0.554443] rda-spi rda-spi.1: master is unqueued, this is deprecated
[ 0.555236] rda-spi rda-spi.2: master is unqueued, this is deprecated

But there is no spidev
root@orangepii96:~# ls /dev/spidev*
ls: cannot access ‘/dev/spidev*’: No such file or directory

I want to use the SPI with a python script for an e-paper display. But I am stuck here without the spidev.
I got this up and running on my orangepi zero 2!

1 year ago

Hello James, could you please inform what is the model of the USB to Ethernet device are you using? I’ve been trying a few models an the Linux doesn’t recognize other network interface, probably is because the old Linux doesn’t have the drivers. So I’m looking a model that works in orange pi I96

1 year ago

Hello James

thank you for the interesting guide. I bought one of these last year but although I managed to install an old version of Armbian and the official Ubuntu and Debian images, and despite the board is running nicely, I have never succeded in getting the USB port to work properly with any distribution.

Any USB 2.0 pen or device that I connect to the USB port (which is claimed to be a 2.0/480M High Speed port) is always recognized as a “Full Speed” device instead (hence the data transfer rate is reduced to 12M instead of 480M) .

My intention was to use the board as a very low-cost ADS-B decoder, using a DVB-T dongle (I use an OPI Zero and a Lite for the very same task, but they are significantly more expensive), but the decoding software, based on rtllib needs the USB 2.0 high speed to work.

Are you able to check if your board’s USB port handles correctly (that is, at high speed) USB 2.0 devices, jus to exclude that my board is somewhat faulty?

Thanks anyway


1 year ago

Hi James

first of all, thanks for your investigations, now I know my board is not faulty (even if it was somewhat easier to purchase another 7$ board to replace a faluty one rather than having to deal with this kind of driver-related problems).

I copy and paste what I wrote on the Armbian forum months ago. They used to provide an image but it was soon abandoned due to the limited capacity of the board, in their opinion not powerful enough and with a too flacky wifi to deserve further developing. I do not agree and believe that this little board could really be a nice toy to play with… if the USB worked as expected.

Here is my dmesg | grep usb

[ 0.378479] : pid = 10, v_usb: ext_len = 0
[ 0.378540] v_usb: 1800 2800 mV normal standby
[ 0.388732] usbcore: registered new interface driver usbfs
[ 0.388793] usbcore: registered new interface driver hub
[ 0.388854] usbcore: registered new device driver usb
[ 0.697265] usbcore: registered new interface driver usb-storage
[ 0.697753] platform disable musb
[ 0.697814] musb-hdrc: ConfigData=0x1a (UTMI-8, HB-ISO Rx, HB-ISO Tx, SoftConn)
[ 0.697814] musb-hdrc: HDRC RTL version 2.0
[ 0.697875] gpio-vbus gpio-vbus: registered host 'musb-hdrc'
[ 0.791931] usbcore: registered new interface driver usbmouse
[ 0.822021] musb_gadget_pullup android usb didn't ready
[ 0.822937] android_usb gadget: Mass Storage Function, version: 2009/09/11
[ 0.822937] android_usb gadget: Number of LUNs=1
[ 0.823181] android_usb gadget: android_usb ready
[ 0.823242] gpio-vbus gpio-vbus: registered gadget 'musb-hdrc'
[ 0.823242] musb-hdrc musb-hdrc: MUSB HDRC host driver
[ 0.823242] musb-hdrc musb-hdrc: new USB bus registered, assigned bus number 1
[ 0.823364] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[ 0.823364] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 0.823364] usb usb1: Product: MUSB HDRC host driver
[ 0.823364] usb usb1: Manufacturer: Linux 3.10.62-rda8810 musb-hcd
[ 0.823364] usb usb1: SerialNumber: musb-hdrc
[ 0.823913] platform enable musb
[ 4.835388] : pid = 10, v_usb: ext_len = 0
[ 4.835449] usb cable connect...
[ 6.715698] usb cable disconnect...
[ 7.181274] usb 1-1: new full-speed USB device number 2 using musb-hdrc
[ 7.324584] usb 1-1: not running at top speed; connect to a high speed hub
[ 7.335021] usb 1-1: New USB device found, idVendor=0bda, idProduct=2838
[ 7.335021] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7.335083] usb 1-1: Product: RTL2838UHIDIR
[ 7.335083] usb 1-1: Manufacturer: Realtek
[ 7.335144] usb 1-1: SerialNumber: 00000212
[ 15.373962] musb-hdrc musb-hdrc: VBUS_ERROR in a_host (98, VALID), retry #1, port1 00000103
[ 16.553955] usb 1-1: USB disconnect, device number 2
[ 16.831298] usb 1-1: new full-speed USB device number 3 using musb-hdrc
[ 16.976806] usb 1-1: not running at top speed; connect to a high speed hub
[ 16.987182] usb 1-1: New USB device found, idVendor=0bda, idProduct=2838
[ 16.987182] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 16.987182] usb 1-1: Product: RTL2838UHIDIR
[ 16.987243] usb 1-1: Manufacturer: Realtek
[ 16.987243] usb 1-1: SerialNumber: 00000212
[ 215.878356] musb-hdrc musb-hdrc: BUS BABBLE as a_host
[ 215.878356] musb-hdrc musb-hdrc: usb otg cable is still on, and id is low
[ 215.878906] usb 1-1: USB disconnect, device number 3
[ 217.352416] usb 1-1: new full-speed USB device number 4 using musb-hdrc
[ 217.505798] usb 1-1: not running at top speed; connect to a high speed hub
[ 217.516784] usb 1-1: New USB device found, idVendor=0bda, idProduct=2838
[ 217.516845] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 217.516906] usb 1-1: Product: RTL2838UHIDIR
[ 217.516906] usb 1-1: Manufacturer: Realtek
[ 217.516906] usb 1-1: SerialNumber: 00000212


T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev=03.10
S: Manufacturer=Linux 3.10.62-rda8810 musb-hcd
S: Product=MUSB HDRC host driver
S: SerialNumber=musb-hdrc
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0bda ProdID=2838 Rev=01.00
S: Manufacturer=Realtek
S: Product=RTL2838UHIDIR
S: SerialNumber=00000212
C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 1 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)

lsusb -t

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=musb-hdrc/1p, 480M
|__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=, 12M
|__ Port 1: Dev 4, If 1, Class=Vendor Specific Class, Driver=, 12M

I wondered if it could be a power-related problem, but I tested all the three power adapters I own, two 2.1A and one 2.4A, two of which with mobile USB cables and the last with fixed cable which work without a problem with my OPI Lite and my OPI Zero (each one having mounted to their USB ports an RTL-SDR dongle, plus a CPU fan, SSD1306 OLED screen and external RTC module attached to their GPIO header).

I doubt that the same power unit that is able to drive a 4-core board with all that stuff attached to the USB and GPIO header (and in the case of the Zero powered through the same micro-usb port) is unable to deliver enough power to this single core board and just one device attached. Or am I wrong?

I tried with any possible combination of power adapters and cables I have and even tried to (succesfully) power up the board through the GPIO header’s pins, but nothing changes.

I tried to attach an external 4-ports 2.0 Hub, I have two, one is powered, the second is not. The powered one is simply not recognized, the other one is recognized as a 2.0 Hub but if I then attach the dongle to it, the dongle is not recognized anymore (not even as a 1.1. device).

I then tried to use a Y USB cable to provide this latter hub some external power (by attaching the power cable to a second power adapter) but nothing changes (the hub is recognized, but no other devices attached to it are).

Of course I tried to switch the RTL-SDR dongles, I have three, but all of them are recognized as 1.1 devices as well as different USB 2.0 pens to the board but even these are recognized as 1.1. devices, so I can assume the issue is not power-related but agree with you that the problem is definitely with the musb-hdrc driver and the way it deals with both the OTG port (which can be used to power up the board) and the USB-A port.

Unfortunately I’m still quite new to Linux and scratching my head around when dealing with kernel recompilation…

Thanks a lot for the time you are devoting to the problem.


1 year ago

Hello James,

I didn’t realise it before you told that but I believe you may be right when you think they may have implemented incorrectly the USB ports. I’m by no means and electrical engineer, but the simple fact that the I96 was let alone by it’s manufacturer just a few months after launch (their official distros are quite old and there is no signs of updates for those) make me think that the board probably had some problems in that respect.

I totally agree with you that you may loosing your time trying to patch the official distribution not knowing if the problem is hardware-related. I will open a ticket with OPI support and see if I can get an answer of any sort, but I’m not confident they will ever answer. The board is already old (and supposedly already out of production) and even if they may be aware of the problem it has I don’t think they would have resources to devote to solve it, being the I96 the cheapest of the bunch.

Anyway, will try to get in touch with them and will post here any reply I will get (if ever)….

Thansk again for your efforts.


1 year ago

James you are GREAT!

I’m downloading your image right now and will install over the week end. I don’t know how you managed to find that post by Mr. Hidvegi, I searched forever the web without finding any useful clue!

Thanks a lot also for preparing the image, I own the plain I96 version so it is exactly what I needed (sorry to hear that the fix has some caveats for the 2G version though).

Will keep you posted as soon as I have everything up and running!



1 year ago

Hi James

I can confirm that your image fixes the problem and the little board can definitely be used as an ultra-cheap ADS-B receiver when coupled to a likewise cheap DVB-T dongle! THANK YOU!

Alexander Farley
Alexander Farley
1 year ago

Thank you, I followed this guide to get the i96 working and it was quite helpful.

1 year ago

Interesting! I think I mentioned that when I saw the price I bought to then think what project I will be using the board on. I think it may do well with some sort of sensor based automation or wireless control for something.

Thank you for putting the time in to tinker with it James.

1 2 3 9