Skip to content

Hardware Specifications ​

Vendor/BrandFree/Iliad
ModelF-MDCONU3A
ODM✅
ODM Product Code
ChipsetBCM55030B2FBG rev B2
FlashW25Q32J (4 MB SPI)
RAMembedded SRAM (DCCM)
CPUARCompact[1], big endian
CPU Clock
BootloaderTK2000 Boot v3.27
Systembare-metal (no OS)
Load addr0x20000000 (ICCM)
HSGMIINo
OpticsSFP w/o MAC
IP address
Web Gui
SSH
Telnet
Serial✅
Serial baud57600
Serial encoding8-N-1
Form FactorONT

The BCM55030 is a 10G-EPON DPoE (DOCSIS Provisioning over EPON) ONU/ONT used by Free/Iliad (France) on their FTTH network. The PON side operates in asymmetric 10G/1G mode: downstream at 1577 nm / 10.3125 Gb/s, upstream at 1310 nm / 1.25 Gb/s burst (IEEE 802.3av).

The BCM55030's UNI (User Network Interface) side should be capable of 4xSGMII (1 GbE) or 1xXAUI (10 GbE) or 1xXFI (10 GbE SFP) or 1xRGMII, but only one SGMII lane is actually routed (1000BASE-X via soldered SFP+ male connector).

UNI link won't go up when connected to a media converter or directly to a NIC. The firmware waits for a valid 1000BASE-X partner before activating the PON side (circular dependency).

The CPU uses a Harvard architecture: ICCM (Instruction Closely-Coupled Memory) for code execution and DCCM/SRAM for data. Code in ICCM is not readable via the data bus — the mem/rf command can only read data memory, not firmware code.

Serial ​

The serial port is easily accessible at TP5 and TP6. A prompt is available without authentication, it is structured as a tree of directories. To navigate type the subdirectory name. To go back type / and hit enter. To list available commands type help or ?.

CLI Permission Levels ​

The CLI has a 3-level permission system. By default, UART connects at level 0 (restricted). The pl (Permission Level) built-in command switches between levels without any authentication:

CommandLevelEffect
pl reset0Default restricted access
pl alpha1Debug mode — unlocks ~20 additional commands
pl omega2Full manufacturing access — unlocks ALL commands

The pl command is a framework built-in keyword (like help and ..) that is processed before the permission-checked command tree walk. It never passes through the permission gate, so it works from any level — including the default level 0.

The permission byte is stored at a single RAM address and persists for the duration of the session. It resets to 0 on reboot. To persist a higher level across reboots, use fds/write (available at level 1+) to write to FDS group 4, record 7.

Command tree ​

Level 0 (default — ~60 total commands):

- mac/
    - epon                  show EPON MAC address
    - user                  show UNI MAC address
- alm/
    - info                  show alarm status
    - gpio                  show GPIO/channel state
- debug/
    - mcast                 dump active classifier rules
    - mpcp                  dump MPCP BW queue config
    - nco                   dump NCO sync state
    - rstp                  dump debug ring buffer
    - sysd                  dump system event log
- epon/
    - eponmac               show EPON MAC address
    - usermac               show UNI MAC address
    - dom                   date of manufacture
    - ponspeed              get/set PON speed mode
- fds/
    - erase                 erase FDS banks 2+3 (⚠️)
- load/
    - info                  show firmware slot info
    - commit                activate flashed firmware (⚠️)
    - setRecoveryPoint      mark Diag as recovery
    - runRecoveryPoint      prepare boot from recovery
    - rx                    receive firmware over UART (⚠️)
- mcast/
    - igmpinfo              IGMP snooping state
    - igmpsources           IGMP SSM sources
- mem/
    - rf                    read data memory
- mpcp/
    - info                  MPCP registration state
    - failsafe              get/set failsafe mode
    - oltmac                show OLT MAC address
- pers/
    - read                  dump personality data
- serdes/
    - sdextlptest           SerDes loopback test
    - serdesTestInit        init PRBS test
    - serdesRx              check SerDes RX status
- stats/
    - clear                 reset all counters
    - gather                trigger counter collection
    - epon                  EPON MAC counters
    - fifo                  FIFO/queue counters
    - lif                   laser interface counters
    - uni                   UNI port counters
    - xif                   cross-connect counters
    - statsmode             get/set counter read mode
- log/
    - show                  show system event log
    - level                 get/set log verbosity
- sysd/
    - frmdmp                toggle EPON frame dump
- clionly                   disable all subsystems except CLI (⚠️)
- clr                       clear terminal
- ints                      show interrupt status
- reg                       read CLI register
- reset                     full system reset (⚠️)
- set                       write CLI register
- echo                      echo text
- sftver                    show firmware version

Level 1 (pl alpha — adds these):

- access/
    - read                  hardware peripheral bus read (I2C/SPI)
    - write                 hardware peripheral bus write
- mdio/
    - read                  MDIO PHY register read
    - readlst               list MDIO registers
    - write                 MDIO PHY register write
- lue/
    - lin/
        - inst              LUE linear lookup
    - bin/
        - inst              LUE binary lookup
- cust/
    - e                     examine custom data
    - r                     read custom data
    - w                     write custom data
- fds/
    - info                  FDS bank status
    - write                 write FDS record (⚠️)
    - read                  read specific FDS record
- mem/
    - rm                    read memory (alternate)
    - wm                    write 32-bit word to memory (⚠️)
    - wf                    fill memory region (⚠️)
    - ef                    erase/zero memory region (⚠️)

Level 2 (pl omega — adds these):

- efuse                     read eFuse OTP memory
- efusebits                 read eFuse bit-level detail
- learn/
    - dump                  dump MAC learning table
    - flood                 enable/disable flood mode
    - switch                enable/disable L2 switching
    - max                   get/set max MAC entries
    - apply                 apply config to hardware
- gmc/
    - le                    multicast config
    - ld                    multicast config
- serdes/
    - sdp                   SerDes PON debug
    - sdu                   SerDes UNI debug
    - clk                   SerDes clock config
    - dump                  dump SerDes debug registers
- debug/
    - fc                    flow control debug
    - epon                  EPON link context dump
    - learn                 MAC learning engine debug
    - eap                   EAP-TLS auth debug
- fifo/
    - queue                 FIFO queue management
- eae/
    - eap                   EAP MAC address
    - mka                   MKA protocol state
    - mtime                 MKA timing parameters
    - klen                  MACsec key length
- xau/
    - xcap                  10G AU system capture
- fec/
    - auto                  FEC auto-negotiation
- fds/
    - append                append FDS record (⚠️)
    - export                export FDS records
    - copygroup             copy FDS group (⚠️)
- mem/
    - tf                    memory test (destructive) (⚠️)
- reglist                   list all CLI registers
- regbits                   show register bit fields

CLI command reference ​

System ​

CommandSyntaxDescription
sftversftverPrint firmware version, chip ID, and DPoE OAM mode. Output: 2000 0000 v3.2.9 (Rel) / DPoE OAM: Off. Build types: 0=Rel, 1=Custom, 2=Beta, 3=Alpha, 4=Eng.
resetresetFull system reset. Gracefully shuts down EPON link, flushes pending FDS writes, logs the reset event with timestamp, then halts the ARC CPU (aux register 0x28). The ONU reboots.
clionlyclionlyDisable all firmware subsystems (EPON, MPCP, DPoE, MACsec) except CLI UART processing. The ONU becomes non-functional for PON but still responds to commands. Requires reset to return to normal.
clrclrClear terminal screen (ANSI escape).
echoecho [text]Echo text back to UART.
intsintsDump interrupt controller status: 26 IRQ sources with priority levels (3-bit fields), pending/enable bitmaps, ARC STATUS32 E1/E2 bits.
regreg [name]Read a CLI framework register by name. Without arguments, lists all registers. These are software configuration registers, not hardware MMIO.
setset <name> <value>Write a CLI framework register. Value is a uint8 (0–255). Changes are RAM-only, lost on reboot.
reglistreglistList all CLI framework registers with values. (Level 2)
regbitsregbits <name>Show a register value with individual bit fields expanded. (Level 2)

EPON / MAC ​

CommandSyntaxDescription
epon/eponmacepon/eponmacShow the EPON MAC address (6 bytes, no separators). This is the MAC used for MPCP registration. Example: 68A378C25F94.
epon/usermacepon/usermacShow the UNI-side MAC address. On this ONU, identical to the EPON MAC.
epon/domepon/dom [year] [month] [day]Get or set the Date of Manufacture. Without args, prints current date. With 3 args, writes the date. Output: Date of Manufacture: 2020-1-15.
epon/ponspeedepon/ponspeed [dnrate uprate [port]]Get or set the PON speed mode. Without args, shows current speed/FEC config. dnrate: 0=1G, 1=2G, 2=10G. uprate: 0=1G, 1=10G. port (optional): 0=secondary, 1=primary (default). Persists to flash (FDS) and triggers full EPON link reinitialization. Free uses asymmetric 10G/1G = epon/ponspeed 2 0.
mac/eponmac/eponSame as epon/eponmac.
mac/usermac/userSame as epon/usermac.

MPCP ​

CommandSyntaxDescription
mpcp/infompcp/infoShow MPCP registration state and slot count. Output is JSON-like: [[state,slots]] per LLID. States: 1=WAITING (unregistered), 2=TRANSITION (discovery), 3=REGISTERED. Example: [[1,32]] = waiting, 32 slots.
mpcp/oltmacmpcp/oltmacShow the OLT MAC address from the last MPCP registration. 000000000000 = never registered.
mpcp/failsafempcp/failsafe [mode]Get or set the MPCP failsafe mode. Controls ONU behavior on registration failure/timeout. Without args, shows current mode.

Memory ​

CommandSyntaxDescription
mem/rfmem/rf <addr> [count]Read count bytes (default 4) from data memory at addr. Address is passed as-is; displayed address adds 0x80000 (cosmetic). Due to Harvard architecture, only reads DCCM/SRAM — cannot read ICCM (firmware code). Wraps every 512 kB. Example: mem/rf 0x2003e174 4 → 200be174: 09 9b ff ff.
mem/wmmem/wm <addr> <value>Write a 32-bit word to memory. (Level 1) Direct write to arbitrary address — can corrupt state or crash.
mem/wfmem/wf <addr> <value> <count>Fill memory region with a value. (Level 1)
mem/efmem/ef <addr> <count>Erase (zero-fill) a memory region. (Level 1)
mem/tfmem/tf <addr> <count>Memory test with write/readback patterns. Destructive. (Level 2)

Statistics ​

CommandSyntaxDescription
stats/eponstats/eponShow EPON MAC counters for all 32 LLIDs (18 TX + 15 RX per LLID) plus 6 global counters. Counters are 64-bit in software mode, 32-bit in register mode.
stats/unistats/uniShow UNI port counters (PHY1: 50 counters × 4 channels).
stats/lifstats/lifShow laser interface counters (PHY3: 47 counters per channel). All zeros when PON inactive.
stats/xifstats/xifShow cross-connect interface counters (PHY2: 30 counters per channel) plus SerDes config words.
stats/fifostats/fifoShow FIFO/DMA queue counters with channel occupancy and throughput.
stats/clearstats/clearReset ALL statistics counters to zero (EPON, PHY, MACsec, channel). Silent on success.
stats/gatherstats/gather [mode]Get or set the periodic stats collection mode. Output: Gather N.
stats/statsmodestats/statsmode [mode]Get or set counter read mode. 0 = Software (64-bit accumulated buffers), 1 = Register (32-bit direct HW read). Output: statistic mode 0(Software(64bit)).

Firmware / Flash ​

CommandSyntaxDescription
load/infoload/infoShow all firmware slots (Boot, App 0/1/2, Diag) with version, size, CRC, build timestamp, and pass/fail status. pass = valid CRC, fail = bad CRC or empty slot (0xFFFFFFFF). See output example below.
load/rxload/rxEnter raw binary firmware receive mode over UART. See Firmware Flash Protocol.
load/commitload/commitActivate the most recently flashed firmware by swapping the active bank pointer in FDS. Must be followed by reset.
load/setRecoveryPointload/setRecoveryPointMark the Diag slot as a valid recovery point. Verifies CRC first. Output: OK or FAIL.
load/runRecoveryPointload/runRecoveryPointPrepare boot from the recovery point. Output: Ready to run recovery point, please reset or No recovery load to jump to. Must be followed by reset.

FDS (Flash Data Storage) ​

CommandSyntaxDescription
fds/erasefds/eraseErase FDS banks 2 (events) and 3 (provisioning). Loses DPoE config (VLANs, classifiers) and event history. Bank 0 (firmware) and bank 1 (personality/MAC) are preserved. ONU must be re-provisioned by OLT after reboot.
fds/infofds/infoShow FDS bank status (active bank, record count, free space). (Level 1)
fds/readfds/read <group> <record> [sub]Read a specific FDS record by group/record/sub IDs. (Level 1)
fds/writefds/write <group> <record> <data...>Write data to an FDS record. (Level 1)
fds/exportfds/export [group]Export FDS records as hex dump. (Level 2)

Alarms / Debug ​

CommandSyntaxDescription
alm/infoalm/infoShow current alarm status (MpcpFErr, OnuReset, UniLinkDown, PonPortLos, etc.).
alm/gpioalm/gpioShow GPIO/channel states. On the BCM55030, LEDs are controlled through EPON MAC queue-to-pin mapping, not raw GPIO.
debug/mpcpdebug/mpcpDump MPCP bandwidth queue config for both PON lanes: per-queue VLAN, min/max BW, priority, scheduling mode (Strict/Weighted), total BW.
debug/mcastdebug/mcastDump active DPoE classifier rules (8 slots with rule type, VLAN, priority, match value).
debug/ncodebug/ncoDump NCO (Numerically Controlled Oscillator) synchronization state, used for MPCP timestamp generation.
debug/rstpdebug/rstpDump debug ring buffer (32 timestamped event entries).
debug/sysddebug/sysdDump system event log from FDS. Same as log/show.
debug/epondebug/eponDump full EPON link context: LLID state, encryption, cipher config, MACsec SA. (Level 2)
debug/eapdebug/eapDump EAP-TLS authentication state: TLS handshake, certificate, RSA sign. (Level 2)
log/showlog/showShow system event log with timestamps: MpcpFErr, OnuReset, UniLinkDown, PonPortLos, etc.
log/levellog/level [level]Get or set log verbosity level (0–255). Without args, shows current level. Not persistent.

Multicast ​

CommandSyntaxDescription
mcast/igmpinfomcast/igmpinfoShow IGMP snooping state: enabled/disabled, per-group forwarding qualifier, IPv4 flag, group address, SSM domain bitmap, group state, timer values. Supports IGMPv1/v2/v3 and MLDv1/v2 (RFC 3376).
mcast/igmpsourcesmcast/igmpsourcesShow IGMP Source-Specific Multicast (SSM) source entries: in-use flag, IPv4 flag, SSM ID, source IP.

Personality ​

CommandSyntaxDescription
pers/readpers/readDump personality data from FDS: 34 records across multiple groups (MAC addresses, serial number, SerDes calibration, crypto certificates, provisioning defaults) + 47 SerDes PHY calibration blocks. Total: ~49 KB.

SerDes ​

CommandSyntaxDescription
serdes/sdextlptestserdes/sdextlptest [lane]Run PRBS external loopback test on a SerDes lane (0–3, PON lanes only). Enables loopback, runs test, dumps debug registers (0x60–0x7D), disables loopback.
serdes/dumpserdes/dumpDump SerDes debug registers: PON lane (0x70–0x7D) and UNI lane (0x60–0x6D). (Level 2)

Hardware access (Level 1+) ​

CommandSyntaxDescription
access/readaccess/readRead from the hardware peripheral bus (I2C/SPI/MDIO). (Level 1)
access/writeaccess/writeWrite to the hardware peripheral bus. (Level 1)
mdio/readmdio/read <phy> <reg>Read a PHY register via MDIO bus. Supports Clause 22 and Clause 45. (Level 1)
mdio/writemdio/write <phy> <reg> <value>Write a PHY register via MDIO bus. (Level 1)
efuseefuseRead and display eFuse (OTP) contents: chip MAC, serial number, manufacturing trim values. (Level 2)
efusebitsefusebitsDisplay eFuse bit-level detail. (Level 2)

MACsec / EAP (Level 2) ​

CommandSyntaxDescription
eae/eapeae/eapShow EAP MAC address used for EAP-TLS authentication.
eae/mkaeae/mkaShow MKA (MACsec Key Agreement) protocol state and MKPDU source address.
eae/mtimeeae/mtimeShow MKA timing parameters (hello interval, lifetime, SAK rekey interval).
eae/kleneae/klenShow MACsec key length config (AES-GCM-128 or AES-GCM-256).

PON speed mode encoding ​

dnrateuprateModeDescription
001G/1GStandard EPON
102G/1GMixed mode
2010G/1GAsymmetric 10G-EPON (Free/Iliad)
2110G/10GSymmetric 10G-EPON

load/info output ​

TK2000 APP 3.27 May 13 2016 02:48:05  Chip: 4701 B2110816
Mode: App Normal
EPON MAC: 0x8C97EA6C17AC

Executing: NA
2000 0001 v3.2.7 (Rel)
Size: 319044 CRC: 0x2FAF887F
Type: 02 Subtype 0C Flags 04
Stream: 112 Revision: 131152
Time: 2016-05-18 01:28:44Z

Boot: pass
2000 0000 v3.2.7 (NA)
Size: 42896 CRC: 0xC87371F8
Type: 01 Subtype 0C Flags 04
Stream: 114 Revision: 127457
Time: 2016-01-20 05:45:49Z

App 0: fail
FFFF 0000 vFF.FF.FFFF (NA)
Size: 4294967258 CRC: 0xFFFFFFFF
Type: FF Subtype FF Flags FF
Stream: 4294967295 Revision: 4294967295
Time: 65535-255-255 255:255:255Z

App 1: pass
2000 0001 v3.2.7 (Rel)
Size: 319044 CRC: 0x2FAF887F
Type: 02 Subtype 0C Flags 04
Stream: 112 Revision: 131152
Time: 2016-05-18 01:28:44Z

App 2: pass
2000 0001 v3.2.9 (Rel)
Size: 319240 CRC: 0x3FBE2A30
Type: 02 Subtype 0C Flags 04
Stream: 116 Revision: 167733
Time: 2019-03-13 01:47:37Z

Diag: pass
2000 0001 v3.2.7 (Rel)
Size: 319044 CRC: 0x2FAF887F
Type: 02 Subtype 0C Flags 04
Stream: 112 Revision: 131152
Time: 2016-05-18 01:28:44Z

Firmware Flash Protocol ​

The load/rx command accepts a firmware image over UART using a raw binary transfer (no XMODEM, no handshake):

  1. Wait for the 2000/> prompt
  2. Send load/rx\r
  3. ONU responds: Begin binary transfer...
  4. Send the TKF image as raw binary at 57600 baud (~55 seconds for 319 KB)
  5. ONU responds: Transfer complete: N bytes received
  6. Send load/commit\r to activate the new slot
  7. Send reset\r to reboot

The firmware image must be wrapped in a TKF (Teknovus) container:

[header 39 bytes] [payload N bytes] [CRC32 4 bytes]

The trailing CRC32 covers the entire header+payload (standard IEEE 802.3 CRC, big-endian). The ONU writes to App 0 and App 1 slots in rotation. There is no flow control and no error correction — the UART link must be reliable.

List of partitions ​

The flash memory (W25Q32J, 4 MB SPI) has 5 regions. Each application section starts with a 39-byte TKF header and ends with its CRC.

SectionStart addressEnd addressSizeVersion
Bootloader0x0000000x00A79042 KBv3.27
FDS/Config0x00A7900x120000~460 KB—
App 10x1200270x16DE6B319 KBv3.2.7
App 20x1A00270x1EDF2F319 KBv3.2.9
Diag0x2700270x2BDE6B319 KBv3.2.7

(End address is non-inclusive)

App slots are located at 512 KB (0x80000) intervals. The CPU can address only 512 KB of flash at a time (verified by mem/rf wrapping behavior). The FDS (Flash Data Storage) region between the bootloader and App 1 contains personality records, MAC addresses, SerDes configuration, and CLI config data (34 known FDS record types).

Useful files and binaries ​

EEPROM ​

There is an SFP plug on the UNI side with an embedded EEPROM.

EEPROM layout ​

00000000  03 04 00 00 00 00 00 00  00 00 00 00 0a 00 00 00  |................|
00000010  00 00 00 00 46 52 45 45  42 4f 58 00 00 00 00 00  |....FREEBOX.....|
00000020  00 00 00 00 00 8c 97 ea  46 2d 4d 44 43 4f 4e 55  |........F-MDCONU|
00000030  33 41 00 00 00 00 00 00  30 32 00 00 00 00 00 38  |3A......02.....8|
00000040  00 00 00 00 38 36 38 38  30 32 4a 32 30 32 33 34  |....868802J20234|
00000050  36 32 39 35 32 30 30 36  30 39 30 30 00 00 00 ec  |629520060900....|
00000060  38 36 38 38 30 32 4a 32  30 32 33 34 36 32 39 35  |868802J202346295|
00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200

Miscellaneous Links ​


  1. ARCompact Instruction Set Architecture Programmer's Reference http://me.bios.io/images/d/dd/ARCompactISA_ProgrammersReference.pdf ↩︎

Copyright © 2022-2026. The documentation hereby found is distributed under the terms of the MIT License. Any external reference, link or software retains its original license and is not under the control of this website. Privacy Policy.