How to use more than 16MB flash on AMB82 Mini

Hi,

Currently 16MB flash available on AMB82 Mini board. But, for my application more than 16MB is required. Can anyone provide me the details to upgrade it to 32MB(I have Winbond one)?

I think one change is flash partitions json file for new sizes.

Is there any other changes required apart from this like flashing tool settings, etc.

Thanks,

Yuagndhar

Modifying the current flash partitions is not recommended, as the starting addresses for each partition are already fixed for the 16 MB flash layout. Changing them may lead to boot-up or compilation issues.

If 32 MB flash is required, we suggest you can append your own parameters after the existing flash partition table and use that area for data storage.

Hi @Pammy ,

Why changing amebapro2_partitiontable.json file is not allowed?

My binary file increased few more KBs than fw1/fw2 partition size. I got partition overlap error while building the flash image.

I found that the isp iq files are less than iq partition size, so I increased fw1/fw2 partitions and reduced iq partition, now no obverlap error and able to flash the app and working wothout any issues.

As you said changing amebapro2_partitiontable.json is not allowed and partition addresses are fixed, how it worked for me?

Hi @yugandhar

What I meant was that modifying the partition structure is not recommended, as it might affect the application logic; however, it is allowed if you only intend to increase the length of each block. In that case, you may modify starting from fw1 onwards.

Hi @Pammy ,

So, if I give any address which exceeds 16MB for firmware, ISP_IQ or NN_Model_Data partitions, will flashing tool writes to it or not?

Hi @yugandhar,

Theoretically, flashing and writing should work if you are using a 32 MB flash.
flash_ntz.bin file is generated according to the partition layout defined in amebapro2_partitiontable.json. However, we have not tested this setup with a 32 MB flash on our side.

Do note that start addresses and sizes of all partitions need to be configured correctly.

Understand that your application may exceed 16 MB in size, which means you will need to increase the allocation for fw1. Depending on your partition configuration, OTA updates may no longer be usable, as OTA typically relies on fw2. For example, if your application requires 16 MB and only 8 MB remains available for fw2 after all allocations, that space would be insufficient to support OTA firmware updates for your application.

Hi @Pammy ,

We upgraded the flash memory to 32MB(W25Q256JVSM) but not changed partition table, so the first 16MB will be applicable. We are able to flash the firmware and it is running without any issues.

But we found below issues.

  1. WiFi is not connecting to saved SSID even though fast connect enabled. When we connect using AT commands it is working and not connecting upon device restart.
  2. NN model inference is not happening. So we checked the log messages and found some errors.

The error messages we are suspecting for NN inference failure are

[0x12345678]read_bin_header[32], fail nbg magic not match, nbg is bad
[0x12345678]nbg_fmt_read_fixed[268], fail to read nbg file fixed section
[0x12345678]nbg_fmt_read[570], fail to read nbg version=0xffffffff, status=-3
[0x12345678]nbg_create_network_from_memory[2076], fail to read nbg status=-3
[0x12345678]vip_create_network[188], fail to create network status=-3
npu[12345678] fail to set task desc index=-1 property status=-3
[0x12345678]viphal_task_set_property[1457], fail to check task set property status=-3
error: error: vip_create_network.
[0x12345678]vip_finish_network[667], network object is NULL
[0x12345678]vip_destroy_network[399], network object is NULL

Below is the full log.

== Rtl8735b IoT Platform ==

[Normal mode]
BootFromNORFlash
[Start Boot ROM…]
=== Load PARTBL ===
=== Load Done ===
=== Load ISP_IQ ===
[fcs chk pass]
ISP_IQ @ 0x8461080, 0x55f80, 0x0
mfcs_data version 0x00010001
fcs_data version 0x00010101
=== Process ISP_IQ ===
=== Load Done ===
=== Load BL ===
[Image Start Table @ 0x18200]
=== Load Done ===

== Boot Loader ==
Nov 4 2025:14:24:05
=== Load FCS Para ===
=== Load Done ===
[crc pass]
=== Load ISP_IQ Sensor ===
ISP_IQ @ 0x8461080, 0x55f80
=== Process ISP_IQ ===
=== Load Done ===
=== Load FW1 ===
FW_ISP_IQ @ 0x8061080, 0x57f80
=== Process FW_ISP_IQ ===
DRAM_TYPE is DDR2 128MB.
ddr_freq = 533
VOE flash @ 0x80b9080, 0x80f80
FCS KM_status 0x00002081 err 0x0000200a
Wait KM fcs done 0 us
FCS TM_status 0x003f0000
store fcs data for application
It don’t do the sensor initial process
RAM TM_STATUS 0x00bf1208 err 0x00001208
read fcs_status 0x000000bf
read fcs_status 0x000000bf
=== Process VOE IMG ===
[Image Start Table @ 0x20106200]
RAM Load @ 0x813a100->0x20106200, 0x6c80
DDR Load @ 0x8141080->0x70100000, 0x2def93
=== FW Load Done ===

Boot Loader <==

== RAM Start ==
Build @ 15:55:42, Apr 7 2026

$8735b>Activate Wi-Fi AP mode

==========
Sensor: IMX662

[video_voe_presetting] fps:30 w:1920 h:1080

voe heap size = 45077504
fwin(1),enc_en(0),IQ_OFFSET = 0x17a00
fwin(1),enc_en(0),SENSOR_OFFSET = 0x29b00
sensor id 1 iq_data 17a00 sensor_data 29b00
VOE not init
VOE_OUT_CMD type 2 command fail -1
fwin(1),enc_en(0),IQ_OFFSET = 0x17a00
fwin(1),enc_en(0),SENSOR_OFFSET = 0x29b00
sensor id 1 iq_data 17a00 sensor_data 29b00
VOE not init
VOE_OUT_CMD type 2 command fail -1
fwin(1),enc_en(0),IQ_OFFSET = 0x17a00
fwin(1),enc_en(0),SENSOR_OFFSET = 0x29b00
sensor id 1 iq_data 17a00 sensor_data 29b00
VOE not init
VOE_OUT_CMD type 2 command fail -1
set ASP print off
ctx->enc_info.frameLength * 2 = 2048
ctx->enc_info.frameLength * 2 = 2048
ctx->enc_info.frameLength * 2 = 2048
interface 0 is initialized
interface 1 is initialized

RTSP[0] port: 554

RTSP[1] port: 555

RTSP[2] port: 556
kvs_producer_create…
ctx->enc_info.frameLength * 2 = 2048
fwin(1),enc_en(0),IQ_OFFSET = 0x17a00
fwin(1),enc_en(0),SENSOR_OFFSET = 0x29b00
sensor id 1 iq_data 17a00 sensor_data 29b00
npu[12345678] vipdrv vip_drv_init, video memory heap base: 0x77000000, size: 0x01000000
NN IRQ default priority : 0, set to 9
npu[12345678] HASHMAP 0x0x705822f0(process-ID) INIT SUCCESS
npu[12345678] DATABASE 0x0x705833fc(task-desc) INIT SUCCESS
npu[12345678] DATABASE 0x0x705833a8(memory-mgt) INIT SUCCESS
cfg_size_lib = 120, cfg_size_user = 120

Initializing WIFI …[Driver]: [HALMAC]
11692M HALMAC_MAJOR_VER = 1
HALMAC_PROTOTYPE_VER = 4
HALMAC_MINOR_VER = 20
HALMAC_PATCH_VER =
[Driver]: The driver include MP
[Driver]: Ver = libwlan:2026.03.31.09.32_b9.6_8da5876be9c7aa226733778c75c3b38b242fedec
set yolo confidence thresh to 0.500000
set yolo NMS thresh to 0.300000
[0x12345678]read_bin_header[32], fail nbg magic not match, nbg is bad
[0x12345678]nbg_fmt_read_fixed[268], fail to read nbg file fixed section
[0x12345678]nbg_fmt_read[570], fail to read nbg version=0xffffffff, status=-3
[0x12345678]nbg_create_network_from_memory[2076], fail to read nbg status=-3
[0x12345678]vip_create_network[188], fail to create network status=-3
npu[12345678] fail to set task desc index=-1 property status=-3
[0x12345678]viphal_task_set_property[1457], fail to check task set property status=-3
error: error: vip_create_network.
[0x12345678]vip_finish_network[667], network object is NULL
[0x12345678]vip_destroy_network[399], network object is NULL
hal_voe_ready 0x0 0xbf1208
read fcs_status 0x000000bf
[video_init] uvcd iq is null, use default.
[video_init] uvcd SNR is null, use default.
IQ:FW size (73960)
sensor:date 2026/3/4 version:RTL8735B_VOE_1.6.1.0
sensor:FW size (14464)
sensor timestamp: 2026/03/04
iq timestamp: 2024/09/13 14:00:00
voe_heap malloc 0x70aa68e0, size 45077504
ISP:1 ENC:1 H265:1 NN:1
hal_voe_ready 0x0 0xbf1208
voe :RTL8735B_VOE_1.6.1.0
sensor:RTL8735B_VOE_1.6.1.0
hal :RTL8735B_VOE_1.7.0.0
load time sensor:180us iq:909us itcm:0us dtcm:0us ddr:0us ddr2:0us
Set H264 default HIGH profile
rc_version RC_v1
[video_pre_init_procedure] START
[GRID Mode]: unused

Can you check and tell us what else we need to change to fix above mentioned issues with 32MB flash.

Thanks,

Yugandhar

Hi @yugandhar,

Can I verify if the macro ENABLE_FAST_CONNECT is set to 1 in platform_opts.h?

For this issue, in file fwfs.c could you comment line 2285 ATOMIC_CALL(nor_copy_read(data, curr_addr, size));
and uncomment
line 2286 ATOMIC_CALL(flash_stream_read(&nor_flash, (uint32_t)r->part_rec->start_addr + r->curr_pos + r->raw_offset, size, data)); and try again.

nor_copy_read API may not work for 32MB flash.

Thank you.

Hi @Pammy ,

We verified the 32MB flash using flash test example provided in the Github repo and found that IO3 pin is not becoming 0 when the byte is like 0x48 when transmitting higher nibble 0x4 in quad IO mode, So the data on bus is visible as 0xC to the flash chip and when we read, it is appearing as 0xC8. Please check the below log messages.

Error: Loop = 1, Address = f04000, index = 72, Writedata = 48, Readdata = c8
Error: Loop = 1, Address = f04000, index = 80, Writedata = 50, Readdata = d0

We are seeing these type of errors at random addresses when we run the flash test everytime.

This is the main reason for WiFi fast connect failures because the data becoming invalid on next boot because of signature mismatch or wrong SSID/PSK due to bit level errors.

Now, please tell us what settings need to change to fix this issue.

Thanks,

Yugandhar

Hi @yugandhar,

Thank you for the findings.

I would like to discuss based on the HW perspective, the pattern somehow indicates that during Quad I/O operation, the IO3 (DQ3) line is not going LOW when required. As a result, the MSB of the transmitted nibble is always read as ‘1’, which causes the observed data mismatch.

Could you help with testing to clarify the following:

Probe IO3 signal

  • Use a logic analyzer or oscilloscope to monitor IO3 during a write operation
  • For example, when transmitting nibble 0x4 (0100), IO3 should be LOW
  • If IO3 remains HIGH, this confirms the issue on that line

You can also provide me the waveform captured.

The issue is most likely related to IO3 not functioning correctly as a Quad data line.

Quad operation depends on the QE bit being enabled, I am also checking internally whether this is configured by default in our SDK. Will update on this again