FriendlyELEC NanoPi Zero2 is one of the world’s smallest Arm Linux computers with the 45x45mm board featuring a Rockchip RK3528A quad-core Cortex-A53 processor, up to 2GB RAM, microSD and eMMC flash module sockets for storage, a Gigabit Ethernet RJ45 jack, an M.2 socket for WiFi, a USB Type-A port, and a 30-pin GPIO FPC connector for expansion.
When I went to find more information about the earlier NanoPi Zero, I quickly realized… it did not exist, and the closest thing we have is the ZeroPi released in 2019 with an Allwinner H3 Cortex-A7 processor and an even smaller 40x40mm form factor. The NanoPi Zero2 comes with a 64-bit processor, more memory, and optional support for an M.2 WiFi module among other improvements. It’s designed for headless applications since there’s no video output/display interface.
NanoPi Zero2 specifications:
- SoC – Rockchip RK3528A
- CPU – Quad-core ARM Cortex-A53 @ 2.0 GHz
- GPU – ARM Mali-450 GPU with support for OpenGL ES1.1, ES2.0, and OpenVG 1.1 APIs
- VPU – 4K H265/H264 60fps decoding
- System Memory – 1GB or 2GB LPDDR4/LPDDR4X
- Storage
- MicroSD card slot
- Socket for eMMC flash module
- Networking
- Gigabit Ethernet port
- Optional Wifi and Bluetooth vias M.2 Key-E 2230 module (PCIe 2.1)
- USB
- 1x USB 2.0 host Type-A port
- 1x USB 2.0 device Type-C port for eMMC upgrade
- Expansion – 30-pin FPC GPIO connector with up to 17x GPIO, 2x PWM, 2x UART, SPI, I2C, 2x I2S, SPDIF Tx, 5V, 3.3V, and GND
- Debugging – 8-pin debug UART, 3.3V level, 1,500,000 bps
- Misc
- 2x GPIO-controlled LEDs (SYS & LED1)
- 2-pin 1.27/1.25mm battery connector for low-power RTC
- RESET Button, RECOVERY Button, and MASK Button for eMMC upgrade
- Power Supply – 5V DC /2A, via USB-C connector or 2.54mm Header
- Dimensions and Weight
- PCBA – 45 x 45mm | 16.1 grams
- Metal enclosure – 49.5 x 49.5 x 25mm | 86.5 grams
- Temperature Range – 0C to 80°C
FriendlyELEC provides support for Debian 12 Core, Ubuntu 24.04, OpenMediaVault, and FriendlyWrt fork of OpenWrt 21.05 or 23.05 with all images based on Linux 6.1 LTS. You’ll find the OS images and other documentation on the wiki.
The NanoPi Zero2 SBC is sold for $18 in its basic configuration with 1GB RAM, and you can get a complete system with 2GB RAM, 32GB eMMC flash module, WiFi 5 (RTL8822CE) with two antennas, and a metal enclosure for $54 on the same page.
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
Another option for this would be to put an E-key 1TB SSD on it and use it for storage. Too bad there is a tiny serial flash for uboot. Instead you’d have to leave a tfCard in it to boot.
I guess you meant “too bad there is **not** a serial flash”. Another option might be the eMMC though.
I was initially happy and thought this could replace my aging NanoPI-Neo2 that I’m using as a reverse proxy/mail gateway etc, until I realized that this one has no externally accessible console port AGAIN. I’m really starting to think that there’s someone in the FriendlyElec design team who wants to make sure their devices remain a pain to debug and recover from a failing boot. It’s totally amazing, they’ve been the first ones to provide very nice metal enclosures, yet they continue to design their boards like development boards, making them unfit for production for ridiculous reasons!
out of curiosity @Willy – have you tried messaging friendlyelec with your requirement – I mean after all you are not some random dude on the web but an important voice
They could add the requirement in the next revision of the SBC.
I also noticed in some circumstances armbian distro finished the kernel switch eg from legacy to edge and rebooted a board without giving user chance to check on it. And don’t know why I am the lucky one who mostly ends up with bricked system. For this cases I found essential to keep system root on microSD card even it was copied to emmc or nvme storage as backup.
Exactly. Let’s be honest, shit happens with kernel upgrades, and more commonly in the ARM world since they’re so tricky with DTB and very small details that are sensitive to tiny variations between many boards that are difficult to check before releasing. While irritating when it happens to you, all you generally want when your machine looks bricked is to be able to roll back without having to pick a screw driver or an eMMC flasher. And I agree with you that sometimes for rollback, SD is easier, but that’s a real shame! Also it allows to rollback but not necessarily to debug.
I regularly exchange with them. Some of the ports on older boards were apparently added after my comments, and next boards dropped them… I really think that they’re putting them only upon request instead of understanding the problem it is not to have one. That is what is annoying. And that’s sad, because otherwise they’re doing really great and solid products! I don’t count the number of times I had to skip their products over the last 6-7 years just for absurdities like this, and other people I know who often need such devices to build monitoring probes or tiny routers/firewalls at customers just told me the same. We’re speaking about a $0.5 saving at best, which cancels a non-null (though difficult to estimate) number of sales.
Seems like this could be addressed with better software. I’ve made plenty of devices without consoles that could upgrade their kernels without bricking.
For instance, have the bootloader detect a failed boot, or rather lack of successful boot, and after enough failures automatically switch back to old kernel. So if it doesn’t boot, just reset a few times and you’re back.
And there is an external USB OTG port. Use fastboot in the bootloader to allow reflashing over USB.
Then there is the SD slot. Maybe the boot ROM can give it first priority, but then fall back to emmc if it doesn’t detect a valid bootloader image on the SD card. Some boot ROMs can do this, IDK about rockchip. So if you brick emmc just stick if a recovery SD card and it’s back.
For the switch-on-multiple-failures I do that as well on appliances. But that doesn’t do everything. Sometimes you just need access to the boot loader to fix something or pass an option to the kernel, or even to capture the oops that’s stopping the boot while loading a module. Similarly it’s quite common when dealing with network configs (especially in devices you carry in your bag to use anywhere in the field) to not be able to recover access. In the past, console ports would require a DB9 connector which was taking some room and that many were already super happy to find on many devices nowadays it’s just a tiny 8x3mm hole with a BOM cost less than $0.5 that turns a brick into a computer usable by anyone. In addition it allows young devices to be debugged in the field by early adopters and quickly fixed. SolidRun has been providing that for many years now. Radxa has understood that as well and is now providing easy access to their devices. Radxa used to be lacking nice enclosures, now they’re making some that are similar to FriendlyElec’s, so they’re getting closer. And more active on marketing and present everywhere on the web than FE, that does help as well.
There still the usb-c connector. The bootloader can use something like fastboot or USB MSC to allow recovery options that way, including bootloader commands.
I also see there’s a recovery button on the side. IDK if this interacts with the boot ROM, but the bootloader can surely use it to boot a recovery kernel if held down on boot.
There was one thing I really liked on the GL.iNet 6416A, it had a tiny web interface embedded in the boot loader (“pepe2k”). You would just hold the button for 6 seconds during boot and it would start it, and from which you could upload a flash image to replace everything. This is generally sufficient (and even better) for consumer devices as it allows to unbrick them and to flash already tested images that the vendor has validated on the exact same device. I’ve done that as well for many devices. However this was not the type of thing you’d want to update often at home nor in production as it would easily wipe all your config as well. And there were bugs in this tool as well, as some images would never boot, apparently based on their checksum so if one would not boot you had to modify the contents of your image and try again, so that was significantly increasing development time. In the end that was really just for first-time installation or complete replacement in the field.
I agree that many such hacks are possible. But frankly, when you know that each and every of your updates are going to be painful, you just stop doing them. For example I’ve used a WRT1900ACSv2 as a firewall at home for about 5 years. It uses NAND as storage. Kernel and image upgrades are boring and you need to be super careful. Result? Once I ended up finding a well-working kernel, I stopped updating it and kept the same kernel running for 3 years.
In the PC world this problem doesn’t exist. You just plug a keyboard and a VGA or HDMI cable, you have access to the BIOS and the boot loader, and you can manipulate anything to apply the changes in a reversible way. In the Arm world, very often if you want to *try* to fix something, either you need to perform a risky change, or you’re doing it blindly, stupidly waiting for the board to possibly eventually boot while in fact it’s hung from the beginning in the boot loader saying “cannot decompress image” or such stuff. And finally you take a screwdriver, you find your USB-TTL adapter you look on the device’s wiki to figure the pinouts of the internal UART connector and you try again this way, then in 5 minutes it’s fixed as if it were a PC. All this for that…
The ZBT 5G/4G gateway I purchased has this feature as well and it is really nice, especially if you modify and flash OpenWrt much
I just unpacked a NenoPC T6. Could it be your comments have been used just for the more expensive boards? It includes a USB-C with ch341, Power button and mask key are accessible from the outside.
The R5C has the maskrom accessible, but lacks the ch341.
For the lowcost boards leaving out any spare connector lowers the resale price. And basically you are just grumbling they traded your time to lower the price. I’d say you get what you paid for (although for the R5C the ch341 + USB-C would be a nice addition).
Yeah I know it’s been available on a few models. I’d be willing to pay more to have this on smaller models. Really. Spending hours drilling holes in enclosures, finding connectors to solder and gluing modules is not worth a few dollars.
The thing is, RK3588 still has very poor mainline support while RK3568 has a great one. For a router/fw I’d rather take the latter. FriendlyELEC’s enclosures are compact and well designed, and in general their devices are quite stable, which is why I look there first.
And yes, I too asked for R5C+uart as well. It’s not just a matter of trading time for money, it’s a matter of making a device much less attractive for a whole class of use cases just to save a few cents.
They could even sell the module as a paid option like they already have plenty, I would always happily take it, even for $5, thus they could even make money out of it! It’s just that having to do all this modification work oneself is much more painful than it is for the vendor to include it from the start.
They do have the Debug UART at the edge of the board. It should have been simple to angle the pins and provide an opening in the case. Not as ideal has having a UART to USB-C like the NanoPi R6C but at least usable.
I agree, and that’s what I had done with some of their boards in the past. For others I have glued some USB adapters inside. But then you face stupid problems like the thickness of the enclosure making it difficult to establish contacts to your board, or you need to make a huge hole so that the entire connector passes through.
The full package cost as a RPI 5 2GB edition.
Of course the Pi price is for the bare board only.
Yeah, you need to count the enclosures, especially in this price range. And FriendlyELEC’s enclosures are really cool usually.
“1x USB 2.0 device Type-C port for eMMC upgrade”
What does this mean? I am trying to parse this but can’t think of how these two can be related.
It’s USB OTG and as such you can access/overwrite the internal eMMC via USB-C once you press the maskrom button.
I wonder if it’s only function is this? Or is it a standard USB OTG port with a Linux driver, that could be used for a number of things. External USB flash drive, console serial port, etc.
Standard OTG unless you press the maskrom button _while booting_. At least that’s ‘Rockchip standard’ since a decade but I haven’t dealt with anything RK3528 so far.
That’s what I’d expect. But there’s stuff like the Debug/JTAG USB port on the Espressif ESP32-C3, which is a dedicated USB peripheral that only does a USB CDC serial port. Can’t do anything else USB.
But the advantage is the driver is way simpler for it, so even the boot rom can do debug console over that USB port.
That would be because previous similar boards from FriendlyARM used the NEO naming. See for instance the RK3328 based NanoPi NEO3
The gpio flex connector looks really close to the edge of case. I wonder if there’s clearance to install a cable and fold it over the edge of the PCB around to the top side. Or if the case isn’t compatible with the gpio connector.
https://www.friendlyelec.com/image/catalog/description/zero2_en_06.jpg
Also looks like there are NO gpios other than this connector!? And they don’t even sell a 30 pin FPC cable or breakout board. Which will cost about as much the board does.
In case anyone ever comes across this thread, I actually got one of these, here’s some details.
One might notice the case is somewhat taller than than the ethernet port, the tallest part on the board. This is true, it’s taller by 6.6 mm. What’s in the extra space? Metal. There’s no room for a hat of some kind.
The top of the case is 5.8 mm thick metal over the third the case on the ethernet port side and 9.7 mm over the other ⅔.
There’s a pillar that comes down to touch the RK3528 chip with a thermal pad. Nothing for the RAM.
The slats on the top aren’t open to the inside. It’s solid.
All told, it’s a substantial chunk of aluminium and fits together nicely.
The only expansion pins, the FPC connector on the bottom side, are so close to the edge of the case that it’s impossible for a cable to be installed.
The 2×4 serial port header is arranged so that the three pins you need, GND/TX/RX, are closest to the PCB edge and contiguous. The other pins are RTS/CTS and 3.3V/5V power.
I’m pretty sure one could install a 3pin right angle .1″ header in place of the straight header, and then drill a hole in the side of the case, for attaching a serial port while it’s in the case. With the top of case being ~10mm thick metal, it would be hard to fit something like a ⅛” jack in there or to access the pins from the top.
Speaking of the serial port, the Rockchip driver for the UART doesn’t work right. It claims to be running at 115200 baud, but it’s not, it’s at 1,500,000 baud. And you can’t change the baud rate.
It is possible to connect an M2 NVMe drive to the M2 port with an adapter. I got a “parallel” A/E-key to M-key adapter. A 2230 drive would extend 9 mm past the edge of the board in the adapter, but it doesn’t hit anything. It’s not necessary to use a “right-angle” adapter that has a small footprint by mounting the drive vertically from the board.
A NVMe drive was detected ok and seems to work fine, but I didn’t test extensively.
I tried the Ubuntu image from friendlyelec. There’s no Armbian port (yet!). I had to hunt the forums to find the user/pw is pi/pi.
It works, but it is a bit sloppy in my opinion.
There’s some program called lcd2usb_print running. It’s undocumented and the unstripped binary isn’t part of any package. Just some random service copied on by hand apparently.
The video decoder and GPU drivers are all compiled into the kernel and run on boot. It even runs a frame buffer console with a login prompt!
One might ask, how does one use this frame button console login, when there is no video output port? Maybe it would be possible to do some micro soldering and attach an HDMI port to the proper pins on SoC? And if you did, the frame buffer console would already be there running, sucking up RAM and slowing the boot time. Sloppy.
You’ll have to get the IP address from your router to connect over ethernet the first time. MDNS and LLMNR are both turned off by default so the hostname won’t work.
There appears to be no way to add custom device tree overlays. And the kernel, dtb, etc. are all placed into custom partitions instead of being files in the rootfs or a boot filesystem.
I’d appreciate it if you’d share a link to the “parallel” A/E-key to M-key adapter.
I purchased some, but they are too big 🙁