I’m currently developping a system using the MM8108-EKH05 on the TX side and the MM8108-EKH19 on the RX side.
I’m having a hard time setting the transmission power to the maximum available (26dbm).
I am currently stuck at exactly 14 dBm (25 mW).
Here is my configuration:
Country Code: Set to "US" in config.hjson.
BCF: Set to bcf_mf15457.mbin and successfully flashed via OpenOCD/Python script.
Channel: 28 / 916 MHz.
Power Supply: USB-C 5V 3A.
Measurement: Mini-Circuit Power Sensor (50 - 6000 MHz).
I’v tried using mmwlan_override_max_tx_power(26); too but i’m getting the same result.
mmwlan_override_max_tx_power will only limit the TX power, it will never increase it past the default value in the regulatory database:
The US Max Tx EIRP (dBm) for all channels is 36, so setting 26 will actually be reducing the TX power. Can you try removing the override and measuring the power?
As an aside, mmwlan_override_max_tx_power should be called between app_wlan_init and app_wlan_start, rather than after app_wlan_start (see note in docs above)
The function is indeed called between init and start in my code :). However, even with the override removed completely, the TX power remains physically capped at 14 dBm on the power meter.
Is it possible that, since I purchased the eval kit in the EU, the maximum power is hardcoded/locked in the hardware for regulatory reasons, even though I configured the country code to US? Or should I be using a different BCF file than bcf_mf15457.mbin?
Weird, I must have gotten my wired crossed when reading the code
Assuming you updated the country code in the mmconfig (which should be the case if you are associating to a US based AP) there shouldn’t be any EU restrictions as far as I know.
Can you confirm how/where you are measuring the power? That should help with diagnosing on our side
Thanks for the clarification!
Regarding the measurement, I performed a conducted measurement: I connected the EKH05 directly via its SMA connector to a PWR-6LGHS USB Power Sensor (50 MHz - 6 GHz, -45 to +10 dBm) using a 20 dB attenuator to not fry the equipment. The reading consistently sits at exactly 14 dBm.
To confirm this wasn’t a measurement artifact, I also did some Line-of-Sight (LOS) tests outdoors (in a mostly openfield terrain). I completely lost the connection at ~250m, which seems logical with 14 dBm.
To address the mmconfig: yes, I did set “wlan.country_code”: “US” in my config.hjson and flashed it to the Config Store using the program-configstore.py tool.
Is there any other parameter that could clamp the PA hardware internally?
Hi,
Thanks for suggesting that sanity check.
Running a ping flood, the EKH19 is emitting between 20-22 dBm. Which is coherent with what iw dev wlan0 info is returning (txpower 20.00 dBm), altough when trying to set it with iw dev wlan0 set txpower fixed 2600 it doesn’t get changed.
However, my EKH05 remains strictly capped at 14 dBm.
{
/* You can specify a list of key/value strings in this section to write to config store */
/*this is equivalent to the write-string command */
"strings" : {
//"wlan.operating_mode": "AP",
"wlan.operating_mode": "STA",
/* The Wi-Fi SSID \*/
"wlan.ssid": "MM8108_EKH19",
//"wlan.ssid": "",
/* The Wi-Fi password, not required if wlan.security is open */
//"wlan.password": "EKH19_PW",
//"wlan.password": "",
/* The Wi-Fi security to use, valid values are sae, owe and open */
//"wlan.security": "sae",
"wlan.security": "open",
/* The 2 letter country code to ensure the correct regulatory domain is used */
"wlan.country_code": "US",
"wlan.channel": "28",
/* If true use DHCP, else the static IP configuration will be used */
"ip.dhcp_enabled": "false"
/* These settings are ignored if DHCP is used, but mandatory if using static IP */
"ip.address": "192.168.12.50",
"ip.netmask": "255.255.255.0",
"ip.gateway": "192.168.12.10",
//"ip.gateway": "255.255.255.255",
/* These settings are for IPv6, ip6.ip_addr is only required if ip6.autoconfig is */
"ip6.autoconfig": "true",
// "ip6.ip_addr": "FE80::2",
/* The following settings are required only for the udp_broadcast app */
/* Only used in "tx" mode. If set to zero packets will be sent forever. */
"udp_broadcast.packet_count": "10",
/* Only used in "tx" mode */
"udp_broadcast.packet_interval_ms": "1",
"udp_broadcast.port": "1337",
/* The udp broadcast mode, valid values are "tx" or "rx" */
"udp_broadcast.mode": "tx",
/* Used in "rx" mode to specify the device’s index into the received data array
(see the documentation in udp_broadcast.c) */
"udp_broadcast.id": "0"
},
"hex_strings" : {
},
"files" : {
"bcf_file": "$MMIOT_ROOT/morsefirmware/mm8108/bcfs/bcf_mf15457.mbin"
}
}
Hello,
Yes, the measurements were taken with the device associated to the AP. Here is the output of mmwlan_get_vif_channel_info:
Operating Class (op_class) : 4
S1G Channel Number (s1g_chan_num): 28
Bandwidth MHz (pri_bw_mhz) : 2 MHz
Primary 1MHz Index (pri_1mhz_idx): 3
Which is strange, since the EKH19 (AP) is configured for 8MHz bandwidth on channel 28. Could this fallback to 2MHz be the reason why the TX power is clamped to 14 dBm?
update: I just verified the actual TX transmission BW over the air using a spectrum analyzer, and the physical bandwidth is indeed 8 MHz, despite the mmwlan_get_vif_channel_info reporting 2 MHz.
It seems there is a desync between the actual PHY state and the SDK state. Could this be tricking the software into applying the 2 MHz regulatory limits while the radio is physically operating at 8 MHz?
The channel on the STA side is 28, which means the operating channel is 8MHz. The pri_bw_mhz is the bandwidth of the primary channel, which is the (sub)channel used for sending important management and signalling frames. The primary channel is always 1 or 2 MHz for HaLow, so this is all as expected.
Can you try run a 60s UDP iperf client (with the iperf server running on the EKH19) and report the power measured and the tput results?
Try running the iperf example application without any modifications to override of power/bandwidth etc, with the mmconfig configuration updated to be a udp_client and with the relevant AP details.
Relevant sections to modify:
The intention here is to use an application we can run, to flood the medium with traffic and see what power you observe, with throughput as a proxy for utilisation - which we can then compare internally
Apologies for the delayed reply, I was away on leave for the past few weeks.
Following your instructions, I ran the stock iperf application in UDP client mode over the 8 MHz channel (channel 28) to flood the medium.
Here are the measurements captured on the power meter:
Average TX Power:15 to 16 dBm
Peak TX Power: reached a transient peak at ~18 dBm
As this project is now reaching its deadline, I’ll be freezing my setup and wrapping up further hardware tests. I hope these figures provide useful data points for your internal comparison.
Thank you again for your support throughout the investigation your reactivity was much appreciated.