Support MA5671A SFP GPON

@xiaobo Its not convenient for me to buy from China, shipping times now are crazy.
Anybody know of a more available model that will work with Huawei OLT-s?

Just found this thread and since I've been through this years ago I might as well chime in...

@seb1 it seems you're experiencing sync issues since by default the modules are configured for the most part to be run @ 2.5Gbps rather than 1Gbps, but it could also be that your apu is underpowered? There isn't much option for 2.5Gbps sync but fortunately, I put a little effort into it and produced patches for the BCM57810S and BCM57711 network adapters and there is also the Ubiquiti ES-16-XG which fellow FTTH users are using successfully, but a lot of MC220L users have the same experience as you.

@morishe it looks like you followed ipsp bootloader unlock guide and went ahead and saved the environment, and unfortunately, it's missing a critical step in preserving the original environment. But you can recover your goi_config if you only saved the environment once since that time or you backed up your filesystem partitions since it resides in /etc/optic/.

If you only saved once you can enter the bootloader prompt and try to recover from the backup environment. There are two locations for the environment and alter per each save, which is why you can only recover if you saved once.

sf probe 0
sf read ${ram_addr} 40000 10000
env import -c ${ram_addr} 10000
env print


sf probe 0
sf read ${ram_addr} 80000 10000
env import -c ${ram_addr} 10000
env print

To recover your goi_config from /opt/optic just run the opposite commands of /etc/init.d/ which can be found at /opt/lantiq/bin/ and there is also /etc/config/goi_config

EDIT: Also my BCM links have additional information such as how to enable the luci pages, minishell commands (if for some reason you're keeping it), etc.

This thread is slowly moving off the topic. Ideally, you should create a separate topic dedicated to the CIG_G95_SP_001 module and provide the usual data output like other users: dmesg, cat /proc/mtd and then track the progress as users respond.
My goal is to keep this thread related to MA5671A module.


Thanks! Moved to a new topic.

is the xgs pon stick compatible with openwrt? if so wich version?

can all the necessary data be edit to register on isp olt?


its has own management web page, which can modify parameters such as loid and MAC to apply OLT registration. I don't know what system is inside, so I'm not sure whether it can be installed with the OpenWRT system.Huawei's telecommunications equipment cannot be sold outside China because of United States Trade Agreement

can you post pictures of customization area?

it would be nice if someone find a place to buy it to spread the link.


how much will cost each one with delivery to Europe

Is there something wrong?? All your posts have been withdrawn

Hello im trying to unlock the bootloader but doesnt unlock correctly (i uploaded the 1224ABORT Bin via Xmodem ) but afte the reset doesnt show the gpio pin but in printenv command all thing is correct

Environment size: 6985/65531 bytes
Timeout wai
ROM: V1.1.4
ROM: CFG 0x00000006
hw fuse format 1
U-Boot 2011.12-lantiq-gpon-1.2.24 (Nov 03 2014 - 22:46:28), Build: falcon_sfp_linux
Board: SFP
DRAM:  64 MiB
Now running in RAM - U-Boot at: 83fc8000
SF: Detected W25Q128 with page size 4 KiB, total 16 MiB
FALCON => printenv
addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${netdev}:off
addmisc=setenv bootargs ${bootargs} ethaddr=${ethaddr} machtype=${machtype} ignore_loglevel vpe1_load_addr=0x83f00000 vpe1_mem=1M mem=63M ${mtdparts}
addmtdparts0=setenv mtdparts mtdparts=sflash:256k(uboot)ro,512k(uboot_env),7424k(linux),8192k(image1)
addmtdparts1=setenv mtdparts mtdparts=sflash:256k(uboot)ro,512k(uboot_env),7424k(image0),8192k(linux)
boot_image=run boot_image${c_img};
boot_image0=run kernel0_from_sf flashargs addip addmtdparts0 addmisc && bootm ${ram_addr}
boot_image1=run kernel1_from_sf flashargs addip addmtdparts1 addmisc && bootm ${ram_addr}
boot_image_err=setenv kernel_offs ${kernel0_offs};httpd && setenv image0_is_valid 1
bootcmd=run flash_flash
flash_flash=run select_image boot_image
flashargs=setenv bootargs rootfstype=squashfs,jffs2
goi_config=begin-base64 644 goi_config@H4sIADKi1VgCA+1YS2/TQBDOlfyKRRxywt332lgcCi2oahFVE6WHClkbe5NY@xNnIdqH8e2adpnEStyAeES2eiyfz2BnP7rczjinjA7so0/hgYtOo1KOZiWa6@MHmUm3E0As6Liy+d3yIMJDmvnkDbT0wU7hCGpWCUYCI6ICDwQLizB7ouSp0j@1MmtLR+y+5H+kdILdGTR3JYonur5xKByatDg28KgNDHzMh2nJn8ehmHXyV6f@HfaPL6KL43dO8gINTLZAV6efQnRSTtHV9SFw/WNgLg8yx2tY76r41GUkCKXH@Aj8kPvcEwSHudlr6J8g8hP/fh/4v4l8Sylr8PzL8Zy3+nwb+v+hFEo2SP4T+@n8A/ruGfgZwIwWWL//3gP9nAv8P5LdqHh+dH0ZujFdJDNISWgK6GAGhKQuZ7@PqUtjp8U/uHG/gsxHMaVEPfiH26ACv9cKCWBx4Qq2c7/eyHcQuC/x39s5+N0@Ul0AS3a/+KcCZoO7/i9c/2eStvjfC3WXO45g81FvMrMjPet1n7mOYOforZ6l@o1w7fpBmBioFA3+PYhK8xOwl9geEvSJ+iIo4TxclGipPejxEH98enrkfwiMh@ene5ZFmvuxErd+NGsSUsYc4wEPA6N8tZtFgnU40jRaxn1T9TM/sV9bAH5+o+@i2k6md6ZbERJ4iSOYMbdDg4pFVlalia/RxMt7FenXAU8xxFGPaL8mog4EYP5@dWuNzM7T0tacB6l+r9N5dH7m1ljLP8BL1Aq/1LMmP7Ih3/UDPW3yoz/woxt+@R1BQqCe+TYRxsaMjdzrc6AeJEMaDRr9K56tGP+p0Qjb6VTpZ91snGeBN8W1+@vtws8025lGOP+kzA/UMD+Ehdm5xkNnEnablDvkcFU4FSAWa7UV2tabAb1r2e@pHI3rlN4kgZYYaqAmsKCTeD5EpLyCVG44WWrKjSEBbmSfDeq23qPUyYZxJVE@NkUFG+4F8NEecCx8wbcPstEF4DMz87IGPXwaDdznQY9QUTsggxUcXZW5T7FS@lBDCa+frot8/iQgPcKLzzytTaAuCQw6SY2gFDcb1dQmFlUVAwLTBcqFzPbKz@NF6ZQxJUYcy5pNuXks2utyQjW+j1omfWLj7YxFQA2bAbx0W6tns/7EOkmzG0@NLBrp4yWWmrpX6TvvTGOxwAcAAA=@====@
kernel0_from_sf=sf probe 0;sf read ${ram_addr} ${kernel0_offs} ${max_kernel_size}
kernel1_from_sf=sf probe 0;sf read ${ram_addr} ${kernel1_offs} ${max_kernel_size}
load_kernel=tftp ${ram_addr} ${tftppath}${image_name}-uImage
load_uboot=tftp ${ram_addr} ${tftppath}u-boot.img
net_nfs=run load_kernel nfsargs addip addmtdparts0 addmisc;bootm ${ram_addr}
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath},${nfsoptions}
preboot=gpio input 105;gpio input 106;gpio input 107;gpio input 108;gpio set 3;gpio set 109;gpio set 110;gpio clear 423;gpio clear 422;gpio clear 325;gpio clear 402;gpio clear 424
reset_uboot_env=sf probe 0;sf erase 40000 80000
save_uboot=sf probe 0;sf erase 0 40000;sf write ${ram_addr} 0 ${filesize}
select_image=setenv activate_image -1;if itest *${magic_addr} == ${magic_val} ; then if itest *${act_img_addr} == 0 ; then setenv activate_image 0;fi;if itest *${act_img_addr} == 1 ; then setenv activate_image 1;fi;mw ${magic_addr} 0x0;mw ${act_img_addr} 0x0;fi;if test $activate_image = -1 ; then setenv c_img $committed_image;else setenv c_img $activate_image;setenv activate_image -1;fi;if test $c_img = 0 && test $image0_is_valid = 0 ; then setenv c_img 1;fi;if test $c_img = 1 && test $image1_is_valid = 0 ; then setenv c_img 0;fi;if test $image0_is_valid = 0 && test $image1_is_valid = 0 ; then setenv c_img _err;fi;exit 0
update_image0=tftp ${ram_addr} ${tftppath}${image_name}-squashfs.image;sf probe 0;sf erase ${kernel0_offs} +${filesize};sf write ${ram_addr} ${kernel0_offs} ${filesize}
update_image1=tftp ${ram_addr} ${tftppath}${image_name}-squashfs.image;sf probe 0;sf erase ${kernel1_offs} +${filesize};sf write ${ram_addr} ${kernel1_offs} ${filesize}
update_openwrt=run update_image0 && setenv committed_image 0 && setenv image0_is_valid 1 && saveenv
update_uboot=run load_uboot && run save_uboot
ver=U-Boot 2011.12-lantiq-gpon-1.2.24 (Nov 03 2014 - 22:46:28)
Environment size: 6985/65531 bytes

Finally i unlocked after

setenv asc0 0

i have a question about the calibration
if the calibration is lost , the module works? or need to be calibrated? i have a module without any calibration (the image1 and image 2 was erased ) any solution maybe upload another calibration=?

One important note for other people reading this: You do NOT need to solder the short for pins 4 and 5 to unlock the bootloader, you can do this without solder easily by using a pair of metal (conductive/non-coated) tweezers to short the pins for just a few seconds while you power on the module (by connecting GND on your TTY connection).

I threw together a TeraTerm macro and a PowerShell script to facilitate taking proper backups / dumps of a module once you've unlocked the bootloader as described in ipsp's post and figured I'd share here for others.

This macro can be executed with ttpmacro.exe in the directory you'd like the dump to reside.

; Connect to COM4, wait for (and then abort) autoboot.
connect '/C=4'
wait 'Press SPACE to delay and Ctrl-C to abort autoboot in 5 seconds'
send #3
wait 'FALCON => '

; Enable auto-closing of log and get current working directory.
logautoclosemode 1
getdir dir

; Query gSerial for log file names.
sendln 'env print gSerial'
strsplit inputstr '=' 2
gSerial = groupmatchstr2

; Dump human readable environment variables.
dumpName = 'env'
call setlog
wait 'FALCON => '
sendln 'env print'
wait 'FALCON => '

; Dump mtd0 (uboot)
dumpName = 'mtd0'
mdAddress = 'B0000000'
mdSize = '10000'
call memdump

; Dump mtd1 (uboot_env)
dumpName = 'mtd1'
mdAddress = 'B0040000'
mdSize = '20000'
call memdump

; Dump mtd2 (image0) (linux)
dumpName = 'mtd2'
mdAddress = 'B00C0000'
mdSize = '1D0000'
call memdump

; Dump mtd5 (image1)
dumpName = 'mtd5'
mdAddress = 'B0800000'
mdSize = '200000'
call memdump

messagebox 'Dump completed.' gSerial

sprintf2 filename '%s\%s_%s.log' dir gSerial dumpName
logopen filename 0 0 1

call setlog
sprintf2 mdCmd 'md.l %s %s' mdAddress mdSize
sendln mdcmd
wait 'FALCON => '

This PowerShell script can be executed in the same directory that the macro dumped the log files to parse them from hex-dumps into binaries.

$dumpFiles = Get-ChildItem -Filter "HWTC*_*.log"
foreach ($file in $dumpFiles)
    $serial = $file.Name.Split('_')[0]
    mkdir $serial -Force
    mkdir "$serial\Log" -Force
    mkdir "$serial\Bin" -Force
    $noExtName = [IO.Path]::GetFileNameWithoutExtension($file.FullName)
    $content = [IO.File]::ReadAllLines($file.FullName)
    $cmd = $content[0].Substring(0,2)
    $content = ($content | select -Skip 1 | select -SkipLast 1)
    if ($cmd -eq 'md')
        $byteArray = [byte[]]::new($content.Length * 16)
        $arrayIndex = 0
        foreach ($line in $content)
            $lineData = ($line.split(' ') | select -Skip 1 -First 4)
            foreach ($4bytes in $lineData)
                foreach ($byteIndex in (6,4,2,0))
                    $byteArray[$arrayIndex] = [convert]::ToByte($4bytes.Substring($byteIndex, 2), 16)
        Set-Content "$($serial)\Bin\$($noExtName).bin" -Value $byteArray -Encoding Byte
    } else {
        Set-Content "$($serial)\Bin\$($noExtName).txt" -Value $content
    mv $file.FullName "$($serial)\Log\"

Bad news guys :frowning: I got a job at an ISP, the first thing I do is to jump right into their lab with an OLT in there, I plugged mine alcatel-lucent back-to-back with the OLT transceiver with a 2 meter jump cable, it detected the SFP ONT for a while then it went offline, the SFP ONT is still booted normally but there's no RX power on the device itself, showing GPON state O1 and the OLT doesn't detect it anymore.

One of my co-worker tell me I should not do that, it will fry both the ONT and OLT transceiver because the optical power is too high, welp, now I have a dead G-010S-P GPON ONT because of my ignorance :frowning:

I already tried factory reset, nothing help, it still radio silence and doesn't detect any RX

Well, it's just another learning experience. I'm surprised they didn't have a 1:8 or 1:16 splitter laying around in the lab. Connecting the ONT through the splitter would provide a safe optical level.

yes, they do have splitters but I thought it would be fine connecting directly so I just picked up the jump cable and it would be less of a mess.. oh well... ruined...

Also it's strange that my other SFP GPON from sercomm didn't get burned, I connect it the same way and it works just fine, the OLT do warn about too high RX on PON port though... I'm surprise that the ALCL got killed because the OLT transceiver is 20km, it shouldn't have enough power to burn? Worst case is saturated sensor making it non-functional temporarily but it's somehow burned mine...

i have a cuestion about a variable in uboot. what is this needed the command because if a remove it works well on mikrotik

setenv preboot "gpio input 105;gpio input 106;gpio input 107;gpio input 108;gpio set 3;gpio set 109;gpio set 110;gpio clear 423;gpio clear 422;gpio clear 325;gpio clear 402;gpio clear 424"

Where did you get modified uboot? Looks like it is the link above is removed.

BTW, anybody knows who compiled that uboot, may be there are sources?

One more question. Unlocked u-boot, everything works fine, got console.

Did not change anything more, just trying to check everything, dump flash, etc.

The system starts to load, but it fails after ~30 seconds and reboots. Don't know why, may be the device is powered only by uart 3.3V and no any other connects.

If anybody knows, please explain why it reboots.