> For the complete documentation index, see [llms.txt](https://docs.morsemicro.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.morsemicro.com/application-notes/appnote-41-otp-and-bcf-selection.md).

# APPNOTE-41 OTP and BCF Selection

[Download as PDF](https://www.morsemicro.com/resources/appnotes/MM_APPNOTE-41_OTP_and_BCF_Selection.pdf)

## 1 Scope

This document describes the steps necessary for Morse Micro’s module partners to support automatic selection of Board Configuration Files (BCFs), and to participate in distribution of said BCFs by Morse Micro alongside our drivers.

This document applies to modules manufactured using all variants of the MM6108

&#x20;and MM810x Wi-Fi HaLow™[\[a\]](#cmnt1)[\[b\]](#cmnt2) chips.

For additional information on the BCF itself and its importance to correct operation of the module, please refer to MM APPNOTE-26: BCF Overview and Impact on System  Performance.

## 2 OTP Boardtypes

The MM6108 and MM810x chips have a small amount of OTP memory used for configuration and calibration data. There is a two-byte field reserved for a “boardtype”. This allows the driver to identify the specific module from software.

Morse Micro will now assign a one-byte prefix to each of our module partners. From this range, module partners should assign a one-byte suffix to each type of module. As these identifiers are used to select the BCF, any modification to the module that requires a new, incompatible BCF should get a new suffix.

For example, the Morse Micro uses a prefix of 0x08 for its own modules, and the  MM6108-MF08651-US reference module has a unique identifier of 0x01. The boardtype for this module is thus 0x0801.

## 3 Driver Behavior

When the Morse Micro driver for Linux is loaded it will select a BCF based on the following logic:

1. If  the bcf module parameter is set, attempt to load the file named in the modparam.
2. If the serial module parameter is set, attempt to load bcf\_.bin, where  is the value of the modparam.
3. If the serial modparam is default, read the OTP boardtype value.
4. If the value is 0x0000 (unset) or 0xFFFF (ignore), then use bcf\_default.bin
5. Attempt to load bcf\_boardtype\_xxxx.bin, where xxxx is the boardtype value
6. If boardtype is set and the file does not exist, abort the driver load.

This allows automatic selection of the correct BCF based on boardtype, but retains an ability to override that choice with a module parameter.

## 4 Programming OTP

The OTP eFuses on the MM6108 and MM810x can be read by the morse\_cli utility, and read and written using the morsectrl utility. While this section will only cover programming the boardtype value, this manufacturing step would be an excellent opportunity to program the MAC address and any private data required in OTP.

### 4.2 MM6108-specific requirements

Certain electrical conditions must be met when writing to OTP on the MM6108.

Per the datasheet, VDDIO must be 2.5V ±10% while programming. Attempting to program OTP with VDDIO outside this specification may result in damage to the OTP block.

### 4.2 Reading boardtype

To read the boardtype (if any) programmed into OTP, use the following morsectrl command:

`# morsectrl boardtype`

0x802

If the boardtype is not set, morsectrl will return

Board type is not set

\[NOTE: Add output from a board with boardtype set here]

### 4.3 Writing boardtype

To write the boardtype use the following morsectrl command:

`# morsectrl boardtype -w 0x0801`

## 5 Revision History

| Release Number | Release Date | Release Notes   |
| -------------- | ------------ | --------------- |
| 01             | 06/03/2025   | Initial Release |
