Correct firmware + BCF for WM6108 / FGH100M-H on Pi OpenWrt and Seeed Wifi-Halow+ESP32?

I am trying to confirm the correct firmware and BCF combinations for Seeed/Morse HaLow hardware. I have read every post I could find about the firmware & BCF with confusing results.

Hardware under test:

AP side:

  • Raspberry Pi + Seeed HaLow Raspberry Pi HAT
  • Module WM6108 / FGH100M-H / MM6108-based
  • Running Morse OpenWrt image

STA side #1:

  • ESP32-S3 + Heltec HT-HC01P
  • MM6108-based

STA side #2:

  • ESP32-S3 + Seeed Wifi-HaLow for XIAO / FGH100M-H module
  • MM6108-based

# PI AP + ESP32+Heltec STA

For the Raspberry Pi / OpenWrt AP, we think we have a mostly working pair:

  • Firmware: /lib/firmware/morse/mm6108.bin
  • BCF: /lib/firmware/morse/bcf_mf16858_fgh100mh_v6.3.0.bin

With this AP configuration, the Heltec HT-HC01P station works well at distance and penetrating walls.

However, when selecting some channels we see lots of SPI errors and the radio may fail to come up. Lower/mid channels seem stable, but some higher channels trigger errors like:

  • morse_spi_cmd53_write failed
  • morse_spi_mem_write failed (errno=-71)
  • morse_spi_reg32_write failed (errno=-71)
  • morse_firmware_init failed
  • morse_spi_probe failed

Question 1: Is mm6108.bin + bcf_mf16858_fgh100mh_v6.3.0.bin the correct/recommended pair for the Seeed Raspberry Pi HaLow HAT / WM6108 / FGH100M-H? If not, what exact firmware and BCF should be used?

Question 2: Could incorrect or incomplete BCF configuration cause channel-dependent SPI errors, or should that be treated as a host/SPI/device-tree/power issue instead?

# PI AP + ESP32+Seeed Wifi Halow

For the Seeed ESP32 station, we are less certain. We tried several firmware/BCF combinations.

## Best match we found - mm6108.mbin / bcf_mf16858.mbin

  • Driver loads without error
  • RF Signal poor, only works up to 30 feet
  • ~6 ft: -50 dBm
  • ~8 ft: -57 dBm
  • ~20 ft -69 dBm
  • ~30 ft: -78 dBm

## mm6108_seeed_ac07cf.mbin / bcf_mf16858_us.mbin

  • Incompatible FW version: (Driver) 56.0.0, (Chip) 54.0.0
  • Firmware init failed

## Mixing the old bcf_mf16858_us.mbin with the current mm6108.mbin

  • FW manifest pointer not set
  • Firmware init failed

Question 3: For the Seeed Wiofi-Halow XIAO / FGH100M-H connected to ESP32-S3 using MM-IoT ESP32 SDK, what exact firmware and BCF files are recommended?

Question 4: Are bcf_mf16858.mbin, bcf_mf16858_us.mbin, and bcf_mf16858_fgh100mh_v6.3.0.bin intended for different hardware, different SDK generations, or different host platforms?

Question 5: Does the BCF control RF front-end details such as PA/LNA/FEM/antenna path for these modules? We are trying to determine whether the short range on the Seeed ESP32 setup could be caused by the wrong BCF selecting the wrong RF path.

Thanks!

Hi @ScottC385

Yes. MM6108 is the chip firmware. bcf_mf16858_fgh100mh_v6.3.0.bin is the BCF file supplied by Quectel, compatible with 1.12 Morse Micro firmware.

This is unlikely to be cause by an incorrect BCF. And the errors you have shown (-71 [EPROTO]) are more likely to be caused by signal integrity problems or power supply issues.
Given you are using a hat, check your power supply.


The BCF file should match the module used. If you’re using an FGH100MH (as on the Seeed WM6108 carrier boards), then you want to use an FGH100MH BCF file.
For Heltec modules, you should use a BCF supplied by Heltec. For the HT-HC01P, that can be found here: https://resource.heltec.cn/download/HT-HC01P/BCF/driver_1_15_3
Don’t try to mix and match BCF files, you will likely run into more issues.

MF16858 is a Morse Micro module reference design. You should be using the FGH100MH BCF. Quectel have prefixed the name withs MF16858 as it was based on that Morse Micro reference design. See the end of this reply for a comment about versioning.

Yes. Using the wrong module can, and often will, obliterate your RF performance. Don’t mix and match.

There is often a firmware dependency on the BCF. That is, the chip firmware and BCF version must be compatible. Using a BCF which is too old (eg v6.3) on newer chip firmware can cause these errors you were seeing

  • FW manifest pointer not set
  • Firmware init failed
  • Incompatible FW version: (Driver) 56.0.0, (Chip) 54.0.0
  • Firmware init failed

To alleviate this, for module manufacturers which have given us permission, we distribute some vendor BCFs on our GitHub. See morse-firmware/bcf/quectel at main · MorseMicro/morse-firmware · GitHub
For newer versions of the MM-IoT-ESP32 SDK, you will want to take a BCF which matches your module from this repository, and convert it with the convert-bin-to-mbin.py script provided in the MM-IoT-SDK.

Just double checking here, the antenna attached to the HaLow hat’s coaxial port, is this a dedicated 900MHz antenna? From memory the Seeed’s ESP32 boards come with a flexible coaxial 2.4GHz antenna that can be plugged into the hat’s coaxial connector which would result in horrendous performance

Great answers, thank you.

For the ESP32 + Seeed FGH100M-H module, we tested mm6108.mbin with both bcf_mf16858.mbin and bcf_fgh100mhaamd.mbin; both initialize and associate, but RF performance remains very poor under traffic, with iperf failing beyond roughly 4-6 ft while sta_connect can sometimes report RSSI at longer distances. Antenna changes affect the result significantly, but neither BCF/FW pair has produced range comparable to the Heltec HT-HC01P setup.

I have tried 3 different antennas, all specifically for 915mhz. There is some variations in performance, but the ESP32+Seeed hardware has never reached more than 30ft for me, where as the ESP32+Heltec HC01 works well at 150ft (the max I tested so far). I can’t figure out why, but we will use the Heltec for our current testing.

Lastly, the RPI+Seeed hat is powered by a 3 amp bench supply. The lower channels work perfectly, but if I select the higher channels, I start getting the SPI errors. I am building a second RPI AP and will see if it has the same problems.

Thanks for your help!