====== BananaPi R3 ====== https://wiki.banana-pi.org/Banana_Pi_BPI-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: {{:en:bpi-r3:bpi-r3_top.jpg?direct&300 |}}{{ :en:bpi-r3:bpi-r3_bottom.jpg?direct&300 |}} V1.1: {{:en:bpi-r3:bpi-r3_11_top.jpg?direct&300 |}}{{ :en:bpi-r3:bpi-r3_11_bottom.jpg?direct&300 |}} ==== debug-uart ==== 3v3 TTL Usb2serial adapters supported: ch340 (no G),cp2104,FT4232 With Profilic, cp2102, ch340G wifi firmware does not start [[https://github.com/openwrt/mt76/issues/702|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 [[uboot#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 [[https://forum.banana-pi.org/t/banana-pi-bpi-r3-router-board-with-mediatek-mt7986-filogic-830-support-wi-fi-6-6e-2-5gbe-sfp/12933/31|source]] [[https://forum.banana-pi.org/t/bpi-r3-support-for-sfp-vdsl-modem/15320/5|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 | [[https://www.amazon.de/gp/product/B073VM49BK?th=1|Amazon]] [[https://www.hifiber.com/item/ASF85-24-X2-D/1000base-sx-sfp-850nm-550m-mmf-transceiver-module-customized.html|vendor]] | {{ :en:bpi-r3: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: {{ :en:bpi-r3:0001-add-phy-detection-for-oem-2g5-sfp.patch |}}{{ :en:bpi-r3:0002-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. [[https://forum.banana-pi.org/t/usb-device-constantly-reconnects-on-bpi-r3/14838/3?u=frank-w|source]] {{ :en:bpi-r3:bpi-r3-usb-pcie.png?nolink |}} 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 ==== [[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): [[https://forum.banana-pi.org/t/banana-pi-r3-fan-with-pwm/14406/47|Shematic]] [[https://forum.banana-pi.org/t/banana-pi-r3-fan-with-pwm/14406/56|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 ==== https://forum.banana-pi.org/t/banana-bpi-r3-3d-printed-case/14246/ Case from finas: https://www.printables.com/model/335936-banana-pi-bpi-r3-modular-case Higher version added here: https://www.dropbox.com/s/tng2pi2ud6qd2vo/Banana%20PI%20RPI-3%20case.stl?dl=0 ===== 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: {{ :en:bpi-r3: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 === {{ :en:bpi-r3:creategpt.sh |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 ==== [[uboot|U-Boot]] Daniels code: https://github.com/dangowrt/arm-trusted-firmware/tree/mtksoc-v2.6/ https://git.openwrt.org/?p=openwrt/staging/dangole.git;a=shortlog;h=refs/heads/r3-mt7986 ==== 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 [[uboot#booting_kernel|u-boot]] === openwrt === configuration: [[openwrt]] https://git.openwrt.org/openwrt/openwrt.git Build instructions: https://forum.banana-pi.org/t/banana-pi-r3-bsp-source-code/14257/2 Or using firmware selector (currently only snapshot): https://firmware-selector.openwrt.org/ (adding luci-ssl) changing to kernel 6.1: https://forum.banana-pi.org/t/wed-and-beamforming-on-bpi-r3/15099/37 Install: https://forum.banana-pi.org/t/install-openwrt-snapshot-on-bpi-r3/14231/7?u=frank-w opkg update opkg install luci-ssl Change network config without luci: https://forum.banana-pi.org/t/banana-pi-r3-cant-save-anything-in-luci/14658/15?u=frank-w Add more space on storage: https://forum.banana-pi.org/t/bpi-r3-change-or-add-partion-to-overlay/14240/12 https://forum.banana-pi.org/t/cannot-resize-my-root-partition-on-bpi-r3/13937/5 Modifications from user va1der: https://forum.banana-pi.org/t/bpi-r3-openwrt-whats-the-best-way-to-use-the-rest-of-my-space-on-my-sd-card/15675/10 parted way from user ned14: https://forum.banana-pi.org/t/bpi-r3-openwrt-23-05-0-how-to-extend-production-partition/16572/4 === debian === create image with build.sh createimg from my uboot-repo (atf-r3 branch after building uboot+atf) and add rootfs+kernel 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 ([[https://forum.banana-pi.org/t/bpi-r3-information/12897/42|link]]) V1.1: * wifi firmware cannot be started when debug-uart connected ([[https://github.com/openwrt/mt76/issues/702#issuecomment-1264637131|link]]) * bpi reports only affects profilic adapters, ch340,cp2102,FT4232 are ok ([[https://forum.banana-pi.org/t/bpi-r3-hw-issues/14027/3?u=frank-w|link]]) * I tested cp2102 (not working),cp2104 (working),ch340G (not working) and ft232rl (working) * Possible fix:https://github.com/openwrt/mt76/issues/702#issuecomment-1312284560 * 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 [[https://forum.banana-pi.org/t/dual-nor-flash-bpi-r3/13962|link]] * wifi temperature issue (2g4 seems wrong): https://github.com/openwrt/mt76/issues/729