ODROID-N2

Forum : https://forum.odroid.com/viewtopic.php?f=176&t=33781

ODROID-N2 is a new generation single board computer that is more powerful, more stable, and faster performing than N1.
The main CPU of the N2 is based on big.Little architecture which integrates a quad-core ARM Cortex-A73 CPU cluster and a dual core Cortex-A53 cluster with a new generation Mali-G52 GPU.
Thanks to the modern 12nm silicon technology, the A73 cores runs at 1.8Ghz without thermal throttling using the stock metal-housing heatsink allowing a robust and quiet computer.
The CPU multi-core performance is around 20% faster and the 4GByte DDR4 RAM is 35% faster than the N1. The N2’s DDR4 RAM is running at 1320Mhz while N1’s DDR3 was running at 800Mhz.
The large metal housing heatsink is designed to optimize the CPU and RAM heat dissipation and minimize throttling. The CPU is placed on the bottom side of the PCB to establish great thermal characteristics.

Board Detail


N2 block diagram

CPU performance
Dhrystone-2, Double-Precision Whetstone, Sysbench and Memory bandwidth benchmark results show the N2 system performance comes out ahead of other popular ARM SBCs.

GPU performance
The Mali-G52 runs at 846Mhz and is ~10% faster than Mali-T860MP4 in ODROID-N1.
The Mali-G52 is the second Bifrost-based mainstream GPU from Arm.
There are two Shader Processors in the GPU and each core has three Execution Engines. This is sometimes referred to as MP6.
GPU performance was measured with glmark2-es2 “–off-screen” option.

RAM performance
Why does DDR4 matter? 1320Mhz-DDR4 is 35% faster than 800Mhz-DDR3.
ODROID-N2 DDR4 RAM runs at 1320Mhz.

CPU frequency vs performance
Some ODROID users may recall the lower than expected clock speed in S905.
We ran a test to double check the ratio between CPU clock frequency and performance.
cmd : sysbench cpu –max-cpu-prime=100000 –time=10 –threads=6 run

Thermal characteristics 
To check the thermal throttling, we ran some heavy CPU and GPU loads together on the SoC and monitored temperature. We ran the test within a chamber that keeps the ambient temperature at 35°C.
cmd : stress-ng –cpu 6 –cpu-method matrixprod && glmark2-es2-fbdev –off-screen –run-forever

Gbit Ethernet
According to our iperf test result, the throughput performance was near 1Gbps.

USB 3.0 hosts
We measured the USB transfer speed with a UAS capable SSD.
The average ~340MB/s of throughput should be acceptable for many application.
Since four USB host ports share a single root hub, the transfer rate must be lower if you use multiple USB devices at the same time.

eMMC storage performance
Sequential read and write speed is over 150MB/s and 125MB/s respectively.
4K random access performance is reasonably fast too. iozone test result are as follows.

Micro-SD UHS performance
Using properly implemented UHS dynamic voltage scaling, the sequential read and write speed is over 70MB/s and 55MB/s respectively.

The previous S905 SoC couldn’t activate the UHS mode once the system boots from eMMC. But S922X can keep using the UHS mode with the eMMC module simultaneously.

Sound DAC
ODROID-N2 has an on-board high quality 384Khz/32bit stereo audio line output.
Dynamic range and SNR is near 100dB and Total-Harmonic-Distortion is lower than 0.006%. You can enjoy Hi-Fi sound quality without an external expensive audio DAC.

Signal to Noise Ratio : 1KHz (384KHz, 32bit, 2-ch)

THD + N Ratio : 1KHz (384KHz, 32bit, 2-ch)

Frequency Response : 20Hz – 20KHz(384KHz, 32bit, 2-ch)

SPI Flash memory boot
ODROID-N2 can boot from on-board SPI memory instead of uSD memory or eMMC cards.
The on-board SPI memory is 8MB in size and can include the bootstrap binaries, U-boot, bare minimum Linux kernel, and a ramdisk that includes “Petitboot”. The “Petitboot” software provides a user friendly interface and allows users to select a boot media.
Unfortunately, since the SPI bus on S922X shares the hardware interface with eMMC, the SPI flash memory on ODROID-N2 is only accessible at boot until the eMMC hardware block is activated. So you have to remove eMMC module and boot from a SD card to update firmware in the SPI flash easily.

RTC
ODROID-N2 has an on-board RTC component, NXP PCF8563, interfaced to the I2C bus and can use a backup battery as an alternative power source while the main power source is absent. Since the actually measured power consumption is less than 1uA, the RTC can run for over 10 years with a CR2032 backup battery. Also, this will let your ODROID-N2 wake up at a certain time once you set an alarm time and shutdown it.

Crypto Engine
The ARMv8 architecture supports hardware accelerated crypto extensions for building a secure system. As expected, we could see very decent openSSL performance with ODROID-N2.
cmd: openssl speed sha256 (8KByte)

GPIO (40Pin header)

The N2 GPIO interface is similar to C2 and fully supports a 3.3Volt interface while N1 could only support 2.8Volt IO. This is beneficial for using various peripherals without complicated level shifters.
Another big improvement is a faster SPI bus interface. Its maximum frequency is over 150Mhz, and we will try to implement a DMA driven SPI driver for faster LCD display.

Power consumption
Idle state: 1.6~1.8 Watt
Heavy load state: 5.2~5.3 Watt (stress-ng –cpu 6 –cpu-method matrixprod)
No cables are attached except DC power input and USB-UART debug console cable.

Software support

Linux
An Ubuntu 18.04 LTS image is available with Kernel version 4.9.152 LTS at this moment. This kernel version will be officially supported until Jan, 2023.
A hardware accelerated video decoder (VPU) driver is ready. We have c2player and kplayer examples which can play 4K/UHD H.265 60fps videos smoothly on the framebuffer of ODROID-N2 HDMI output.
The Mali G52 GPU Linux driver works only on the framebuffer. We tested the latest PPSSPP emulation and it can handle x3 scaling on a 4K display nicely with well implemented VSYNC.
There will be a Linux Wayland driver a few months later. We are intensively working on it together with Arm and Amlogic.
Unfortunately, there is no X11 GPU driver since Arm has no plan to support X11 for Bifrost GPUs anymore.
We hope that the Panfrost open source driver can be ported to ODROID-N2 soon.

Android
Android 9 Pie is ready, and we will release a full source code BSP and pre-built image together.
At this moment, Android user land supports only a 32bit system while the Kernel runs in 64bit mode.
We will eventually try to support a 64bit Android system with Vulkan capable GPU driver in a few months.

Availability and price
We will start to sell from very late March and the first shipment will start early April. There is no plan to accept any pre-order.
2GB model: $63
4GB model: $79

Debugging Party
We will send some engineering samples to our friendly community members very soon.
I hope we can ship the samples in this week.

WiKi pages: https://wiki.odroid.com/odroid-n2/odroid-n2
Github Kernel: https://github.com/hardkernel/linux/tree/odroidn2-4.9.y
Github u-boot: https://github.com/hardkernel/u-boot/tr … 2-v2015.01

Specification

You can choose between two colors: semi-transparent dark black and clear white.
The price will be only $4. :D

SuperTuxKart on ODROID-XU4

Karts. Nitro. Action! SuperTuxKart(STK) is a 3D open-source arcade racer with a variety characters, tracks, and modes to play.
SuperTuxKart is a free kart racing game. It focuses on fun and not on realistic kart physics.

Recently, STK developers updated their source code to support the OpenGL-ES 3.x and we can play the nice game on the ODROID-XU4 natively.

Let’s try to compile the source code and build it! This instruction was tested on the official Ubuntu 16.04 image version 20171212.
If you are an OGST image user, simply install it with “apt-get install supertuxkart-odroid”.

1. Install required packages to build the source code.

sudo apt install git build-essential cmake libbluetooth-dev libcurl4-gnutls-dev libfreetype6-dev libfribidi-dev libgl1-mesa-dev libjpeg-dev libogg-dev libopenal-dev libpng-dev libvorbis-dev libxrandr-dev mesa-common-dev pkg-config zlib1g-dev libtool subversion

2. Download the latest STK source code from the official Github.

git clone https://github.com/supertuxkart/stk-code stk-code

You have to download the game assets too from SVN. It took quite long time.

svn co https://svn.code.sf.net/p/supertuxkart/code/stk-assets stk-assets

3. Apply a patch to fix the color depth issue and OpenGL ES 3.x support.

cd stk-code
wget -O supertuxkart.patch https://pastebin.com/raw/ZpB2CjZy
patch -p0 < supertuxkart.patch

The patch was made by @AreaScout forum member.

4. Compiling

mkdir cmake_build
cd cmake_build
cmake .. -DUSE_GLES2=1
make -j8

Compiling took around 30 minutes.

5. Test and install
Run the game with this command since 720p mode shows much better performance than 1080p.

DISPLAY=:0.0 ./bin/supertuxkart --screensize=1280x720 --fullscreen

You can install your build system-wide:

sudo make install

OpenGL ES 3.x shows more detail and beautiful 3D rendering than 2.0. Look at the racing circuit floor.

OpenGL ES3.x
Image

OpenGL ES2.0
Image

References.
Source code : https://github.com/supertuxkart/stk-code
Discussion   : https://forum.odroid.com/viewtopic.php?f=98&t=29319
deb package : https://forum.odroid.com/viewtopic.php?f=91&t=29366

How to control ODROID-XU4 Cooling fan

ODROID-XU4 CPU has four 2Ghz big cores and four 1.4Ghz LITTLE cores.

It also has six GPU cores as well as 2GByte DRAM on the SoC with a package on package(PoP) process.

So this tiny SoC power consumption can be up to 10 Watt and it generates a lot of heat.
Therefore, we had to attach a cooling fan to the SoC to minimize the thermal throttling.
Exa_fan_comvec_cmyk_300.jpg
 
Once the system boots, the cooling fan runs at full speed by the u-boot(bootloader) initialization code.
When the Linux Kernel runs, the thermal management driver controls the fan speed automatically.
There are three threshold points 60°C, 70°C and 80°C.

Trip point 0 1 2
Temperature 60°C 70°C 80°C
Fan speed 120 180 240





The fan speed value is connected to 8bit(0~255) PWM control register.

When the SoC temperature is lower than 60°C, the fan doesn’t rotate.

If you need to adjust the temperature threshold values, just modify the thermal control nodes in sysfs.

For example, if you want to set trip point 1 to be activated at 30°C, you can just write a value on them.

$ echo 30000 | sudo tee /sys/devices/virtual/thermal/thermal_zone{0,1,2,3}/trip_point_0_temp
$ cat /sys/devices/virtual/thermal/thermal_zone{0,1,2,3}/trip_point_0_temp
# results
30000
30000
30000
30000

Then the fan starts spinning at 30°C.

If you want to do that automatically, write some code in the /etc/rc.local file.
Copy the following codes and paste.

# Target temperature: 30°C, 50°C, 70°C
TRIP_POINT_0=30000
TRIP_POINT_1=50000
TRIP_POINT_2=70000

echo $TRIP_POINT_0 > /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp
echo $TRIP_POINT_0 > /sys/devices/virtual/thermal/thermal_zone1/trip_point_0_temp
echo $TRIP_POINT_0 > /sys/devices/virtual/thermal/thermal_zone2/trip_point_0_temp
echo $TRIP_POINT_0 > /sys/devices/virtual/thermal/thermal_zone3/trip_point_0_temp

echo $TRIP_POINT_1 > /sys/devices/virtual/thermal/thermal_zone0/trip_point_1_temp
echo $TRIP_POINT_1 > /sys/devices/virtual/thermal/thermal_zone1/trip_point_1_temp
echo $TRIP_POINT_1 > /sys/devices/virtual/thermal/thermal_zone2/trip_point_1_temp
echo $TRIP_POINT_1 > /sys/devices/virtual/thermal/thermal_zone3/trip_point_1_temp

echo $TRIP_POINT_2 > /sys/devices/virtual/thermal/thermal_zone0/trip_point_2_temp
echo $TRIP_POINT_2 > /sys/devices/virtual/thermal/thermal_zone1/trip_point_2_temp
echo $TRIP_POINT_2 > /sys/devices/virtual/thermal/thermal_zone2/trip_point_2_temp
echo $TRIP_POINT_2 > /sys/devices/virtual/thermal/thermal_zone3/trip_point_2_temp

Reboot and check if the changes applied well or not.

If you want to change the fan speed values in trip points, modify this system node.

/sys/devices/platform/pwm-fan/hwmon/hwmon0/fan_speed

You can check current fan speed scaling.

$ cat /sys/devices/platform/pwm-fan/hwmon/hwmon0/fan_speed
# results
0 120 180 240

You can adjust these values by writing value set to the file.
If you want to make your fan more aggressively, you can write like below.

$ echo "0 204 220 240" | sudo tee /sys/devices/platform/pwm-fan/hwmon/hwmon0/fan_speed
# results
0 204 220 240

If you want to do that automatically, write some code in the /etc/rc.local file.
Copy the following codes and paste.

# Target fan speed (PWM): 0, 204, 220, 240
echo "0 204 220 240" > /sys/devices/platform/pwm-fan/hwmon/hwmon0/fan_speed

You can also control the fan speed fully manually.

# Set fan to manual mode
$ echo 0 | sudo tee /sys/devices/platform/pwm-fan/hwmon/hwmon0/automatic
# Set speed to 100%
$ echo 255 | sudo tee /sys/devices/platform/pwm-fan/hwmon/hwmon0/pwm1

 

If you need further information, refer this WiKi page.
https://wiki.odroid.com/odroid-xu4/application_note/manually_control_the_fan#fully_manual_way_to_control_the_fan_speed