We have a Max 10 device set up to boot with dual compressed images and use the NIOS II to write new images over I2C to the UFM CFM0 and CFM1 on chip flash memory.
The setup is similar to this guide except using I2C instead of UART:
The problem is with the desired functionality to be able to "update" over I2C from a pervious version that was configured to use a single uncompressed image to this new version that now has dual compressed images.
The single image version supports writing to the on chip flash and can write out the UFM CFM0 and CFM1 images just as they are on the dual image version but the system will not boot after doing this.
I believe the reason this fails is because of the inability to remotely update the ICB memory space. In this case the ICB settings in the old system would still indicate to boot from a single uncompressed image when in fact the flash memory has been written with dual compressed images.
What can I do to enable the NIOS to write to the ICB memory space so that it can be updated to correspond with the UFM and CFM0/1 images.
For reference the memory map of the POF for the dual image version is provided below:
BLOCK START ADDRESS END ADDRESS
ICB 0x00000000 0x00001FFF
UFM 0x00002000 0x00011FFF
CFM0 0x000BA000 0x00161FFF (0x00106917)
CFM1 0x00012000 0x000B9FFF (0x0005F147)
Unfortunately, remote updating the ICB is not supported. You will need to use JTAG to configured the flash to dual configuration mode.
So there is no way to remotely update the flash from single uncompressed mode to dual configuration mode.