We’ve already had a look at the Mixtile Core 3588E NVIDIA Jetson Nano/TX2 NX/Xavier NX/Orin Nano compatible Rockchip RK3588 SO-DIMM system-on-module in the first part of the review with an unboxing and first boot with an Ubuntu 22.04 OEM installation.
I’ve now had more time to play with the devkit comprised of a Core 3588 module in 16GB/128GB configuration and a Leetop A206 carrier board with low-level features testing, some benchmarks, multimedia testing with 3D graphics acceleration and video playback, some AI tests using the built-in 6 TOPS NPU and the RKNPU2 toolkit, and finally I also tried out the system-on-module with the carrier board from an NVIDIA Jetson Nano developer kit.
Ubuntu 22.04 System info
We had already checked some of the system information in the first part of the Mixtile Core 3588E review, but here’s a reminder:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
jaufranc@Mixtile-RK3588E:~$ uname -a Linux Mixtile-RK3588E 5.10.160-rockchip #18 SMP Wed Dec 6 15:11:42 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux jaufranc@Mixtile-RK3588E:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS" jaufranc@Mixtile-RK3588E:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 1.6G 2.7M 1.6G 1% /run /dev/mmcblk0p2 113G 7.5G 101G 7% / tmpfs 7.7G 0 7.7G 0% /dev/shm tmpfs 5.0M 8.0K 5.0M 1% /run/lock tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/mmcblk0p1 512M 101M 411M 20% /boot/firmware tmpfs 1.6G 60K 1.6G 1% /run/user/0 tmpfs 1.6G 76K 1.6G 1% /run/user/130 tmpfs 1.6G 68K 1.6G 1% /run/user/1000 jaufranc@Mixtile-RK3588E:~$ free -mh total used free shared buff/cache available Mem: 15Gi 601Mi 13Gi 47Mi 1.4Gi 14Gi Swap: 2.0Gi 0B 2.0Gi |
I also ran inxi to check a few more details.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
jaufranc@Mixtile-RK3588E:~$ sudo inxi -Fc0 System: Host: Mixtile-RK3588E Kernel: 5.10.160-rockchip aarch64 bits: 64 Console: pty pts/1 Distro: Ubuntu 22.04.3 LTS (Jammy Jellyfish) Machine: Type: ARM System: Mixtile Core 3588E details: N/A serial: cf7045b2d349673e CPU: Info: 3x 4-core model: N/A variant-1: cortex-a55 variant-2: cortex-a76 bits: 64 type: MCP AMP cache: L2: 3x 512 KiB (1.5 MiB) Speed (MHz): avg: 2076 min/max: 408/1800:2352 cores: 1: 1800 2: 1800 3: 1800 4: 1800 5: 2352 6: 2352 7: 2352 8: 2352 Graphics: Device-1: display-subsystem driver: rockchip_drm v: N/A Device-2: mali-bifrost driver: mali v: N/A Device-3: rk3588-dw-hdmi driver: dwhdmi_rockchip v: N/A Display: server: X.org v: 1.21.1.4 with: Xwayland v: 22.1.1 driver: X: loaded: modesetting gpu: rockchip_drm,mali,dwhdmi_rockchip tty: 80x24 resolution: 1920x1080 Message: GL data unavailable in console for root. Audio: Device-1: rk3588-dw-hdmi driver: dwhdmi_rockchip Device-2: hdmi driver: rk_hdmi_sound Sound Server-1: ALSA v: k5.10.160-rockchip running: yes Sound Server-2: PulseAudio v: 15.99.1 running: yes Sound Server-3: PipeWire v: 0.3.48 running: yes Network: Device-1: rk3588-gmac driver: rk_gmac_dwmac IF: eth0 state: up speed: 1000 Mbps duplex: full mac: 66:fc:eb:b8:d9:4d Drives: Local Storage: total: 115.25 GiB used: 7.87 GiB (6.8%) ID-1: /dev/mmcblk0 model: AKJ21X size: 115.25 GiB Partition: ID-1: / size: 112.81 GiB used: 7.77 GiB (6.9%) fs: ext4 dev: /dev/mmcblk0p2 Swap: ID-1: swap-1 type: file size: 2 GiB used: 0 KiB (0.0%) file: /swapfile Sensors: System Temperatures: cpu: 39.8 C mobo: N/A Fan Speeds (RPM): cpu: 0 Info: Processes: 276 Uptime: 6m Memory: 15.35 GiB used: 790.8 MiB (5.0%) Init: systemd runlevel: 5 Shell: Sudo inxi: 3.3.13 |
The full boot log from the serial console can also be found on pastebin. We can see the Mixtile Core 3588E machine comes with a Rockchip RK3588 octa-core processor clocked at 1,800 MHz (Cortex-A55) and 2,352 MHz (Cortex-A76), 16GB RAM, 128GB eMMC storage (AKJ21X device), connected to an HDMI display and Gigabit Ethernet. The system temperature is shown to be 39.8C at idle, helped with the PWM fan that’s active most of the time, but that’s not really an issue since I find it pretty quiet.
[Update January 9, 2024: Mixtile has a new firmware image with Wayland and GPIO enabled by default, that should fix some of the issues I encountered below. See release notes and download link]
Mixtile Core 3588E hardware features testing in Ubuntu 22.04
Mixtile has some documentation and I especially went through the “Hardware tutorials” to check most of the features. I had to skip the MIPI CSI camera test because they only work with IMX219 camera modules and I don’t own any.
M.2 sockets with NVMe SSD and WiFi 6 module
But I did install a 256GB M.2 NVMe SSD (Apacer AS2280P4 with up to 1,800 MB/s read speed and 1,100 MB/s write speed) and a Realtek RTL8852BE WiFi 6 and Bluetooth 5.2 module that I took from the Radxa ROCK 5B SBC in the M.2 socket on the bottom side of the Leetop A206 carrier board.
Let’s boot the system and check both the M.2 NVMe SSD and RealTek WiFi 6 module are properly detected:
1 2 3 4 5 6 7 8 9 |
jaufranc@Mixtile-RK3588E:~$ inxi --disk Drives: Local Storage: total: 353.72 GiB used: 16.45 GiB (4.7%) ID-1: /dev/mmcblk0 model: AKJ21X size: 115.25 GiB ID-2: /dev/nvme0n1 vendor: Apacer model: AS2280P4 256GB size: 238.47 GiB jaufranc@Mixtile-RK3588E:~$ inxi --network Network: Device-1: Realtek driver: rtl8852be Device-2: rk3588-gmac driver: rk_gmac_dwmac |
Let’s quickly check the performance of the M.2 SSD:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
jaufranc@Mixtile-RK3588E:~$ pmount /dev/nvme0n1p1 jaufranc@Mixtile-RK3588E:~$ pushd /media/nvme0n1p1/ jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ mount | grep nvme /dev/nvme0n1p1 on /media/nvme0n1p1 type ext4 (rw,nosuid,nodev,noexec,relatime,errors=remount-ro,user) jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.489 $ Compiled for 64 bit mode. Build: linux Output is in kBytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 166031 246955 44753 44442 44269 91564 102400 16 396742 683760 145979 143805 142192 286068 102400 512 1485157 1751026 825953 829397 835134 1822126 102400 1024 1834305 1979094 1246027 1260139 1248966 1943258 102400 16384 2272509 2360523 2229826 2280516 2265492 1997196 iozone test complete. |
That would be up to 2272 MB/s writes and 2229 MB/s reads, and there must be an issue before it’s faster than what the SSD is capable of and we’re already using EXT4 with direct I/Os… I tried the command with different sizes, but I got the same results. I did another test with FIO:
1 2 3 4 5 6 7 8 |
jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ sudo apt install fio jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ sudo mkdir fiotest jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ sudo fio --directory=/media/nvme0n1p1/fiotest --direct=1 --rw=read --bs=1024k --ioengine=libaio --iodepth=64 --size=4G --runtime=10 --numjobs=4 --group_reporting --name=fio-rand-read-sequential --eta-newline=1 | grep READ READ: bw=1743MiB/s (1828MB/s), 1743MiB/s-1743MiB/s (1828MB/s-1828MB/s), io=16.0GiB (17.2GB), run=9398-9398msec jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ sudo fio --directory=/media/nvme0n1p1/fiotest --direct=1 --rw=write --bs=1024k --ioengine=libaio --iodepth=64 --size=4G --runtime=10 --numjobs=4 --group_reporting --name=fio-rand-write-sequential --eta-newline=1 | grep WRITE WRITE: bw=867MiB/s (909MB/s), 867MiB/s-867MiB/s (909MB/s-909MB/s), io=8780MiB (9206MB), run=10132-10132msec |
This looks closer to the theoretical performance of the Apacer SSD with 1828MB/s reads, and 909MB/s writes. In any case, the M.2 PCIe socket is performing to expectations.
While I was focused on storage testing, I also tested the eMMC flash with iozone:
1 2 3 4 5 6 7 8 9 10 11 12 |
jaufranc@Mixtile-RK3588E:/media/nvme0n1p1$ popd ~ jaufranc@Mixtile-RK3588E:~$ sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 66310 42131 26857 25340 21680 38597 102400 16 74582 91848 56797 56601 49706 96617 102400 512 211969 221025 233683 228160 206900 213009 102400 1024 236763 228521 269734 261192 235478 230699 102400 16384 258144 255958 301140 288659 285248 263243 iozone test complete. |
A sequential read speed of 301 MB/s and a sequential write speed of 258 MB/s seems pretty good for a 128GB eMMC flash.
Let’s now focus our attention on the WiFi module. I could connect to WiFi with no issue although it shows not one but two RealTek wireless devices, but it apparently normal for this specific module.
I connected both using 5 GHz WiFi and the link speed is 1.201 Gbps:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
jaufranc@Mixtile-RK3588E:~$ iwconfig wlan1 wlan1 IEEE 802.11AX ESSID:"CNX_Software_Xiaomi_5G" Nickname:"<WIFI@REALTEK>" Mode:Managed Frequency:5.18 GHz Access Point: 3C:CD:57:F5:AF:91 Bit Rate:1.201 Gb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=86/100 Signal level=86/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 jaufranc@Mixtile-RK3588E:~$ iwconfig wlP2p33s0 wlP2p33s0 IEEE 802.11AX ESSID:"CNX_Software_Xiaomi_5G" Nickname:"<WIFI@REALTEK>" Mode:Managed Frequency:5.18 GHz Access Point: 3C:CD:57:F5:AF:91 Bit Rate:1.201 Gb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=86/100 Signal level=86/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 |
The download and upload speeds were tested using iperf3 and UP Xtreme i11 mini PC’s 2.5 GbE interface on the other side:
- Upload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
jaufranc@Mixtile-RK3588E:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 Connecting to host 192.168.31.12, port 5201 [ 5] local 192.168.31.148 port 53782 connected to 192.168.31.12 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 768 MBytes 645 Mbits/sec 5 3.15 MBytes [ 5] 10.00-20.00 sec 640 MBytes 537 Mbits/sec 118 3.58 MBytes [ 5] 20.00-30.00 sec 705 MBytes 591 Mbits/sec 51 3.58 MBytes [ 5] 30.00-40.00 sec 729 MBytes 611 Mbits/sec 142 3.01 MBytes [ 5] 40.00-50.00 sec 630 MBytes 528 Mbits/sec 146 3.27 MBytes [ 5] 50.00-60.00 sec 724 MBytes 607 Mbits/sec 96 3.07 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 4.10 GBytes 587 Mbits/sec 558 sender [ 5] 0.00-60.05 sec 4.10 GBytes 586 Mbits/sec receiver iperf Done. |
- Download
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
jaufranc@Mixtile-RK3588E:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 -R Connecting to host 192.168.31.12, port 5201 Reverse mode, remote host 192.168.31.12 is sending [ 5] local 192.168.31.148 port 42178 connected to 192.168.31.12 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 630 MBytes 528 Mbits/sec [ 5] 10.00-20.00 sec 477 MBytes 400 Mbits/sec [ 5] 20.00-30.00 sec 832 MBytes 698 Mbits/sec [ 5] 30.00-40.00 sec 784 MBytes 658 Mbits/sec [ 5] 40.00-50.00 sec 866 MBytes 726 Mbits/sec [ 5] 50.00-60.00 sec 431 MBytes 361 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.04 sec 3.93 GBytes 562 Mbits/sec 798 sender [ 5] 0.00-60.00 sec 3.93 GBytes 562 Mbits/sec receiver iperf Done. |
586 Mbps uploads and 562 Mbps downloads are pretty good in this testbed, although there were lots of fluctuations in the download test with speeds ranging from 400 Mbps to 726 Mbps. The same module in the Rock 5B SBC delivered 821 Mbps average download speed and 420 Mbps upload speeds in the same environment and test conditions.
I reconnected the Ethernet cable to quickly check gigabit Ethernet with a bidirectional (full-duplex) test while I was at it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
jaufranc@Mixtile-RK3588E:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 --bidir Connecting to host 192.168.31.12, port 5201 [ 5] local 192.168.31.212 port 55602 connected to 192.168.31.12 port 5201 [ 7] local 192.168.31.212 port 55618 connected to 192.168.31.12 port 5201 [ ID][Role] Interval Transfer Bitrate Retr Cwnd [ 5][TX-C] 0.00-10.00 sec 1.08 GBytes 929 Mbits/sec 0 604 KBytes [ 7][RX-C] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec [ 5][TX-C] 10.00-20.00 sec 1.08 GBytes 930 Mbits/sec 0 918 KBytes [ 7][RX-C] 10.00-20.00 sec 1.09 GBytes 938 Mbits/sec [ 5][TX-C] 20.00-30.00 sec 1.09 GBytes 932 Mbits/sec 0 918 KBytes [ 7][RX-C] 20.00-30.00 sec 1.09 GBytes 938 Mbits/sec [ 5][TX-C] 30.00-40.00 sec 1.09 GBytes 932 Mbits/sec 0 918 KBytes [ 7][RX-C] 30.00-40.00 sec 1.09 GBytes 938 Mbits/sec [ 5][TX-C] 40.00-50.00 sec 1.09 GBytes 932 Mbits/sec 0 918 KBytes [ 7][RX-C] 40.00-50.00 sec 1.09 GBytes 938 Mbits/sec [ 5][TX-C] 50.00-60.00 sec 1.08 GBytes 931 Mbits/sec 0 1.33 MBytes [ 7][RX-C] 50.00-60.00 sec 1.09 GBytes 938 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID][Role] Interval Transfer Bitrate Retr [ 5][TX-C] 0.00-60.00 sec 6.50 GBytes 931 Mbits/sec 0 sender [ 5][TX-C] 0.00-60.04 sec 6.50 GBytes 930 Mbits/sec receiver [ 7][RX-C] 0.00-60.00 sec 6.55 GBytes 938 Mbits/sec 0 sender [ 7][RX-C] 0.00-60.04 sec 6.55 GBytes 937 Mbits/sec receiver iperf Done. |
No problem here. The review of a Mixtrile Core 3588E devkit is going well so far in Ubuntu.
RTC and serial debug port test
I haven’t got a spare coin-cell battery, but I could still test the RTC.
1 2 3 4 5 |
jaufranc@Mixtile-RK3588E:~$ date อา. 24 ธ.ค. 2566 11:20:01 +07 jaufranc@Mixtile-RK3588E:~$ sudo hwclock 2023-12-24 11:20:03.310212+07:00 jaufranc@Mixtile-RK3588E:~$ sudo hwclock -w |
That’s OK, once you take into account that the locale is set to Thailand and the Buddhist year 2566 corresponds to the international year 2023.
I also connected a serial debug board to have access to the board without Ethernet or display as shown above.
After disconnecting the Ethernet cable (I had no WiFi during that test), I rebooted the Ubuntu, and I used BootTerm with a baudrate of 1,500,000 bps on my Ubuntu laptop to access the serial console on the Mixtile Core 3588E:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
jaufranc@CNX-LAPTOP-5:~$ bt -b 1500000 No port specified, using ttyUSB0 (last registered). Use -l to list ports. Trying port ttyUSB0... Connected to ttyUSB0 at 1500000 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. root@Mixtile-RK3588E:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 66:fc:eb:b8:d9:4d brd ff:ff:ff:ff:ff:ff root@Mixtile-RK3588E:~# date อา. 24 ธ.ค. 2566 11:58:10 +07 root@Mixtile-RK3588E:~# hwclock 2023-12-24 11:58:14.668220+07:00 |
The system date and RTC are slightly out of sync. I had no battery, so I expected the system to read the time from the RTC and sync to it, but it did not happen that way. So I shut down the board for almost two hours (still without coincell battery or Internet connection) and I got the following result:
The system date recovered the date and time from the last shutdown, and the RTC was set to the 1st of January 2021. That’s OK, and when I reconnected Ethernet both dates were updated and synchronized automatically.
Testing I2C with an OLED display
The Leetop A206 carrier board has a 40-pin GPIO header with the pinout shown below.
The tutorial tells us to test I2C with an OLED Display, and I happen to have one from ANAVI Thermometer kit, which I connected to I2C1 (GPIO pins 3 and 5), 3.3V, and GND as shown below.
But it did not work:
1 2 3 4 5 6 7 8 9 10 11 12 |
jaufranc@Mixtile-RK3588E:~$ sudo ./oled-i2c /dev/i2c-1 打开设备失败: No such file or directory ioctl error1: Bad file descriptor ioctl error1: Bad file descriptor ioctl error1: Bad file descriptor ioctl error1: Bad file descriptor ioctl error1: Bad file descriptor ioctl error1: Bad file descriptor ioctl error1: Bad file descriptor jaufranc@Mixtile-RK3588E:~$ sudo i2cdetect -y 1 Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory |
That’s because I2C1 is not enabled somehow, and we’ll fix that below. But in the meantime, I moved the display to I2C0 on pins 27 and 28, and this time around the oled-i2c did show the Core3588E string. But a hard-coded string is no fun to play with so I installed the SSD1306 OLED project
1 2 3 |
git clone https://github.com/armlabs/ssd1306_linux cd ssd1306-linux make -j 8 |
… and displayed my own strings:
1 2 3 |
sudo ./ssd1306_bin -I 128x32 sudo ./ssd1306_bin -c sudo ./ssd1306_bin -m "CNX Software\nCore 3588E\nReview" |
Nice! Back to our little I2C1 issue which I reported to Mixtile, and the company told me to edit /boot/firmware/ubuntuEnv.txt and update the “overlays” line as follows:
1 |
overlays=mixtile-core3588e-40pins |
Then I rebooted the board and tried again:
1 2 3 |
jaufranc@Mixtile-RK3588E:~/ssd1306_linux$ sudo ./ssd1306_bin -I 128x32 -n 1 jaufranc@Mixtile-RK3588E:~/ssd1306_linux$ sudo ./ssd1306_bin -c -n 1 jaufranc@Mixtile-RK3588E:~/ssd1306_linux$ sudo ./ssd1306_bin -m "CNX Software\nI2C-1 test" -n 1 |
That did the trick! The company explained to me this enables special modes for the GPIO and it will updated in future images.
UART serial interface
We’ve already used the UART interface for the serial console, but the GPIO header also comes with its own UART interface to connect various peripherals. We can also test it with the USB serial debug board to send and receive messages. The first time it did not work because of the missing “overlays” line in the /boot/firmware/ubuntuEnv.txt, so make sure to update it first if it is missing.
The plan is to do a loop-back test of sort by sending data from UART1 (Tx on pin 8, Rx on pin 10) to the USB serial port from the debug board that’s connected to one of the USB port of the Leeptop A206 carrier board.
Since the board is running Ubuntu 22.04 we’ll need to do some cleanup work first:
1 |
sudo apt remove brltty |
and we’ll now see three serial interfaces:
1 2 3 4 5 6 |
jaufranc@Mixtile-RK3588E:~$ bt -l port | age (sec) | device | driver | description ------+------------+------------+------------------+---------------------- 0 | 9850 | ttyS1 | dw-apb-uart | rockchip,rk3588-uart 1 | 9850 | ttyS7 | dw-apb-uart | rockchip,rk3588-uart * 2 | 6 | ttyUSB0 | ch341-uart | USB2.0-Serial |
ttyS1 is supposed to be UART1 on the GPIO header and ttyUSB0 is for the USB serial debug board we’ve just connected. Let’s open two terminal windows connected each at 9600 bps, plus a third one to send commands.
I could send a hello message from ttyUSB0 to ttyS1 without issues, but it did not work the other way around from ttyS1 to ttyUSB0. I tried to change the wires and switch to Picocom utility as stipulated in the tutorial but the result was the same… Not sure what happened here.
Mixtile Core 3588E benchmarks with Ubuntu 22.04
We’ve already reviewed several Rockchip RK3588 hardware platforms, so the performance of the processor is already well-known, and I’ve only run a few benchmarks in Ubuntu 22.04 to check the Mixtile Core 3588E module works to what should be expected. I started with sbc-bench.sh script.
1 2 3 |
wget https://github.com/ThomasKaiser/sbc-bench/raw/master/sbc-bench.sh chmod +x sbc-bench.sh sudo ./sbc-bench.sh -r |
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
Starting to examine hardware/software for review purposes... sbc-bench v0.9.60 Installing needed tools, tinymembench, ramlat, mhz, cpufetch, cpuminer. Done. Checking cpufreq OPP. Done. Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Throttling test: heating up the device, 5 more minutes to wait. Done. Checking cpufreq OPP again. Done (20 minutes elapsed). Results validation: * Advertised vs. measured max CPU clockspeed: -3.1% before, -3.1% after -> https://tinyurl.com/32w9rr94 * No swapping * Background activity (%system) OK * No throttling # Mixtile Core 3588E Tested with sbc-bench v0.9.60 on Sat, 23 Dec 2023 15:20:14 +0700. ### General information: Information courtesy of cpufetch: SoC: Rockchip RK3588S Technology: 8nm CPU 1: Microarchitecture: Cortex-A55 Max Frequency: 1.800 GHz Cores: 4 cores Features: NEON,SHA1,SHA2,AES,CRC32 CPU 2: Microarchitecture: Cortex-A76 Max Frequency: 2.352 GHz Cores: 4 cores Features: NEON,SHA1,SHA2,AES,CRC32 Peak Performance: 208.13 GFLOP/s The CPU features 3 clusters consisting of 2 different core types: Rockchip RK3588 (35881000), Kernel: aarch64, Userland: arm64 CPU sysfs topology (clusters, cpufreq members, clockspeeds) cpufreq min max CPU cluster policy speed speed core type 0 0 0 408 1800 Cortex-A55 / r2p0 1 0 0 408 1800 Cortex-A55 / r2p0 2 0 0 408 1800 Cortex-A55 / r2p0 3 0 0 408 1800 Cortex-A55 / r2p0 4 1 4 408 2352 Cortex-A76 / r4p0 5 1 4 408 2352 Cortex-A76 / r4p0 6 2 6 408 2352 Cortex-A76 / r4p0 7 2 6 408 2352 Cortex-A76 / r4p0 15715 KB available RAM ### Governors/policies (performance vs. idle consumption): Original governor settings: cpufreq-policy0: performance / 1800 MHz (conservative ondemand userspace powersave performance schedutil / 408 600 816 1008 1200 1416 1608 1800) cpufreq-policy4: performance / 2352 MHz (conservative ondemand userspace powersave performance schedutil / 408 600 816 1008 1200 1416 1608 1800 2016 2208 2352) cpufreq-policy6: performance / 2352 MHz (conservative ondemand userspace powersave performance schedutil / 408 600 816 1008 1200 1416 1608 1800 2016 2208 2352) fb000000.gpu: performance / 1000 MHz (rknpu_ondemand userspace powersave performance simple_ondemand / 300 400 500 600 700 800 900 1000) fdab0000.npu: performance / 1000 MHz (rknpu_ondemand userspace powersave performance simple_ondemand / 300 400 500 600 700 800 900 1000) Tuned governor settings: cpufreq-policy0: performance / 1800 MHz cpufreq-policy4: performance / 2352 MHz cpufreq-policy6: performance / 2352 MHz fb000000.gpu: performance / 1000 MHz fdab0000.npu: performance / 1000 MHz Status of performance related policies found below /sys: /sys/devices/platform/fb000000.gpu/power_policy: [coarse_demand] always_on /sys/module/pcie_aspm/parameters/policy: default [performance] powersave powersupersave ### Clockspeeds (idle vs. heated up): Before at 40.7°C: cpu0-cpu3 (Cortex-A55): OPP: 1800, Measured: 1786 cpu4-cpu5 (Cortex-A76): OPP: 2352, Measured: 2285 (-2.8%) cpu6-cpu7 (Cortex-A76): OPP: 2352, Measured: 2279 (-3.1%) After at 49.0°C: cpu0-cpu3 (Cortex-A55): OPP: 1800, Measured: 1786 cpu4-cpu5 (Cortex-A76): OPP: 2352, Measured: 2284 (-2.9%) cpu6-cpu7 (Cortex-A76): OPP: 2352, Measured: 2279 (-3.1%) ### Performance baseline * cpu0 (Cortex-A55): memcpy: 5644.9 MB/s, memchr: 2701.9 MB/s, memset: 21690.3 MB/s * cpu4 (Cortex-A76): memcpy: 10003.5 MB/s, memchr: 13192.3 MB/s, memset: 27101.6 MB/s * cpu6 (Cortex-A76): memcpy: 9998.8 MB/s, memchr: 13138.1 MB/s, memset: 26563.3 MB/s * cpu0 (Cortex-A55) 16M latency: 121.6 122.2 119.0 122.1 120.7 128.1 217.4 386.4 * cpu4 (Cortex-A76) 16M latency: 122.5 112.1 120.3 111.7 120.7 119.3 115.8 118.4 * cpu6 (Cortex-A76) 16M latency: 133.4 133.9 133.2 133.6 135.6 128.6 123.0 128.2 * cpu0 (Cortex-A55) 128M latency: 146.8 148.0 146.6 148.0 146.1 151.8 232.0 412.4 * cpu4 (Cortex-A76) 128M latency: 139.0 140.2 138.6 140.1 138.1 133.4 129.9 138.4 * cpu6 (Cortex-A76) 128M latency: 136.4 137.4 136.2 137.5 136.2 132.3 129.5 137.3 * 7-zip MIPS (3 consecutive runs): 15789, 15936, 15971 (15900 avg), single-threaded: 3038 * `aes-256-cbc 146280.66k 384411.09k 647286.95k 781691.56k 832263.51k 836283.05k (Cortex-A55)` * `aes-256-cbc 582339.40k 1005131.37k 1214187.86k 1275972.27k 1299854.68k 1302173.01k (Cortex-A76)` * `aes-256-cbc 580963.36k 998935.25k 1209651.11k 1271505.58k 1295392.77k 1297803.95k (Cortex-A76)` ### Storage devices: * 115.3GB "AKJ21X" HS400 Enhanced strobe eMMC 5.1 card as /dev/mmcblk0: date 06/2023, manfid/oemid: 0x0000f4/0x0122, hw/fw rev: 0x0/0x0000000000561222 ### Swap configuration: * /swapfile on /dev/mmcblk0p2: 2.0G (0K used) on MMC storage ### Software versions: * Ubuntu 22.04.3 LTS * Compiler: /usr/bin/gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 / aarch64-linux-gnu * OpenSSL 3.0.2, built on 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022) ### Kernel info: * `/proc/cmdline: root=UUID=14d9c0e2-3152-4361-a514-22285e98a8be rootfstype=ext4 rootwait rw console=ttyS2,1500000 console=tty1 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0 quiet splash plymouth.ignore-serial-consoles` * Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl * Vulnerability Spectre v1: Mitigation; __user pointer sanitization * Vulnerability Spectre v2: Vulnerable: Unprivileged eBPF enabled * Kernel 5.10.160-rockchip / CONFIG_HZ=300 Kernel 5.10.160 is not latest 5.10.205 LTS that was released on 2023-12-20. See https://endoflife.date/linux for details. It is somewhat likely that some exploitable vulnerabilities exist for this kernel as well as many unfixed bugs. But this version string doesn't matter since this is not an official LTS Linux from kernel.org. This device runs a Rockchip vendor/BSP kernel. This kernel is based on a mixture of Android GKI and other sources. Also some community attempts to do version string cosmetics might have happened, see https://tinyurl.com/2p8fuubd for example. To examine how far away this 5.10.160 is from an official LTS of same version someone would have to reapply Rockchip's thousands of patches to a clean 5.10.160 LTS. All known settings adjusted for performance. Device now ready for benchmarking. Once finished stop with [ctrl]-[c] to get info about throttling, frequency cap and too high background activity all potentially invalidating benchmark scores. All changes with storage and PCIe devices as well as suspicious dmesg contents will be reported too. Time cpu0/cpu4/cpu6 load %cpu %sys %usr %nice %io %irq Temp 15:20:17: 1800/2352/2352MHz 6.60 30% 0% 29% 0% 0% 0% 41.6°C 15:21:18: 1800/2352/2352MHz 2.45 0% 0% 0% 0% 0% 0% 39.8°C |
The 7-zip benchmark achieved 15,900 points average which compared to around 16,200 on the Rock 5B and 16,400 with the Khadas Edge2 Pro. It’s slightly lower but not much, and at first, I thought it might be due to the ~2,285/2,279 MHz measured frequencies on the Cortex-A76 clusters, but the Edge2 Pro is even lower with the Corex-A76 cores clocked at 2,257 MHz for the first cluster, and 2,259 for the second. Memory bandwidth for the Cortex-A76 cores is about 10,000 MB/s (memcpy) on the Mixtile Core 3588E, 10457.5 MB/s on the Rock 5B, and 10,855.0 MB/s on the Edge2 Pro, so again it’s lower but not significant. Results for AES-256 are also in the same ballpark for the three Rockchip RK3588 SBCs mentioned here.
I then ran Speedometer 2.0 in the pre-installed Chromium web browser…
… and repeated it in Firefox.
I was quite surprised Firefox is now faster than Chromium in this benchmark as I got 78.84 points in Chromium and 53.14 in Firefox (September 2022) with the Khadas Edge2 Pro. Web browsers are constantly evolving, and companies may have set different options, so it’s difficult to compare results here, but at least the Mixtile CPU module looks to be working fine.
Multimedia features – 3D graphics and video playback
I planned to start 3D graphics testing with glmark2-es2-wayland benchmark. But it failed because the Windowing System is set to X11, while most other recent boards are using Ubuntu 22.04 with Wayland. This was also the case for the Khadas Edge2 Pro in Ubuntu 22.04. I wonder if this may also partially explain the lower score in Chromium above.
I could still run a 3D graphics benchmark, but I had to go with glmark2-es2 instead.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
jaufranc@Mixtile-RK3588E:~/Desktop$ glmark2-es2 ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Panfrost GL_RENDERER: Mali-G610 (Panfrost) GL_VERSION: OpenGL ES 3.1 Mesa 23.0.0-devel ======================================================= [build] use-vbo=false: FPS: 1129 FrameTime: 0.886 ms [build] use-vbo=true: FPS: 1203 FrameTime: 0.831 ms [texture] texture-filter=nearest: FPS: 1349 FrameTime: 0.741 ms [texture] texture-filter=linear: FPS: 1299 FrameTime: 0.770 ms [texture] texture-filter=mipmap: FPS: 1161 FrameTime: 0.861 ms [shading] shading=gouraud: FPS: 1255 FrameTime: 0.797 ms [shading] shading=blinn-phong-inf: FPS: 1219 FrameTime: 0.820 ms [shading] shading=phong: FPS: 1144 FrameTime: 0.874 ms [shading] shading=cel: FPS: 1138 FrameTime: 0.879 ms [bump] bump-render=high-poly: FPS: 881 FrameTime: 1.135 ms [bump] bump-render=normals: FPS: 1461 FrameTime: 0.684 ms [bump] bump-render=height: FPS: 1420 FrameTime: 0.704 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1094 FrameTime: 0.914 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 1029 FrameTime: 0.972 ms [pulsar] light=false:quads=5:texture=false: FPS: 1174 FrameTime: 0.852 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 431 FrameTime: 2.320 ms [desktop] effect=shadow:windows=4: FPS: 972 FrameTime: 1.029 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 485 FrameTime: 2.062 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 480 FrameTime: 2.083 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 541 FrameTime: 1.848 ms [ideas] speed=duration: FPS: 896 FrameTime: 1.116 ms [jellyfish] <default>: FPS: 1087 FrameTime: 0.920 ms [terrain] <default>: FPS: 90 FrameTime: 11.111 ms [shadow] <default>: FPS: 867 FrameTime: 1.153 ms [refract] <default>: FPS: 304 FrameTime: 3.289 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 1338 FrameTime: 0.747 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 1283 FrameTime: 0.779 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 1289 FrameTime: 0.776 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 1298 FrameTime: 0.770 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 1212 FrameTime: 0.825 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1298 FrameTime: 0.770 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1300 FrameTime: 0.769 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1264 FrameTime: 0.791 ms ======================================================= glmark2 Score: 1042 ======================================================= |
We can see the Ubuntu image is using the open-source Panfrost driver which most do provided they run on an Arm SoC with a supported Mali GPU. The score was 1,042 points, and it’s definitely not comparable with glmark2-es2-wayland. For reference, the Khadad Edge2 Pro had a 4,005 glmark2 score. Since X11 and Wayland are different windowing systems we are not able to compare the score, but we might still suggest Mixtile to update their Ubuntu image to the more modern Wayland windowing system for future releases (provided it doesn’t break anything else).
I then played a 1080p60 YouTube video in Chromium and it was smooth with just 6 frames dropped at the beginning.
I changed the resolution to 2160p60 (4Kp60) and I was equally impressed.
It was only when I switched to 4320p60 (8Kp60) that the video became unwatchable as it was very choppy with too many frames dropped.
We’ll now test local video playback with ffplay from the ffmpeg library.
Sintel-2010-4k.mkv (H.264, 4K 24 fps) played smoothly with hardware decoding and low CPU usage.
Fifa_WorldCup2014_Uruguay-Colombia_4K-x265.mp4 (H.265, 4K 60 fps) video file was also fine and used hardware video decoding.
Rockchip processors typically come with a unique feature, namely 10-bit H.264 hardware video decoding, not found on most other brands of processors. Rockchip RK3588 also implements this and it works with ffplay using -4K.mp4 file with 4K resolution.
Same result for Blackmagic Pocket Cinema Camera 4K ‘Balloons’-mIAfxj7nd9k.mp4 (AV1, 4K fps 23.98 fps).
I also download two 8K test videos from YouTube at 30 fps and 60 fps frame rates.
The screenshot above may make it look like it’s working with the av1_rkmpp_decoder and low CPU usage, but it’s not with the image only updated infrequently around once every 30 seconds…
Using the 6 TOPS NPU on Rockchip RK3588 with the RKNPU2 toolkit
The Rockchip RK3588 comes with a 6 TOPS NPU so I tested it with the RKNPU2 toolkit like Arnon did in his review of the Youyeetoo YY3568 Rockchip RK3568 SBC with a 1 TOPS NPU.
We’ll first need to install dependencies, retrieve the code, and build the YOLOV5 demo:
1 2 3 4 |
sudo apt install cmake git clone https://github.com/rockchip-linux/rknpu2 cd rknpu2/examples/rknn_yolov5_demo/ ./build-linux_RK3588.sh |
End of output:
1 2 3 4 5 |
v5_demo_Linux/.//model/RK3588/yolov5s-640-640.rknn -- Installing: /home/jaufranc/rknpu2/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux/./rknn_yolov5_video_demo -- Installing: /home/jaufranc/rknpu2/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux/lib/librockchip_mpp.so -- Installing: /home/jaufranc/rknpu2/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux/lib/libmk_api.so /home/jaufranc/rknpu2/examples/rknn_yolov5_demo |
Let’s now run the demo:
1 2 |
pushd /home/jaufranc/rknpu2/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux/ ./rknn_yolov5_demo ./model/RK3588/yolov5s-640-640.rknn traffic.jpg |
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45 Loading mode... sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22) driver version: 0.9.2 model input num: 1, output num: 3 index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=0, name=output, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003860 index=1, name=283, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=2, name=285, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003915 model is NHWC input fmt model input height=640, width=640, channel=3 Read traffic.jpg ... img width = 1200, img height = 810 resize image with letterbox once run use 20.714000 ms loadLabelName ./model/coco_80_labels_list.txt person @ (273 491 416 791) 0.895037 person @ (434 508 581 783) 0.883741 car @ (579 369 804 562) 0.881610 car @ (429 363 605 528) 0.880092 car @ (161 290 369 487) 0.850051 car @ (888 258 1063 374) 0.828512 person @ (594 506 691 781) 0.822708 person @ (659 481 789 778) 0.785600 person @ (88 459 185 768) 0.759585 car @ (431 241 592 399) 0.754103 car @ (772 208 888 322) 0.738178 car @ (0 541 142 802) 0.733012 car @ (466 133 594 241) 0.681969 car @ (103 258 258 395) 0.654690 car @ (718 189 819 283) 0.622837 car @ (223 103 301 161) 0.618237 car @ (521 296 697 378) 0.610271 backpack @ (590 549 639 641) 0.584575 car @ (412 166 478 228) 0.536548 car @ (361 155 436 219) 0.523183 car @ (682 148 823 249) 0.432711 car @ (862 219 1003 356) 0.430942 car @ (131 232 268 298) 0.420546 backpack @ (322 553 358 626) 0.419835 handbag @ (129 513 183 611) 0.393449 car @ (631 144 725 236) 0.382930 stop sign @ (20 168 56 258) 0.382099 car @ (84 151 189 206) 0.335825 fire hydrant @ (13 442 56 541) 0.322854 car @ (331 89 423 144) 0.249350 car @ (288 95 395 151) 0.221453 save detect result to ./out.jpg loop count = 10 , average run 20.387900 ms |
It took a little 20ms to run, and the results can be found in the out.jpg file with boxes around the detected objects. One person with an unusual dress at the front and a few cars in the background were not detected, but otherwise it looks pretty good.
We can also benchmark the NPU with the rknn_benchmark sample running the YOLOv5 model 10 times:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
pushd /home/jaufranc/rknpu2/examples/rknn_benchmark/install/rknn_benchmark_Linux/ chmod +x ./build-linux_RK3588.sh ./build-linux_RK3588.sh ./rknn_benchmark /home/jaufranc/rknpu2/examples/rknn_yolov5_demo/model/RK3588/yolov5s-640-640.rknn traffic.jpg 10 rknn_api/rknnrt version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22), driver version: 0.9.2 total weight size: 7312128, total internal size: 7782400 total dma used size: 24784896 model input num: 1, output num: 3 input tensors: index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 output tensors: index=0, name=output, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003860 index=1, name=283, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=2, name=285, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003915 custom string: Warmup ... 0: Elapse Time = 16.08ms, FPS = 62.20 1: Elapse Time = 15.97ms, FPS = 62.63 2: Elapse Time = 15.96ms, FPS = 62.64 3: Elapse Time = 15.98ms, FPS = 62.58 4: Elapse Time = 15.98ms, FPS = 62.60 Begin perf ... 0: Elapse Time = 16.11ms, FPS = 62.06 1: Elapse Time = 16.27ms, FPS = 61.44 2: Elapse Time = 16.21ms, FPS = 61.68 3: Elapse Time = 16.14ms, FPS = 61.94 4: Elapse Time = 16.13ms, FPS = 61.99 5: Elapse Time = 16.27ms, FPS = 61.48 6: Elapse Time = 16.26ms, FPS = 61.49 7: Elapse Time = 16.28ms, FPS = 61.43 8: Elapse Time = 16.26ms, FPS = 61.51 9: Elapse Time = 16.26ms, FPS = 61.52 Avg Time 16.22ms, Avg FPS = 61.653 Save output to rt_output0.npy Save output to rt_output1.npy Save output to rt_output2.npy ---- Top5 ---- 0.984223 - 34116 0.984223 - 34659 0.984223 - 34660 0.984223 - 34734 0.984223 - 34735 ---- Top5 ---- 1.000000 - 9251 1.000000 - 9291 1.000000 - 281251 1.000000 - 281252 1.000000 - 281256 ---- Top5 ---- 0.998327 - 2312 0.998327 - 2325 0.998327 - 2326 0.998327 - 2328 0.998327 - 36307 |
The Mixtile Core 3588E managed to detect objects at 61.65 FPS on average with a fairly complex image, which should be good enough for most real-time applications. For reference, the Youyeetoo YY3568 achieved 21.5 FPS in the same test and a different image, which may be fine for some applications, but may introduce too much lag for robotics applications.
Trying out the Mixtile Core 3588E CPU module with NVIDIA Jetson Nano Developer Kit
Mixtile states that the Core 3588E module is compatible with Jetson TX2 NX. In my understanding, the latter is also compatible with Jetson Nano, Xavier NX, and Orin Nano, so I took my old NVIDIA Jetson Nano Developer Kit (A02) from the cupboard to give it a try…
I just had to remove the Mixtile Core 3588E and Jetson Nano CPU modules from their respctive carrier boards, and I could then install the Core 3588E module into the Jetson Nano carrier board without any issues. I almost used the 12V laptop power bank to power my “new” kit, but then I realized the NVIDIA devkit relies on 5V DC input instead of the 12V for the Leetop A206. So I avoided a painful embarrassment by using a 5V/3A power supply with the kit.
The Power LED did light up, but I could not see anything on the HDMI display and Ethernet did not seem to work either. So I connected a serial console:
The good news is that Ubuntu boots up when the Core 3588E is connected to the Jetson carrier board, and the Ethernet device shows up but the Ethernet link is down despite an Ethernet cable being connected to the board. So I did some further reading and learned the Jetson TX2 NX won’t work with the Jetson Nano Developer Kit A02, but the newer Jetson Nano Developer Kit B01 does work. Since the Mixtile Core 3588E is supposed to be a Jetson TX2 NX replacement, I had little hope of it working with my older carrier board. I don’t own another Jetson carrier board so I eventually had to give up that part.
Conclusion
Mixtile Core 3588E system-on-module performs well with the pre-loaded Ubuntu 22.04 image and Leetop A206 carrier board. The performance was as one would expect from a Rockchip RK3588 hardware platform, and I could test 3D graphics acceleration (with the Panfrost driver) and 4Kp60 hardware video decoding with various codecs successfully. I could also test I2C and UART interfaces from the GPIO header, the two M.2 sockets with an NVMe SSD and a WiFi 6 wireless module, and the 6 TOPS NPU could deliver 60 fps inference with YOLOv5 model enabling real-time image processing.
Having said there’s still more work to do on the Ubuntu 22.04 image, as I would not play 8K AV1 videos smoothly on YouTube or with ffplay using locally stored files, albeit 4Kp60 worked fine for both. The Ubuntu image also relies on the X11 windowing system and may benefit from an update to Wayland with better support and improved performance. I also had to tweak one config file to make I2C and UART work, but this should not be an issue in the future since it should be enabled by default.
Mixtile does not officially recommend or sell any specific Jetson TX2 NX carrier board for the Core 3588E, but since their documentation is based on the Leetop A206 carrier board, it might make sense to get that model as a “working demo”, on top of using it with your own or other carrier boards that should work in theory…
I’d like to thank Mixtile for sending the Core 3588E system-on-module with 16GB RAM and a fast 128GB eMMC flash along with the Leetop A205 board for review. The company is selling the Core 3588E module for $109 to $278 depending on the memory and storage configuration and whether a heatsink is present, and is letting customers select their preferred carrier board from other sources or design their own. As noted above, the Leetop A206 is an option, but it’s out of stock in most places including Seeed Studio where it is listed for $199, and I could only find it on an Aliexpress store selling it for close to $400.
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress
nice! i still keep being amazed by your articles, wow; so many information nuggets.
the jetson tx2 nx is indeed working on a b01-b03 board, however the pinmux is different and requires tons of tweaking to get all jetson carrier features to work.
my guess is that with a ton of pinmux settings in the devicetree you can get the jetson carrier features to work on the 3588.
though timeconsuming 🙂