Repacked firmware update for A31 module with WEB UI fixes.

Hello, how do you upgrade with an all burning version?

Hi, Miguel, yes the same speakers :slight_smile: Yes i can, but do not know there to send it to you. Not shure about the policy of this forum, do i can add a link to the file or i have to share with You in personal. i got this update tool from the support of Power Dynamics team.

Hi Justinas, many thanks for the update tool and the confirmation that the speakers were Power Dynamics.

I updated them to version 4.6.415145 with no issues at all and now they sycronize perfectly with my Arylic 50+. Simply amazing!!

THANK YOU.

Glad that helped

Thank you so much for the firmware!! My FABRIQ speaker is back to life perfectly.

UPDATE – Not entirely on topic, but I recently tried to flash an openWRT firmware onto my A31 module and it kinda bricked it. Wifi/Ethernet stopped working and I can only access via UART (I suspect that actually the BT MCU I am connecting to here) where most of the commands don’t work anymore. As such, can someone post a copy of the full firmware that’s copied from flash memory directly. I can flash it using ASProgrammer and CH341A tool which I already tested using a firmware I tried making my self by combining boot loader with linked firmware from above.

BTW great job on including ssh on the updated firmware. If you are going to do another update also include sftp support.

Thanks in advance.

Hello.
I flashed the firmware version with only changes in WebUI and I have a problem with i2s.
I2S is dead. I checked it with an oscilloscope and there’s only some noise (10mV changes on all I2S pins). Linkplay A31 is connected to PCM5102A (I checked with rpi4 and it works).

Should this work or have I missed some configuration?

Hi, with this firmware, the I2S of A31 is configured in slave mode, and I think it’s not suitable for your board.

1 Like

Do you have access to any firmware with i2s in master mode? Or perhaps some old firmware?

yes, there’s a master version firmware, but a bit old, you could try it out: https://drive.google.com/file/d/12o5AqKYaSOG1GQy18Fkne4KlfDUdmK8w/view?usp=drive_link

1 Like

I2s is working in master mode.
The only problem is that the WebUI doesn’t work but I don’t need it

Access Error: Site or Page Not Found

Thank you very much.

This is common firmware to recover your device, no webUI actually…

Hey there, I’ve recently updated my A31 module to your allburning firmware using the updateTool and it doesn’t seem to be working anymore now :/.

It has no WiFi AP anymore and there’s no activity on relevant pins (UART, I2S, USB, checked with a logic analyser). At boot there is a lot of data transfer between the SoC and SPI flash though, so I’m pretty sure it’s not a hardware issue. Unfortunately, I can’t check for any logs, since the serial console seems to be disabled too.

It can very well be my mistake though, because after upload and installation reached 100% in the tool, nothing happend for a few minutes, so I decided to pull the plug to force a reboot. But now that I have no way to update the firmware, I’m thinking of flashing the firmware directly to the SPI flash. Before I do that though, I wanted to ask here if someone has a better idea or any tips.

Device info, before the update:

{
  "uuid": "FF310010ADE1EC7AA803F21B",
  "firmware": "4.2.9228",
  "hardware": "A31",
  "build": "release",
  "project": "GGMM_E3B",
  "priv_prj": "GGMM_E3B",
  "project_build_name": "a31ggmme3",
  "Release": "20210128",
  "branch": "stable\/wiimu-4.2",
  ...
}

I know it’s not an Arylic product, but I would really appreciat your insights @zpl1025 :).
Also, I got this device for free, so it’s not a big deal if I don’t get it working, I’m just doing this out of curiosity and fun.

errr, I’m not sure what’s going on, but I think you’re right, you should not cut power in this process, maybe the upgrading process is terminated unexpectedly.

If you have another board, could read out the firmware from NOR flash, and download to the broken board, the you will have 2 exactly same board including MAC :slight_smile:

Hey Frank, thanks for your reply.

I did some further investigation since my last post and have some updates. After the failed update, I checked the flash content and it seems that both Wiimu Rootfs sectors got destroyed. I guess the update didn’t finish (also the layout wasn’t the same as the original firmware, this might also have been an issue).

So to fix that, I built a new binary for the flash by combining the original uboot and backup image with your repack image. After a bit of trial and error it finally booted, but it started playing the error.mp3 on loop. Turns out the rootApp checks if the mac address is in a valid range. I didn’t have another A31 to copy the binary from but I found out where it’s loaded from in flash (0x40004), so I changed that to my original mac and everything works now :).

Thank you so much btw, for enabling ssh per default :sweat_smile: , would have never come this far without it.

If anyone else also needs to restore their SPI flash manually ( @nate250s ):
0x0 uboot
0x40000 factory (optional, contains mac and calibration data)
0x50000 backup
0x250000 firmware (repack fm from Frank)

Script if you need:

#!/bin/bash

# create blank 16mb binary
dd if=/dev/zero of=build.bin bs=1M count=16
tr '\000' '\377' < build.bin > tmp && mv tmp build.bin

# original uboot and backup
dd if=uboot_v632.img of=build.bin bs=1 seek=0 conv=notrunc
dd if=backup_new_v1141.img of=build.bin bs=1 seek=$((0x50000)) conv=notrunc

# repack firmware
dd if=a31rakoit-4.6.415156-b1-c3bddec5-20240816.bin of=build.bin bs=1 seek=$((0x250000)) conv=notrunc

# flash
flashrom -p ch341a_spi -c MX25L12835F/MX25L12873F -w build.bin

If the update server doesn’t have your device anymore (like in my case), you can probably get it from web.archive.org or just take it from another device.
To change the mac address aferwards you can connect to the AP (static ip 10.10.10.x, 255.255.255.0), open ssh (ip is 10.10.10.254), and permanently set it with (e.g., 11:22:33:44:55:66):

iwpriv ra0 e2p 4=11
iwpriv ra0 e2p 5=22
iwpriv ra0 e2p 6=33
iwpriv ra0 e2p 7=44
iwpriv ra0 e2p 8=55
iwpriv ra0 e2p 9=66

The mac has to be in the following ranges, though:
00:22:6C:00:00:00 to 00:22:6C:FF:FF:FF
00:25:92:00:00:00 to 00:25:92:FF:00:00
00:14:9C:00:00:00 to 00:14:9C:FF:FF:FF
4C:F0:2E:01:B1:98 to 4C:F0:2E:02:13:3F

Reboot, and it should work again.

Btw Frank, do you think it would be possible to support WPA2-Enterprise networks?

I think you would need to add this to /sbin/config.sh :
CONFIG_I2S_MS_MODE=y

But the filesystem is read-only, so you’ll have to build a new firmware file and update it.

wow, you’re very experienced engineer, it’s really great that it’s working again. And I don’t have any source code for this board, I don’t think we could enable the WPA2 network. Maybe I share the repacking env and you could do some tweaks :wink:

1 Like

Thanks Frank, that means a lot coming from you :).

I dug around a bit more to check for possible enterprise wifi support, but the firmware is still using the old proprietary rt2860sta driver, so I think it won’t be worth the effort. Especially since I’m still not quite sure what to do with this speaker tbh :sweat_smile:. Maybe I’ll make a small custom PCB one day, similar to the up2stream mini, but without BT and DSP. At least, this way I could use the A31 with other amplifiers.

Thanks for the info. This give me another approach for re-flashing my device. I had to purchase another board and copy the firmware, but as you mention, this clones the MAC as well so can’t use them at the same time. Now with this method, I can have both going. Thanks again!

Variations of the mac address are also stored a few bytes further (I think for ethernet and station wifi) but for me it was enough to change the first only. If you want to see the entire content first, run this command:

iwpriv ra0 e2p