Sinovoip Banana Pi M2+

'''Be aware that the board manufacturer is not cooperative. Despite its name the M2+ is incompatible to both Banana Pi/M1/M1+/Pro and version M2, due to a different SoC requiring different boot loaders and drivers.''' It's just another attempt to cash in on the Banana Pi's popularity with another incompatible SBC sharing brand, name, form factor and GPIO header. Fortunately this board is 99% compatible to the H3 Orange Pis therefore support for it is progressing nicely.

Banana Pi M2+ is H3 based development board produced by Sinovoip.

= Identification = The PCB has the following silkscreened on it: BPi M2 Plus V1.0

= Sunxi support =

Current status
The H3 support is progressing nicely and since BPi M2+ is more or less a clone of Orange Pi PC/Plus it benefits automagically from all progress being made for these boards. It is possible to find a usable mainline 4.x kernel (plus some patches) and a legacy 3.4 kernel in various work-in-progress git branches. See the Manual build section for more details.

Manual build
You can build things for yourself by following our Manual build howto and by choosing from the configurations available below.

Mainline U-Boot
Use the orangepi_plus build target until a dedicated is available or start with Sinovoip_BPI_M2_plus_defconfig (tested with 2016.03 and sun8i-h3-bananapi-m2plus.dts from below).

It can boot from eMMC, the SD card or via FEL.

Sunxi/Legacy Kernel
The 3.4 kernel from the official Allwinner's git repository does not support H3 yet. But it is possible to use one of the kernel forks, based on the lichee H3 SDK tarball:
 * Siarhei Siamashka's branch '20151207-embedded-lima-memtester-h3' at https://github.com/ssvb/linux-sunxi/tree/20151207-embedded-lima-memtester-h3

Configure this kernel using sun8i_h3_defconfig, the rest is explained in the kernel compilation guide.

Use the bananapim2plus.fex file for generating script.bin.

When booting the legacy 3.4 kernel with the mainline U-Boot, add the following line to boot.cmd:

setenv machid 1029 setenv bootm_boot_mode sec

Mainline kernel
Initial H3 patches have been submitted to the mainline kernel, but have not landed yet. Currently you can find these patches in the arm-linux mailing list, or alternatively in one of the work-in-progress kernel forks:
 * Maxime Ripard's branch 'sunxi/for-next' at https://git.kernel.org/cgit/linux/kernel/git/mripard/linux.git/log/?h=sunxi/for-next (very basic H3 support, without USB)
 * Hans de Goede's branch 'sunxi-wip' at https://github.com/jwrdegoede/linux-sunxi/tree/sunxi-wip (many work-in-progress patches, including H3 and USB support for it)
 * Siarhei Siamashka's branch '20151223-h3-mainline-smp-hack' at https://github.com/ssvb/linux-sunxi/tree/20151223-h3-mainline-smp-hack (minimal set of H3 patches, with USB and SMP)

Use the sun8i-h3-orangepi-plus.dtb device-tree binary until a dedicated is available or start on this working mixture of Orange Pi stuff: sun8i-h3-bananapi-m2plus.dts (everything working except of WiFi/BT due to lack of interest)

= Tips, Tricks, Caveats =

FEL mode
There is a dedicated FEL button called UBOOT next to the reset button.

LEDs
According to Sinovoip's documentation the board has two LEDs but at least on the developer samples there is only one:


 * A red LED, connected to the PL10 pin.

CPU clock speed limit
Sinovoip chose to not use a programmable voltage generator therefore VDD_CPUX is always at 1.3V which allows a maximum clockspeed of 1200 MHz. Due to yet unknown reasons all released OS images by SinoVoip are limited to 1008 MHz maximum clockspeed anyway. They also prefer to kill CPU cores when the SoC starts to overheat instead of implementing sane throttling so be prepared to end up with a single core H3 board running at 1008 MHz maximum. While this is not that much of a problem for their Linux images since you can adjust the wrong THS settings yourself Android users might be surprised how slow the M2+ will be.

Fixed voltage / overheating


Unfortunately SinoVoip chose to use a primitive voltage regulator that feeds the H3 all the time with 1.3V. In this mode throttling is rather inefficient since temperatures do not decrease that much when only clockspeed will be reduced but not VDD_CPUX. Therefore expect severe performance problems unless you choose to apply a large heatsink and an additional fan. It's also easy to get killed CPU cores with BSP kernel since with real heavy workloads throttling isn't enough and the kernel driver devices to kill cores instead. Please note that with normal settings vendor OS images normally use you'll never get killed CPU cores back. Armbian implemented an ugly corekeeper hack to overcome this and the results look then like this: The 2 last rows are SinoVoip settings taken from their BPI-M2+ github repo and the new Armbian settings.

While running the multithreaded parts of the 'Phoronix test suite', almost all the time max cpufreq will be throttled down to 816 MHz. An Orange Pi PC with the same cheap passive heatsink would still run at 1008 MHz or even 1104 MHz since the lower VDD_CPUX voltage at these dvfs operating points results in less emitted heat. Please be aware that currently no throttling is implemented with mainline kernel therefore you risk serious damage when running even lighter workloads on the BPi M2+ with mainline kernel!

Locating the UART
The UART pins are located between DRAM and GPIO header. They are marked as TX, RX and GND on the PCB. Just attach some leads according to our UART Howto.

= Pictures =

= Also known as =

= See also =


 * bananapi.com product page
 * Detailed product specs containing contradictory statements as usual
 * H3_Manual_build_howto

OS images

 * Official download page where M2+ OS images based on loboris' Orange Pi kernel 3.4.39 might appear soon
 * Preliminary Armbian 5.07 image based on kernel 3.4.111 without support for WiFi/BT currently
 * Preliminary Armbian 5.07 image based on kernel 4.6.0-rc1 without support for WiFi/BT currently (use with caution since you might damage your board permanently since BPi M2+ is overheating a lot and no throttling is implemented in mainline kernel for H3 now!)

= References =