I'd like to preface this with the understanding that I'm not the most knowledgeable on scatter files, but I've been learning a lot in the ARM forums about them.
I'm working with the STM32F429 processor, my environment is Keil Uvision 5, and I'm interfacing with M29W128GL70 parallel NOR Flash. We have a touchscreen connected to our device and we currently have all of the objects and fonts we use for the GUI stored inside on-board memory. I was able to figure out how to use the scatter file to store our font files (GUI screens, buttons, menu items, etc.) into the external NOR Flash and access them from there during run-time, which has been extremely beneficial in on-board memory storage. While this has been beneficial, I appear to be running into the biggest issue with firmware updates.
We currently use the initial region of external memory located at 0x6400_0000 for storing new firmware, booting into the bootloader, and then moving the new firmware in external memory onto the internal memory. I've been able to issue firmware updates while also keeping the GUI items and fonts located at 0x6424_0000 in the external memory, and the firmware runs just fine.
The problem I'm having is that I've noticed that even when I'm not updating the C files whose objects I specified under LR_ROM1 in the scatter file, I still see the memory in that 0x6424_0000 region change when I generate a new hex file. It'd like to keep that region from changing unless we make a deliberate change, like adding new GUI buttons, because every time that region changes, that takes longer for the firmware to update, as well as issuing more write cycles on those regions.
Is there anything I can specify in the scatter file to keep my region at 0x6424_0000 unchanged unless I deliberately change the specified C files whose objects I listed in the scatter?
I've copied the code below of my scatter file. To further clarify what I'm saying, if I change code within FontsUpdate.c, I expect the memory within the region at 0x6424_0000 to change when I build the project, because the .o file for FontsUpdate.c is in that region. However, if I'm updating my FirmwareUpdate.c file, I shouldn't expect to see any changes in that 0x6424_0000 region, but I do. All help and advice is appreciated, thank you.
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08004000 0x1FC000 { ; load region size_region
ER_IROM1 0x08004000 0x1FC000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00030000 { ; RW data
.ANY (+RW +ZI)
}
}
LR_ROM1 0x64240000 0x00DC0000 {
ER_ROM1 0x64240000 0x00DC0000 { ; load address = execution address
FontsUpdate.o (+RO)
NotoSansBold16BaseAA.o (+RO)
NotoSansBold20BaseAA.o (+RO)
NotoSansBold32BaseAA.o (+RO)
NotoSansRegular32BaseAA.o (+RO)
}
}
I've tried finding resources on scatter files through ARM but I haven't found anything that specifically relates to the problem I'm having or memory that changes within specified regions. Maybe I have and didn't understand what the knowledge base was trying to say? Changing some of the syntax in the load and execution region does not seem to have any impact on whether the external memory gets altered.