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.

Links: Amazon.com*, AliExpress.com*, Amazon.ca*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.sg*

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.

Links: Amazon.com*, Amazon.ca*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*

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: Amazon.com*, 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: Amazon.com*, 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:

REGDOMAIN=

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_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

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 http://ftp.debian.org/debian bullseye main contrib non-free
#deb-src http://ftp2.cn.debian.org/debian bullseye main contrib non-free
deb http://ftp.debian.org/debian bullseye-updates main contrib non-free
#deb-src http://ftp2.cn.debian.org/debian bullseye-updates main contrib non-free

deb http://security.debian.org/ bullseye-security main contrib non-free
#deb-src http://security.debian.org/ 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_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
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.

Conclusion

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

Subscribe
Notify of
guest

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

I have been using/testing 1.8 . This works well – wifi very stable for me ( i ran without antenna by mistake and it looked good 😉

Here are some things I have found:
> if you run dmesg you may see the ‘ALC on the journald not supported’ it is a warning – did we want that as part of kernel config.
> is the rda_backlight service needed? (maybe sets voltages) using $systemd-analyze critical-chain it looks like that service takes a while to come up
> also in dmesg: unrecognized mount option “hidepid=invisable” or missing value
> in the e2scrap_reap.service the Ambient_Capabilities field is empty/unknown
> There is no modprobe? modules? I need the USB CH341 driver and USB serial enabled to talk to 3D printer vi ttyUSB. I can lsusb and see the device I need to talk to, but no driver is loaded

I have not built kernel yet – still something missing on my LinuxMint install – i get an image of something but it is not right – otherwise I would clone your repo and submit some PR as I test.

Thanks again for your attention – I will continue to test/use and try to get working build environment.

Steve Gotthardt
Steve Gotthardt
1 year ago

I found modprobe – need to invoke with $sudo modprobe 😉

Steve Gotthardt
Steve Gotthardt
1 year ago

I found the problem with build env – I was missing bsdtar found in libarchive-tools
the .xz file is a different size than the one on your repo, but the img is exact byte size

Steve Gotthardt
Steve Gotthardt
1 year ago

What is your workflow for i96_linux_defconfig updating?
I have something like this (in kernal dir):
$make ARCH=arm i96_linux_defconfig
$make ARCH=arm menuconfig

now? copy .config over i96_linux_defconfig ?

thanks

Steve Gotthardt
Steve Gotthardt
1 year ago

Thanks for the help. I’ll use it.
I find using $ make ARCH=arm i96_linux_defconfig after making changes shows errors – such as using a =Y instead of a =y

Steve Gotthardt
Steve Gotthardt
1 year ago

I am using the build.sh – I will try the kernel build – that is great! thanks

I was using the make to show possible problems in the changes – see below – if the Y is used instead of y then that change is ignored (i believe)

steve@redDog:~/Projects$ cp -R Legendary-OrangePi-i96/OrangePiRDA/* OrangePiRDA/
steve@redDog:~/Projects$ cd OrangePiRDA/kernel/
steve@redDog:~/Projects/OrangePiRDA/kernel$ make ARCH=arm i96_linux_defconfig
arch/arm/configs/i96_linux_defconfig:122:warning: symbol value 'Y' invalid for SYSFS_DEPRECATED
arch/arm/configs/i96_linux_defconfig:2505:warning: override: USB_G_ANDROID changes choice state
#
# configuration written to .config
#

Marco
Marco
1 year ago

Look what i have found, we can use the NAND, would be nice to integrate it a little bit worthier

Dustin
Dustin
1 year ago

Just got done reading the article it says it’s using DietPi. It might be doing some smoke and mirrors where it’s bootstrapping off the SD, but loading off the NAND. Looks like you have to flash the bootloader on the device to see the NAND from Linux. I’m a bit of noob, so take all this with a grain of salt.

Dustin
Dustin
1 year ago

The link for the build system is dead. I believe this is the updated one.
I haven’t got one of these yet, just researching. I’m looking for something I can power with a battery (18650), acts as webcam and a hotspot. I played with a Pi Zero W. It worked OK, but the internal antenna didn’t have the range. Hoping the external antenna might be better or maybe an upgrade?

Dustin
Dustin
1 year ago

Thanks for all the great info! I’ve done some work with WiFi and I’m familiar with the US/EU freq. differences.

Even if you can’t use the NAND for the OS, it might be useful as swap, /tmp or maybe user storage that can survive an OS update. I’m not sure if it would be more or less wear resistant than a microSD drive.

I’ll probably roll the dice and order up a few of these. Enjoy your vacation!

Dustin
Dustin
1 year ago

So, I’m rolling the dice and ordering from AliExpress. I used the link off the Orange Pi site, so I AssUMe it’s a legit seller. I got 3 for $24.55 USD after shipping and tax. I’ve always wanted to try AliExpress and since these all seem to ship from China, it seemed like a reasonable time to try.

Thank you for all your help and work.

Marco
Marco
1 year ago

Hey, thank you for your response, what i dont like is that you have to manually run ubi_attach to attach it. would be nice to implement it for automounting at kernel, not at userspace.
I am close to your thoughts, 512MB are way too less to let a proper system running on that space. I havent looked into the bootloader so i cant tell you how the NAND is internally beeing detected and used ( to boot from). This wont even be interesting for us, as you stated the main image is already over a gb.

I would add this space for idk, maybe /var/log? this way, we can bypass the most read/writes a system usually creates by using /var/log.
Or just add it as additional space.

There is this spanish manual attached where you can spot the details and see that its not mounted as mmcblk.

Another Topic: What about porting the kernel-drivers to a newer kernel version, a mainline 5.x kernel? this COULD lead to more stability

Marco
Marco
1 year ago

And what about the NAND, havent we been able to use it or boot from it already? i did it 2 years ago but i didnt wrote it down 🙁

Marco
Marco
1 year ago

Hello, thanks for your work, i had some spare i96 in my closet, never use them because of the unstable wifi, but the crda patch has aparrently been worked, no sudden timeouts or lost packages anymore.
has anyone information on how to use the sound on the board, especially if iam able to connect a speaker to it?

MZA
MZA
1 year ago

Hi James,
Digital IO/ V_PAD Voltage:
I’m surprised to find that the VPAD in on the 40 pin header was set to 1.8 V.
I fear that most of the cheap SPI and I2C devices we’re trying to use ( LCD, CAN, …) will not handle this voltage.
The RDA8810PL datasheet says Digital I/O can be set to 1.8 or 2.8. I’ve seen some people struggling to set it to 1.8 but I think that ( on the bullseye image 1.9) the gpio_fixup.py script had already set it to 1.8V ( to be compliant to IoT board standard)
Well, I’m stuck, there’s no 3.3 V pin on the board. Should I try with 2.8 V ?

MZA
MZA
1 year ago

Yeah, using level shift should work, I’m attracted to avoid it ( less wiring) but it seems necessary.
MCP2515 for CAN bus does not handle lower voltage than 2.9V which will make it impossible to communicate properly without level shift. The pb is that the communication is bidirectional => two level shifts, and one LDO 5V->3.3, that’s too much extra for an simple SPI communication.
Cheap SPI screens would have the same issue, that’s, may be, the problem of the spi with the other users. First task is to find a 1.8V slave device.
I’ve returned to see the posts of the russian guy ( yoshee), he does not use the i96, all the photos he displayed with LCD screens are done with other orangepi boards.
Now for the 2.8V, I’m still searching how to have it back, I disabled the gpio_fixup script but voltage level did not return to 2.8. I may be wrong since I read only opio command output.

MZA
MZA
1 year ago
Reply to  MZA

There should be a chance to have the SPI LCD work, the’re tolerant up to 2.7 V.

MZA
MZA
1 year ago
Reply to  MZA

Down to 2.7 sorry.

MZA
MZA
1 year ago

There are other weird info in the user manual, their display of the GPIO Header setting page 20 shows 3.3 V in multiple positions, bad display ?
I’m also looking for the usage of this 8 bit switch, it is not in the schematics, not in the manual. The only mention to it is to change it for Android ADB debugging….

MZA
MZA
1 year ago

I’ve already visited that thread from orangepi.org, the datasheet is the official and obviously the correct RDA8810 datasheet ( there are three variants, ours is RDA8810pl) and the other is the schematics of the i96 board.
In the schematics, I did not figure where is the 8 bit switch, but i’s not a major issue until we’ll need it.
The user manual is not good, as anywhere.
You don’t need to spend time changing the uboot drivers as users may need different functions from the 40 pin header, better invest in other issues.
I’ll work a little bit on testing the SPI, my issue is that I use a new ePaper screen MH-ET LIVE that I’m not used to, I need to port a test application for it.
Thank you for your help, I’ll update you with the news.

MZA
MZA
1 year ago

U’re right about the opio command, the values are just strings, I don’t know now if the pin is 2.8 or 1.8. I’ll get a voltmeter.

MZA
MZA
1 year ago
Reply to  MZA

It’s 2.8. The voltmeter says 2.9 but I don’t believe it.
I’ll check the links you provided, thank you.

Steve Gotthardt
Steve Gotthardt
1 year ago

Running 1.8 – this is great for wifi!
The wifi connection seems solid even at my original 30ft from router and powering orangepi from USB 3 on my laptop (was using 2A wall wart)! The signal is weaker (according to wavemon) but ‘apt install’ works every time. No more CDRA messages hitting console.
Thanks for the quick fixes – I will be testing this further.

Steve Gotthardt
Steve Gotthardt
1 year ago

correction under the “Setup Locals”
sudo dpkg –reconfigure locales should be: sudo dpkg-reconfigure locales

Steve Gotthardt
Steve Gotthardt
1 year ago

I see you have it correct on github…