AIO-3399J Development Board Review with Ubuntu 16.04

Regular readers will know that Firefly team sent  me several of their Rockchip boards for evaluation, and I started with a review of ROC-RK3328-CC development board powered by Rockchip RK3328 processor. This time, I went with the high-end AIO-3399J board comprised of a features-packed baseboard and a Rockchip RK3399 system-on-module.

Just like with the previous review, I’ve decided to focus on Linux support, in this case Xunbuntu 16.04, and I’ll do an Android review on the company releases Android 8.1 for Firefly-RK3399 board.

First Boot with AIO-3399J Board

Before booting the board, I inserted the heatsink, and connected the provided WiFi antennas. I also connected some devices and cables, including a mouse,  the male to male USB cable to the top USB 3.0 (OTG) port for firmware update, a HDMI cable to my TV, and Ethernet cable, as well as the serial debug board.

AIO-3399J WiFi, Heatsink, USB Firmware Update
Click to Enlarge

The final step was to connect the 12V power supply, and I immediately got output to the serial console (/dev/ttyUSB0 configured with 1,500,000 bps 8N1, no hardware flow control), and a few seconds later the Android 7.1 launcher showed up.

AIO-3399J Android 7.1
Click to Enlarge

But I wanted to run a Linux distributions, so I went over the download page, and selected the latest Ubuntu 16.04 image (AIO-3399J_xubuntu1604_20180119.7z), which actually happens to be Xubuntu 16.04 (Ubuntu + Xfce desktop environment).  Just make sure you select “Google Drive” instead of “Official” if you are outside of China, as the download speed should be much higher that way.

Now that we have out firmware file, we just need to follow the upgrade instructions for Linux or Windows with respectively Linux_Upgrade_Tool or AndroidTool.

My computer is running Ubuntu 18.04, so I went with the Linux method. First you need to make you’ve connected your male to male USB cable between your computer and the board with power connected.

AIO-3399J Reset & Recovery Buttons, Debug HeaderWe need to enter “loader mode” as follows: keep pressing the recovery button, press and release the reset button, and about two seconds later, release the recovery button.

If everything is working as expected, the serial console output should look like:


If you have not setup the serial console, that should not be a problem, and after uncompressing the firmware, we can flash it as follows:


This normally take about a minute or so, and that’s the output from the command upon success:


The board will be automatically reboot, and Xubuntu desktop should show on your HDMI TV/monitor after a few seconds.

AIO-3399J Development Board Review with Ubuntu 16.04
Click to Enlarge

I then remove the male to male USB cable, and instead added a USB keyboard, and a USB 3.0 drive. You may notice I had some overscan issues (edges cut) in the photo above, but setting aspect ratio to “Just Scan” in my LG television fixed the issue.

Here’s the very first boot serial log for reference:

The kernel booted in about 20 seconds.

Some system info with the usual commands:


It’s not exactly the most recent Ubuntu version, but everything else is as expected with a 15GB rootfs, and around 1.9GB total RAM. I won’t update Ubuntu at first, in case this breaks a few things, but I’ll do it later in this review.  The board detect all four partitions on my drives, but can only mount NTFS and EXT4 partition, since exFAT and BTRFS are not enabled in the kernel.

No modules are loaded since they are built-in the kernel like with ROC-RK3328-C, and gpios appears to be enable:


Firefly has one of the best documentation for drivers and I/Os I’ve seen so far, and they explain how to define the behavior in device tree files, program the drivers in C language, and debug with sysfs.

For example, we can see more details about the pins with the following commands:


Commands to turn off and on again one of the Blue LED close to the DC jack:


Command to read ADC values using sysfs:


and some PWM info:


AIo-3399J has many I/O headers, and all marked on the other side of the board.

AIO-3399J board pinout

3D Graphics (OpenGL ES) on AIO3399-J with Ubuntu 16.04

Let’s move to test whether 3D graphics acceleration is enabled by installating the usual tools:


es2_info reports Arm Midgard  r13p0 GPU driver is indeed loaded:


es2gears works OK with Midgard driver at around 55 fps.

RK3399 es2gearsglmark2-es2 could also run just fine, and with more sample than on ROC-RK3328-CC since OpenGL ES 3.2 is supported (and not just version 2.0),

RK3399 glmark2-es2
Click to Enlarge

glmark2-es2 output:


The score is 48, which is higher than Mali-450MP platform, but still not very high. But as on other Arm platfoms, performance is greatly limited by X11 calls, and if you run the sample offscreen, the score is much higher:


Anyway, there used to be a time where most boards did not support 3D graphics acceleration, but in recent times, it appears most now do.

In the past, I’ve also found out that upgrading the OS might overwrite some files and break support for 3D graphics, so I upgraded the system to Ubuntu 16.04.5:


and both samples could still work. So all good.

I also tried WebGL, and the WebGL Quake demo worked at about 50 fps, but some other would failed complaining about missing extension.

Video Playback on AIO3399-J with Ubuntu 16.04

Hardware video decoding support is a given in Android, but not so in Linux distributions. I could not find any pre-installed video player, so I installed ffmpeg, and tried to play some 1080p videos with ffplay and it does work.

Firefly AIO-3399J RK3399 Full HD H.264 Video ffplay
Click to Enlarge

Ignore the tearing in the screenshot above, as it’s just an effect of taking a screenshot. Sadly that also means hardware video decoding is not enabled, since it would normally rely on a separate hardware buffer that does not show in screenshot (a black area is normally shown). I could play H.264, H.265, and MPEG2 1080p videos reasonably smoothly with software video decoding, except in some scenes, especially when panning when the video is not as smooth as it could be.

AIO-3399J ffplay CPU usageSince the video play relies on software video decoding it takes a fair amount of resources. I’ve also tried to play 4K H.264 / H.265 videos but unsurprinslgy the processor is not fast enough for this tasks, and the videos just play in slow motion with many audio cuts. We’ll need to wait for hardware video decoding support, or switch to Android OS.

Browsing the Web with Chromium

Browsing the web works well, pages load fast, and scrolling is about as smooth as on my main PC. However, you still have to take into account the amount of RAM, especially if you have the 2GB RAM version like I do.

For example, when I tried to play Candy Crush Saga (Facebook) in Chromium would end up with “Aw, Snap!” page meaning the current tab crashed. The kernel log explains why:


So not enough memory even if a single tab, and no other program launched. That means it’s time to enable ZRAM:


Let’s double check we now have ZRAM (swap):


and try again.

Firefly AIO-3399J RK3399 Candy Crush Saga
Click to Enlarge

Yes! Success. The RAM is still on the limit with 512MB ZRAM, but at least I could play, and performance was very good. I could not see any difference against playing on my main PC (FX8350 program + NVIDIA GTX750 graphics card).

I would also play YouTube videos smoothly up to 720p, but 1080p video may have problems playing smoothly like in ODROID-XU4Q board.

Testing eMMC and USB 3.0 Storage Performance

I normally test storage performance with iozone (3), and installation is just one line.


The only problem is that installation would not work here. Iozone is part of multiverse repo, and it’s missing in /etc/apt/sources.list. So edit the files and add four following lines:


Now installation can be completed:


Another workaround would have been to use snaps, but there’s  configuration problem with snaps in the provided Ubuntu image:


Anyway,  we can start by testing the eMMC flash performance:


The write numbers looks normal and fairly good, but at first, I thought getting around 296MB/s read speeds on a 16GB eMMC flash is way too high.  But actually the chip is a Samsung KLMAG1JETD-B041 eMMC flash 5.1 capable of HS400 speeds, and based on data for older Samsung chips it is indeed possible to get close to 300 MB/s with a 16GB flash, at least in theory.

I switched to USB3 NTFS performance:


Write numbers look normal considering I’m using mechanical drives, and even a little low since I can normally get around 100MB/s write on that drive. However,read speed are 6 times faster than the typical performance from the drive, so let’s ignore them.

With that in mind, I’ve re-run the test on the EXT-4 partition of my drive, but this time with a 4GB file (twice the RAM):


It took  fairly long time, but at least all numbers are believable, and performance is roughly as expected, i.e. close to 100MB/s for sequential read and write operation.

This got me curious, so I repeated the eMMC flash test with a 4GB file:


But the results still look the same, so Firefly must have combined a high-end 16GB eMMC flash in their module together with proper implementation to achived those amazing read speeds. Random read values still appear to be too high though.

AIO-3399J also comes with M.2 NVMe SSD socket, which would have been interesting to test, but unfortunately I have no such SSD lying around.

Network performance – Gigabit Ethernet and 802.11ac WiFi

Gigabit Ethernet full duplex using iperf:


835 Mbps and 396 Mbps, so there’s an asymmetry while doing transfers in both direction at the same time.

But the number look better testing one direction at a time

  • Upload only:

  • Download only:


Gigabit Ethernet is almost maxed out in either direction.

I repeated the test for 802.11ac WiFi performance

  • upload only:

  • download only:


Download performance is good, but for some reasons upload could be better.

Final words

The provided Xubuntu 16.04 image works relatively well on AIO-3399J, and I’m pleased with overall performance, 3D graphics support, and good documentation for I/Os. However, hardware video decoding is not implemented, and there are few minor issues with the image such as problems with snap support, and some common apt repositories are not enabled by default. Android is probably a better option if you need 1080p or 4K video decoding.

AIO-3399J board is ideal if you need a development platform with many I/Os, and plan to use the company’s RK3399 Core-3399J system-on-module with your own custom carrier board.

AIO-3399J is sold for $165 on Firefly store with a power supply, the male to male USB cable, and two WiFi antennas. You should howevr consideing adding the heatsink to your order as well, and/or if your project requires it go with the 4GB RAM/16GB version for $235 instead. Sample price for Core-3399J SoM is respectively $95 and $119 for the 2GB and 4GB version.

Share this:

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

ROCK Pi 4C Plus
Subscribe
Notify of
guest
The comment form collects your name, email and content to allow us keep track of the comments placed on the website. Please read and accept our website Terms and Privacy Policy to post a comment.
24 Comments
oldest
newest
TLS
TLS
5 years ago

According to your own post, the eMMC speeds are not really too fast if they use eMMC 5.1, although they are slightly better than the best performance in this list https://www.cnx-software.com/2017/06/13/micro-sd-cards-for-development-boards-classes-tools-benchmarks-reliability-and-tips-tricks/
That’s a one year old post though and things seem to have improved.
Unfortunately I can’t seem to find any performance numbers for the KLMAG1JETD-B041 chip on the board, but it would appear to be a higher performance eMMC chip.

tkaiser
tkaiser
5 years ago

When I tested 2 other RK3399 devices also with 16GB Samsung eMMC 5.1 read speeds were also as high as 300 MB/s: https://forum.armbian.com/topic/7498-nanopc-t4/ Wrt NTFS: FUSE filesystems ignore ‘direct IO’ parameter so iozone is useless here. Data comes from buffers and not disk. Also I would always run htop in parallel to get a clue about CPU affinity. iperf3 in dual direction mode running on a little core might simply be bottelenecked by CPU. The vast majority of ‘vendor OS images’ doesn’t care about CPU and IRQ affinity at all and if HMP scheduling is broken too cpu0 (a little… Read more »

tkaiser
tkaiser
5 years ago

Hardkernel provided iozone numbers for all these Samsung 5.1 eMMCs they also sell for their ODROIDs. Seems with RK3399 there is a write limitation at around 150 MB/s while the 32GB is faster than specs: https://pastebin.com/ePUCXyg6 (all tests done on ODROID-N1)

blu
blu
5 years ago

Great carrier board, but according to the store page that $165 -> $235 difference comes only form the extra 2GB RAM — that cant be right, can it?

crashoverride
crashoverride
5 years ago

What could have been … https://forum.odroid.com/viewtopic.php?f=150&t=30129#p215221 sudo cpufreq-set -c 0-5 -g performance taskset -c 4-5 glmark2-es2 ======================================================= glmark2 2017.07 ======================================================= OpenGL Information GL_VENDOR: ARM GL_RENDERER: Mali-T860 GL_VERSION: OpenGL ES 3.2 v1.r14p0-01rel0-git(966ed26).f44c85cb3d2ceb87e8be88e7592755c3 ======================================================= [build] use-vbo=false: FPS: 299 FrameTime: 3.344 ms [build] use-vbo=true: FPS: 340 FrameTime: 2.941 ms [texture] texture-filter=nearest: FPS: 349 FrameTime: 2.865 ms [texture] texture-filter=linear: FPS: 345 FrameTime: 2.899 ms [texture] texture-filter=mipmap: FPS: 352 FrameTime: 2.841 ms [shading] shading=gouraud: FPS: 296 FrameTime: 3.378 ms [shading] shading=blinn-phong-inf: FPS: 301 FrameTime: 3.322 ms [shading] shading=phong: FPS: 288 FrameTime: 3.472 ms [shading] shading=cel: FPS: 285 FrameTime: 3.509 ms [bump] bump-render=high-poly: FPS: 229 FrameTime:… Read more »

blu
blu
5 years ago

The long-forgotten art of EXA drivers where the CPU does not blit the GPU-produced frame in thrice the time it took the GPU to render the frame? ; ) Is that with your customisations?

memeka
memeka
5 years ago

Depends on the drivers I guess – in his case, different X11 server. Just to add to the numbers, here’s mine (also on RK3399) with vsync on (limited to 60fps): $ taskset -c 4-5 glmark2-es2-wayland ======================================================= glmark2 2014.03+git20150611.fa71af2d ======================================================= OpenGL Information GL_VENDOR: ARM GL_RENDERER: Mali-T860 GL_VERSION: OpenGL ES 3.2 v1.r14p0-01rel0-git(966ed26).31c289ec747d618d519d62e13e34cef1 ======================================================= [build] use-vbo=false: FPS: 60 FrameTime: 16.667 ms [build] use-vbo=true: FPS: 60 FrameTime: 16.667 ms [texture] texture-filter=nearest: FPS: 59 FrameTime: 16.949 ms [texture] texture-filter=linear: FPS: 60 FrameTime: 16.667 ms [texture] texture-filter=mipmap: FPS: 60 FrameTime: 16.667 ms [shading] shading=gouraud: FPS: 60 FrameTime: 16.667 ms [shading] shading=blinn-phong-inf: FPS: 60 FrameTime: 16.667 ms… Read more »

tkaiser
tkaiser
5 years ago

Can you please run https://github.com/ThomasKaiser/sbc-bench

Should take 40 min max (unattended) and the ‘neon’ test serves as a task that shows whether heat dissipation is sufficient or not. Curious how much throttling will occur and if numbers are comparable to other RK3399 devices.

tkaiser
tkaiser
5 years ago

Oh, you’re running Xenial. Then better stop (I would need to test with 16.04 myself first)

tkaiser
tkaiser
5 years ago

Nice. When comparing with RockPro64 (or NanoPC T4) then it’s obvious that Firefly uses a different BLOB for DRAM initialization and setting clockspeeds. All cpufreq OPP are slightly clocked lower compared to e.g. RockPro64 with the BLOBs we use there: http://ix.io/1iFp

Also interesting how low memory bandwidth is but this is most probably related to HDMI being active.

And as expected the little heatsink is not sufficient. Throttling even occurred with single threaded stuff and even with tinymembench already.

tkaiser
tkaiser
5 years ago

Yes, can be spotted in monitoring output: Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 12:45:34: 1800/1416MHz 1.50 24% 1% 22% 0% 0% 0% 62.5°C 12:46:34: 1800/1416MHz 1.56 31% 2% 28% 0% 0% 0% 70.0°C 12:47:34: 1608/1416MHz 1.44 27% 2% 25% 0% 0% 0% 71.7°C 12:48:34: 1416/1416MHz 1.81 30% 2% 27% 0% 0% 0% 72.8°C 12:49:34: 1608/1416MHz 1.77 28% 2% 26% 0% 0% 0% 73.9°C 12:50:34: 1608/1416MHz 1.65 26% 1% 23% 0% 0% 0% 72.8°C 12:51:34: 1608/1416MHz 1.70 26% 1% 24% 0% 0% 0% 71.1°C 12:52:34: 1800/1416MHz 1.69 25% 1% 23% 0% 0% 0% 69.4°C 123456789 Time       big.LITTLE  … Read more »

Jeff Witz
5 years ago

165$ for a board that is unable to play 4k video while the GPU can, it is for me a good thing. I have the same issue with the Orange Pi Lite2 (same {C|G}PU) and I’m clearly not happy with it while it cost less than 30$ …
Playing video is something mandatory for SoC boards, the difficulties with Mali GPU is very annoying …

tkaiser
tkaiser
5 years ago

The Rockchip RK3399 on this board here and the Allwinner H6 on the board you own are ‘a bit’ different. Different CPU (RK3399 also has 2xA72), different Mali GPUs (T860MP4 vs. Mali-T720MP2) and totally different video engines (some call VPU).

The GPU (just 3D and some 2D acceleration) is not relevant when it’s about HW accelerated video encoding/decoding and of course these SoCs can play video as advertised when used as advertised (with the vendor’s BSP running Android)

Jeff Witz
5 years ago

You’re totally right, but finally those boards are only usable on android for mediacenter purpose

Yas
Yas
5 years ago

Hi,

I’ve just received a similar board and no serial interface shows up when I connect it to my Ubuntu Laptop. Any insight into what can be the problem? Should I install specific drivers for it to be detected?

Yas
Yas
5 years ago

There is a problem with my USB to TTL board apparently. I did install linux on it however and already facing another probllem.
I have a Quectel modem EC20 implemented on the board but I cannot activate the mobile broadband connection. The network manager detects the interface, I enter my APN configuration but then I’m still asked for a network password… I tried to give the password that is included in the apn configuration but it doesnt work.
Could you please help me with this?

Khadas VIM4 SBC