BPI-R4 Pro 8X – CN15 / Quectel RM551E-GL 5G Modem Workaround
Hardware:
Board: Banana Pi BPI-R4 Pro 8X
Slot: CN15 M.2 B-Key
Modem: Quectel RM551E-GL
USB ID: 2c7c:0122
Modem firmware: RM551EGL00AAR01A02M8G
OS: OpenWrt 25.12-SNAPSHOT
PROBLEM
The Quectel RM551E-GL installed in CN15 was initially not detected by OpenWrt.
The modem did not appear in lsusb.
The USB controllers and VIA USB hubs themselves were working correctly.
- CHECKING THE PCA9555
The BPI-R4 Pro 8X has a PCA9555 GPIO expander at:
I2C bus: 3
I2C address: 0x20
I checked the PCA9555 registers with:
i2cget -y 3 0x20 0x02
i2cget -y 3 0x20 0x03
i2cget -y 3 0x20 0x06
i2cget -y 3 0x20 0x07
Before making the change, the result was:
0x02 = 0xff
0x03 = 0xff
0x06 = 0xff
0x07 = 0xff
PCA9555 registers 0x06 and 0x07 are the GPIO configuration registers.
For the PCA9555:
1 = input
0 = output
Therefore 0xff means all GPIOs on the corresponding port were configured as inputs.
- CN15 CONTROL SIGNALS
According to the BPI-R4 Pro 8X hardware mapping, CN15/BKEY-A uses:
PCA9555 GPIO 0 / IO0_0 = BKEY-A-PDN
PCA9555 GPIO 1 / IO0_1 = BKEY-A-Vset
PCA9555 GPIO 11 / IO1_3 = BKEY-A-RST
These signals need to be configured as outputs for CN15.
- COMMANDS USED TO MAKE CN15 WORK
The PCA9555 was configured manually using i2cset.
The commands used were:
i2cset -y 3 0x20 0x02 0xff
i2cset -y 3 0x20 0x03 0xf7
i2cset -y 3 0x20 0x06 0xfc
i2cset -y 3 0x20 0x07 0xf7
The register changes were therefore:
Before:
0x02 = 0xff
0x03 = 0xff
0x06 = 0xff
0x07 = 0xff
After:
0x02 = 0xff
0x03 = 0xf7
0x06 = 0xfc
0x07 = 0xf7
The relevant GPIO configuration is:
0x06 = 0xfc
This changes IO0_0 and IO0_1 from inputs to outputs.
IO0_0 = BKEY-A-PDN
IO0_1 = BKEY-A-Vset
0x07 = 0xf7
This changes IO1_3 from input to output.
IO1_3 = BKEY-A-RST
The resulting output states are:
BKEY-A-PDN = HIGH
BKEY-A-Vset = HIGH
BKEY-A-RST = LOW
- VERIFYING THE PCA9555
After making the change, I checked the registers again:
i2cget -y 3 0x20 0x02
0xff
i2cget -y 3 0x20 0x03
0xf7
i2cget -y 3 0x20 0x06
0xfc
i2cget -y 3 0x20 0x07
0xf7
- MODEM ENUMERATED AFTER THE CHANGE
After configuring the PCA9555, I checked:
lsusb
The modem appeared:
Bus 004 Device 003: ID 2c7c:0122 Quectel Wireless Solutions Co., Ltd. RM551E-GL
The VIA USB hubs were also present:
2109:2822 VIA Labs, Inc. USB2.0 Hub
2109:0822 VIA Labs, Inc. USB3.1 Hub
- USB3 PATH IS WORKING
lsusb -t showed that the VIA USB3 hub is operating at SuperSpeed.
Therefore the CN15 USB connection is working through the onboard VIA USB hub.
There was no need to:
- disable pcie2
- change xphyu3port0 to PHY_TYPE_USB3
- remux the PCIe/USB3 SerDes
The existing USB configuration is capable of detecting the modem once CN15 is powered/configured correctly.
- MODEM DRIVERS
After the PCA9555 change, OpenWrt created:
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2
/dev/ttyUSB3
/dev/cdc-wdm0
wwan0
The kernel reported:
qmi_wwan 4-1.1:1.4: cdc-wdm0: USB WDM device
qmi_wwan 4-1.1:1.4 wwan0: register ‘qmi_wwan’ at usb-11200000.usb-1.1, WWAN/QMI device
- AT COMMAND TEST
/dev/ttyUSB2 was tested as the modem AT command port.
ATI returned:
Quectel
RM551E-GL
Revision: RM551EGL00AAR01A02M8G
OK
AT+QTEMP also works and returns valid internal modem temperature sensors.
CONCLUSION
The RM551E-GL modem itself and the CN15 USB3 connection were working correctly.
The reason the modem did not initially appear in lsusb was that the required CN15/BKEY-A PCA9555 GPIO control lines were not configured as outputs.
The working manual configuration is:
i2cset -y 3 0x20 0x02 0xff
i2cset -y 3 0x20 0x03 0xf7
i2cset -y 3 0x20 0x06 0xfc
i2cset -y 3 0x20 0x07 0xf7
After these commands, the RM551E-GL appears as:
2c7c:0122 Quectel Wireless Solutions Co., Ltd. RM551E-GL
and OpenWrt successfully creates the ttyUSB ports, cdc-wdm0 and wwan0.
SUGGESTED PERMANENT FIX
The BPI-R4 Pro 8X OpenWrt DTS/board initialization should configure the CN15/BKEY-A PCA9555 lines automatically during boot.
The relevant PCA9555 signals are:
GPIO 0 / IO0_0 = BKEY-A-PDN
GPIO 1 / IO0_1 = BKEY-A-Vset
GPIO 11 / IO1_3 = BKEY-A-RST
The required working states in my test were:
BKEY-A-PDN = HIGH
BKEY-A-Vset = HIGH
BKEY-A-RST = LOW
It would also be useful to add gpio-line-names to the PCA9555 DTS node and ensure that the PCA953x/PCA9555 GPIO driver is included in the BPI-R4 Pro 8X firmware.
The exact VSET voltage/default should be verified against the BPI-R4 Pro 8X schematic and modem specifications before making it a universal firmware default.
The important point is that the fix is related to CN15 PCA9555 power/control initialization, not the MT7988 USB3/PCIe PHY configuration.