User Tools

Site Tools


Translations of this page:

en:bpi-r3:start

BananaPi R3

Hardware

  • MT7986(Filogic 830) quad core ARM A53 SoC
  • MT7531A Ethernet-switch
  • 2G DDR RAM
  • 8G eMMC flash, SPI-NAND (128 MiB), SPI-NOR (32 MiB)
  • dual-band wifi:
    • 2.4G use MT7975N
    • 5G (wifi 6/5.8GHz,not 6E) use MT7975P frontend
  • 2 SFP 2.5GbE and 5 GbE RJ45 ports
  • mPCIe slot with only USB 2.0 connected for 4G modem
  • M.2 slot key-M with only PCIe x2 interface (no sata/usb) for nvme (key B+M) or wifi-card for 6E (maybe adapter needed)

V1.0:

V1.1:

debug-uart

3v3 TTL

Usb2serial adapters supported: ch340 (no G),cp2104,FT4232

With Profilic, cp2102, ch340G wifi firmware does not start issue-report

Gnd-gnd,rx-tx,tx-rx

115200 8n1 (8databits,1 startbit), no flow control

bootmedium

  • SD / eMMC sharing 1 mmc-controller in SoC
    • SD 4bit bus, eMMC 8bit
    • switched first 4 data-lanes by sw6/D (bottom on v1.0)
  • SPI NAND/NOR sharing SPI0-Bus
    • CS switched by sw5/C

sw2/B on top of board near debug-uart chooses between SPI and MMC

see bootmedium_selection for boot selection table

Network connections

gmac1 (eth0) ---- (p6)mt7531(P0) ---- WAN
                            (P1-4) -- LANx4
                            (p5/lan4) ---- right SFP slot (sfp2)
gmac2 (eth1) ---- left SFP slot (sfp1)

https://forum.banana-pi.org/t/bpi-r3-information/12897/4

SFP

We have both sfp slots recognized and working

mount -t debugfs none /sys/kernel/debug/
ethtool -m eth1
cat /sys/kernel/debug/sfp*/state

Some sfp are still not recognized (e.g. gpon).maybe quirks are needed.

After some phylink-conversion there are some issues with 2g5 sfp on left sfp/eth1. A workaround is disabling autoneg on the interface

ethtool -s eth1 autoneg off

Left sfp does not support vlan in linux 6.1 because tag is stripped.

Power: “All SFP power supplies are connected to the system VDD33” which is 3v3/8A source Dts patch from Daniel I sent 3W patch to ML…

compatibility
  • class: Fibre MM/SM, Copper RJ45, ONT
  • bandwidth: 1G/2G5 (only)
class vendor / short part no supported bandwidth state Link comment
Fibre MM H!Fibre for cisco ASF85-24-X2-D 1000baseX only working Amazon vendor hifibre_glc-sx-mmd.txt

2g5 sfp currently detected only if autoneg is turned off.

ethtool -s eth1 autoneg off
ethtool -s lan4 autoneg off

Eric upstreamed a phy driver which was upstreamed in 6.9-next

the oem sfp needs addditional patches:

0001-add-phy-detection-for-oem-2g5-sfp.patch0002-net-phylink-add-support-for-disabling-in-band-status.patch

WIFI

Firmware: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/mediatek

WLAN

Antenna mounting https://forum.banana-pi.org/t/how-to-mount-the-antenna-to-the-box/14429/4

Antenna order by band (5g in corners): https://forum.banana-pi.org/t/how-to-mount-the-antenna-to-the-box/14429/15

WED (wireless dispatch - hw offloading):

https://forum.banana-pi.org/t/wed-and-beamforming-on-bpi-r3/15099/16

You need to edit /etc/modules.conf to enable WED. Add a line as follow:
options mt7915e wed_enable=Y
zgrep 'WED' /proc/config.gz
lsmod
cat /sys/module/mt7915e/parameters/wed_enable
conntrack -L #should show HW_OFFLOAD when traffic is offloaded
cat /sys/kernel/debug/ppe*/bind #should show BND (same for entries file)

Example configs: https://forum.banana-pi.org/t/hostapd-wifi-speed-not-reach-the-maximum-in-debian11/17642/14

USB / PCIe

The USB3.0 socket of R3 can only provide a maximum current of 1400mA. source

mPCIe slot is usb-only with SIM connector (bottom of board). PCIe is mapped to m.2 key-m slot for nvme SSD

Sata possible via M.2 KEY-M 2lane interface on bottom side of board (needs PCIe-2-Sata controller!)

I tested mpcie slot with an em7455 LTE module (+key b adapter)

for m.2-slot there is a patch if nvme is not recognized: https://forum.banana-pi.org/t/bpi-r3-nvme-connection-issue/14563/17

GPIO

thermal

cat /sys/class/thermal/thermal_zone0/temp

Thermalpad size: https://forum.banana-pi.org/t/banana-pi-r3-fan-with-pwm/14406/28

Change pwm of fan from 5v to 12v (R317/R318): Shematic location on board

Mt76:

cat /sys/class/ieee80211/phy*/hwmon*/temp1_input

2g4/5g difference: https://github.com/openwrt/mt76/issues/729

FAN-Connector: JST PH 2mm pin-spacing

5V pwm fan: https://de.aliexpress.com/item/1005003663915828.html

trigger pwm-fan:

  echo 1 > /sys/class/thermal/cooling_device0/cur_state

leds

available via sysfs:

  • green: power
  • blue: status

additional with function

  • wf2g
  • wf5g
  • ssd: blinks on write access on m2-slot (nvme)
  • lte: reported to work by daniel

Wifi-leds are fixed in my 6.1 tree and in mt76 master.

case

Software

partition layout

blocks á 512 byte

SD eMMC
bl2 34 - 8191 in boot0
u-boot-env 8192 - 9215
factory 9216 - 13311
fip 13312 - 17407
kernel 17408 - 222207 (100MB)
rootfs 222208 - 12805120 (6144 MB)

bytes (start,size in hex)

NAND NOR
bl2 0x0, 0x80000 0x0, 0x40000
u-boot-env - 0x40000, 0x40000
reserved - 0x80000, 0x80000
factory 0x80000, 0x300000 -
fip 0x380000, 0x200000 0x100000, 0x80000
recovery - 0x180000, 0xa80000
fit - 0xc00000, 0x1400000
ubi 0x580000, 0x7a80000 -

GPT binaries

32MB kernel/256MB root: gpt_sd-20220216.bin

create own partition table: (currently i tried to port to python3,but get crc error, so only python2-support):

https://github.com/frank-w/BPI-R3-bsp/tree/r3-atf/tools/mediatek/gpt_editor

(cd tools/mediatek/gpt_editor/;python mtk_gpt.py --i example/mt7986-sd.json --o GPT_SD)

Created a gpt with 100mb kernel+6GB root partition with an python2 venv

https://github.com/frank-w/u-boot/blob/r3-atf/gpt_sdmmc_100m6g.img

https://github.com/frank-w/u-boot/blob/r3-atf/gpt_emmc_100m6g.img

Gpt img file may cause errors when using parted (main and backup gpt corrupt) or gpt errors in uboot on reboot. This can be also caused by backup-gpt not overridden by image (end of disk).

Parted:

Error: Both the primary and backup GPT tables are corrupt.  Try making a fresh table, and using Parted's rescue feature to recover partitions.

Uboot (sw reboot):

*** ERROR: Can't read GPT Entries ***
find_valid_gpt: *** ERROR: Invalid GPT ***

This can be fixed with sgdisk by exporting and re-importing the gpt

sudo sgdisk --backup=bpi-r3_sgdisk.gpt /dev/sdb
sudo sgdisk --load-backup=bpi-r3_sgdisk.gpt /dev/sdb

manual GPT creation

script for creating gpt with sgdisk/losetup bl2-partition needs legacy-boot flag!

Emmc partition creation

Todo…currently only via linux initrd from nor/usb

It is possible to create gpt in uboot. Example for rk3568:

https://source.denx.de/u-boot/u-boot/-/blob/master/include/configs/rk3568_common.h#L29

https://elixir.bootlin.com/u-boot/latest/source/include/configs/rockchip-common.h#L85

This creates a env var with the partition definition for rk3568 (not bpi-r3):

"uuid_disk=${uuid_gpt_disk};" \
"name=loader1,start=32K,size=4000K,uuid=${uuid_gpt_loader1};" \
"name=loader2,start=8MB,size=4MB,uuid=${uuid_gpt_loader2};" \
"name=trust,size=4M,uuid=${uuid_gpt_atf};" \
"name=boot,size=112M,bootable,uuid=${uuid_gpt_boot};" \
"name=rootfs,size=-,uuid="ROOT_UUID

Which can be used like this:

mmc dev 0
gpt write mmc 0 $partitions

defined table this way (blocks only):

setenv partitions "uuid_disk=${uuid_gpt_disk};name=gpt,start=0,size=34,uuid=${uuid_gpt_table};name=u-boot-env,start=8192,size=1024,uuid=${uuid_gpt_env};name=factory,start=9216,size=4096,uuid=${uuid_gpt_factory};name=fip,start=13312,size=4096,uuid=${uuid_gpt_fip};name=kernel,size=100M,uuid=${uuid_gpt_kernel};name=rootfs,size=0,uuid=${uuid_gpt_rootfs}"

but i got error on write…maybe because a gpt already exists

MT7986> printenv partitions
partitions=uuid_disk=;name=gpt,start=0,size=34,uuid=;name=u-boot-env,start=8192,size=1024,uuid=;name=factory,start=9216,size=4096,uuid=;name=fip,start=13312,size=4096,uuid=;name=kernel,size=100M,uuid=;name=rootfs,size=0,uuid=
MT7986> mmc dev 0
switch to partitions #0, OK
mmc0(part 0) is current device
MT7986> gpt write mmc 0 $partitions
Writing GPT: error!

atf / u-boot

linux

Own repo: https://github.com/frank-w/BPI-R2-4.14/commits/6.1-main

./build.sh importconfig
./build.sh #build kernel

Then copy bpi-r3.itb to card and start from u-boot

openwrt

debian

create image with build.sh createimg from my uboot-repo (atf-r3 branch after building uboot+atf) and add rootfs+kernel. details here: debian_ubuntu_image_building

there are also some images on my gdrive: https://drive.google.com/drive/folders/1A5S7_82Bg4EYxjzdQ5FKyBw9Qi2C3uK-?usp=drive_link

generated GPT from mtk-script has some problems with parted (partprobe reports main gpt is damaged), but it can be mounted with losetup -P

sudo losetup -P $LDEV $IMGDIR/$IMGNAME.img

writing image to sdcard (image not ready yet):

gunzip -c bpi-r3_sdmmc_bullseye.img.gz | sudo dd bs=1M status=progress conv=notrunc,fsync of=/dev/sdX

/etc/apt/sources.list:

deb http://ftp.de.debian.org/debian bullseye main contrib non-free
deb-src http://ftp.de.debian.org/debian bullseye main contrib non-free
deb http://ftp.de.debian.org/debian bullseye-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian bullseye-updates main contrib non-free
deb https://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free
root@bpi-r3:~# date -s "2022-09-18 18:02:00+0200"
root@bpi-r3:~# ip link set lan4 up
root@bpi-r3:~# ip addr add 192.168.0.19/24 dev lan4       
root@bpi-r3:~# ip route add default via 192.168.0.10     
root@bpi-r3:~# apt update
root@bpi-r3:~# apt install pciutils usbutils traceroute iperf3 net-tools psmisc wget curl

dnsmasq vs. systemd-resolved: “Another process is already listening on TCP socket 127.0.0.53:53”

https://unix.stackexchange.com/a/319501

issues

V1.0:

  • reset switch low/pressed when card in m2 slot (link)

V1.1:

  • wifi firmware cannot be started when debug-uart connected (link)
  • reset-bug still there
    • is reported to be fixed (removed R171 and R173) in newer v1.1
    • tested in uboot with my v1.1 r3 in uboot and plugged m.2 nvme:
      • MT7986> gpio input 9
        gpio: pin 9 (gpio 9) value is 1 //initial value
        MT7986> gpio input 9
        gpio: pin 9 (gpio 9) value is 0 //pressed
  • dual-nor (no nand) reported by 1 user link
  • wifi temperature issue (2g4 seems wrong): https://github.com/openwrt/mt76/issues/729
en/bpi-r3/start.txt · Last modified: 2024/09/16 10:19 by frank