一、功能框图
1064内部flash大小是4M,RAM是1M。
二、内存映射
1、FLASH
结合MIMXRT1064xxxxx_flexspi_nor.icf文件和下图,可以得出flash地址范围是0x70000000 - 0x703FFFFF。
2、RAM
RAM有ITCM,DTCM,OCRAM三种类型。
ITCM的地址范围是0x0000 0000 - 0x0007 FFFF。
DTCM的地址范围是0x2000 0000 - 0x2007 FFFF。
OCRAM的地址范围是0x2028 0000 - 0x202F FFFF。
三者共享521KB,按规则分配。
OCRAM2的地址范围是0x2020 0000 - 0x2027 FFFF,功能框图的512KB SRAM在此范围内。
栈,堆和定义的变量都在DTCM,适当加大DTCM的大小。
三、FLASH分配方案
1064内部flash范围是0x70000000 - 0x703FFFFF,大小是4M。
1、软件组成
软件由5部分组成,分别是bootloader+bootapp0+bootapp1+app0+app1。
2、bootloader
bootloader的flash范围是 0x70000000 - 0x7000FFFF,大小是64KB。icf文件要修改到这个地址。
Bootloader工程需要在IAR编译器添加宏 BOOT_PROJ=1。
bootloader的作用是加载bootapp。bootloader检测bootapp1更新标志,如果值为0xaabb,则表示有新的bootapp1,则将bootapp1复制到bootapp0,复制完成才将标志改成其他值,再运行bootapp0,假设在复制过程中意外断电,标志还是0xaabb,bootapp1还完好,上电则再次进行复制。如果标志为非0xaabb值,表示没有新的bootapp1,则直接运行bootapp0。这个标志存到eeprom。
3、bootapp
bootapp0的flash范围是0x70010000 - 0x7004FFFF,大小是256KB。
bootapp1的flash范围是0x70050000 - 0x7008FFFF,大小是256KB。
app0检测app1更新标志,如果值为0xaabb,则表示有新的app1,则将app1复制到app0,复制完成才将标志改成其他值,再运行app0,假设在复制过程中意外断电,标志还是0xaabb,app1还完好,上电则再次进行复制。如果标志为非0xaabb值,表示没有新的app1,则直接运行app0。这个标志存到eeprom。
4、app
app0的flash范围是0x70090000 - 0x7010FFFF,大小是512KB。
app1的flash范围是0x70110000- 0x7018FFFF,大小是512KB。
5、预留
预留的flash范围是0x70190000- 0x703FFFFF,大小是2496KB。
四、EEPROM分配方案
eeprom使用的型号是AT24C256,大小是256Kb,即32KB。页大小是64bytes。以页为单位保存用户数据。用户数据之间预留1页空间。eeprom是所有软件都可以访问的,bootapp,app需要共享的资源放到这里来。