【MPC5744P】Flash 结构、启动原理以及内存映射
与大部分的MCU相同,MPC5744P的Flash、RAM以及外设都映射到内存地址中了。以下为映射地址范围:
| MPC5744P Flash结构如下: | |||||||||
| 0x00000000-0x003FFFFF | -- | reserved | |||||||
| 0x00400000-0x00403FFF | -- | 16KB,UTest NVM block | |||||||
| 0x00404000-0x007FFFFF | -- | Reserved | |||||||
| 0x00800000-0x00817FFF | -- | 96KB,Data flash memory block | |||||||
| 0x00800000-0x00803FFF | 16KB,EEPROM-low block0,RWW_P:0,BlockSize:16 KB | ||||||||
| 0x00804000-0x00807FFF | 16KB,EEPROM-low block1,RWW_P:0,BlockSize:16 KB | ||||||||
| 0x00808000-0x0080FFFF | 32KB,EEPROM-mid block0,RWW_P:2,BlockSize:32 KB | ||||||||
| 0x00810000-0x00817FFF | 32KB,EEPROM-mid block1,RWW_P:3,BlockSize:32 KB | ||||||||
| 0x00818000-0x00FFFFFF | -- | 6MB,Used 416KB,Small and medium flash memory blocks | |||||||
| Small: | |||||||||
| 0x00F98000-0x00F9BFFF | 16KB,low flash memory block 2(boot location 0),RWW_P:1,BlockSize:16KB | ||||||||
| 0x00F9C000-0x00F9FFFF | 16KB,low flash memory block 3(boot location 1),RWW_P:1,BlockSize:16KB | ||||||||
| Medium: | |||||||||
| 0x00FA0000-0x00FAFFFF | 64KB,high flash memory block 0(boot location 2),RWW_P:4 BlockSize:64KB | ||||||||
| 0x00FB0000-0x00FBFFFF | 64KB,high flash memory block 1(boot location 3),RWW_P:4 BlockSize:64KB | ||||||||
| 0x00FC0000-0x00FCFFFF | 64KB,high flash memory block 2 ,RWW_P:4,BlockSize:64KB | ||||||||
| 0x00FD0000-0x00FDFFFF | 64KB,high flash memory block 3 ,RWW_P:5,BlockSize:64KB | ||||||||
| 0x00FE0000-0x00FEFFFF | 64KB,high flash memory block 4 ,RWW_P:5,BlockSize:64KB | ||||||||
| 0x00FF0000-0x00FFFFFF | 64KB,high flash memory block 5 ,RWW_P:5,BlockSize:64KB | ||||||||
| 0x01000000-0x01FFFFFF | -- | 16MB,Used 2048KB,Large flash memory blocks | |||||||
| Large: | |||||||||
| 0x01000000-0x0103FFFF | 256KB,flash memory block 0(boot location 4),RWW_P:6,BlockSize:256 KB | ||||||||
| 0x01040000-0x0107FFFF | 256KB,flash memory block 1(boot location 5),RWW_P:6 BlockSize:256 KB | ||||||||
| 0x01080000-0x010BFFFF | 256KB,flash memory block 2(boot location 6),RWW_P:6 BlockSize:256 KB | ||||||||
| 0x010C0000-0x010FFFFF | 256KB,flash memory block 3(boot location 7),RWW_P:6 BlockSize:256 KB | ||||||||
| 0x01100000-0x0113FFFF | 256KB,flash memory block 4,RWW_P:7 BlockSize:256 KB | ||||||||
| 0x01140000-0x0117FFFF | 256KB,flash memory block 5,RWW_P:7 BlockSize:256 KB | ||||||||
| 0x01180000-0x011BFFFF | 256KB,flash memory block 6,RWW_P:7 BlockSize:256 KB | ||||||||
| 0x011C0000-0x011FFFFF | 256KB,flash memory block 7,RWW_P:7 BlockSize:256 KB | ||||||||
| 0x02000000-0x089FFFFF | -- | 106MB,Reserved | |||||||
| 0x08A00000-0x08FFFFFF | -- | 6MB,Used 416KB,Mirror Small and medium flash memory blocks | |||||||
| 0x09000000-0x09FFFFFF | -- | 16MB,Used 2048KB,Mirror Large flash memory blocks | |||||||
| 0x0A000000-0x3FFFFFFF | -- | Reserved | |||||||
| MPC5744P RAM结构如下: | |||||||||
| 0x40000000-0x4005FFFF | -- | 384KB,System RAM | |||||||
| 0x40060000-0x4007FFFF | -- | Reserved System RAM | |||||||
| 0x40080000-0x4FFFFFFF | -- | Reserved | |||||||
| MPC5744P Local Memory结构如下 | |||||||||
| 0x50000000-0x5000FFFF | -- | Reserved | |||||||
| 0x50010000-0x507FFFFF | -- | Reserved | |||||||
| 0x50800000-0x5080FFFF | -- | 64KB,Used 64KB,D-MEM CPU0 | |||||||
| 0x50810000-0xF7FFFFFF | -- | Reserved | |||||||
| 其它外设: | |||||||||
| 0xF8000000-0xFFFFBFFF | -- | other | |||||||
| 0xFFFFC000-0xFFFFFFFF | -- | 16KB,Boot Assist Module(BAM) | |||||||
Flash有几种分类方式。
方式一:EEPROM、Small、Medium、Large Flash。
方式二:Low、Medium、High、First256K、Second256K。
其中上述方式二涉及到Lock与Select,关系到Flash的擦除和编程。
MPC5744P Flash编程:
MPC5744P数据存储为字节模式,即32位数据存储会占用4个地址。
对Flash编程时,需要多个步骤:
1、解锁对应的Block
2、选择对应的Block
3、擦除对应的Block
4、编程对应的Block
5、加锁对应的Block
Block对应列表如下:
| LOW--not program, partition 0 and 1 | ||||||||
| 0x00800000-0x00803FFF | -- | 16KB,EEPROM-low block0, RWW_P:0 | ||||||
| 0x00804000-0x00807FFF | -- | 16KB,EEPROM-low block1, RWW_P:0 | ||||||
| 0x00F98000-0x00F9BFFF | -- | 16KB,low flash memory block2, RWW_P:1 | ||||||
| 0x00F9C000-0x00F9FFFF | -- | 16KB,low flash memory block3, RWW_P:1 | ||||||
| MID , partition 2 and 3 | ||||||||
| 0x00808000-0x0080FFFF | -- | 32KB,EEPROM-mid block0, RWW_P:2 | ||||||
| 0x00810000-0x00817FFF | -- | 32KB,EEPROM-mid block1, RWW_P:3 | ||||||
| HIGH, , partition 4 and 5 | ||||||||
| 0x00FA0000-0x00FAFFFF | -- | 64KB,high flash memory block0, RWW_P:4 | ||||||
| 0x00FB0000-0x00FBFFFF | -- | 64KB,high flash memory block1, RWW_P:4 | ||||||
| 0x00FC0000-0x00FCFFFF | -- | 64KB,high flash memory block2, RWW_P:4 | ||||||
| 0x00FD0000-0x00FDFFFF | -- | 64KB,high flash memory block3, RWW_P:5 | ||||||
| 0x00FE0000-0x00FEFFFF | -- | 64KB,high flash memory block4, RWW_P:5 | ||||||
| 0x00FF0000-0x00FFFFFF | -- | 64KB,high flash memory block5, RWW_P:5 | ||||||
| 256K--all used | ||||||||
| 0x01000000-0x0103FFFF | -- | 256KB,256k flash memory block0, RWW_P:6 | ||||||
| 0x01040000-0x0107FFFF | -- | 256KB,256k flash memory block1, RWW_P:6 | ||||||
| 0x01080000-0x010BFFFF | -- | 256KB,256k flash memory block2, RWW_P:6 | ||||||
| 0x010C0000-0x010FFFFF | -- | 256KB,256k flash memory block3, RWW_P:6 | ||||||
| 0x01100000-0x0113FFFF | -- | 256KB,256k flash memory block4, RWW_P:7 | ||||||
| 0x01140000-0x0117FFFF | -- | 256KB,256k flash memory block5, RWW_P:7 | ||||||
| 0x01180000-0x011BFFFF | -- | 256KB,256k flash memory block6, RWW_P:7 | ||||||
| 0x011C0000-0x011FFFFF | -- | 256KB,256k flash memory block7, RWW_P:7 | ||||||
具体编程实例下一篇再讲述。
MPC5744P启动原理:
首先介绍以下MCU启动原理,为Bootloader打基础。
MPC5744P启动方式比较奇特,支持2类方式启动:
1、Single Chip(SC)-从第一个可启动flash块启动
2、Serial Boot(SBL)-从SCI或CAN下载启动代码,然后运行,也就是BAM启动
BAM启动:
通过BAM启动(单芯片启动模式由硬件管理,BAM不参与),BAM在以下情况运行:
1、Force Alternate Boot(FAB)引脚选择为串行启动
2、硬件在所有flash中的启动块中没有找到一个合法的Boot ID
以上有一个以上条件成立,则芯片在0xFFFF_C000处抓取代码进而BAM启动。
FAB引脚 配合 ABS(Aletrnate Boot Selector)引脚使用
| FAB |
ABS 2,0 |
Boot ID | Boot Mode |
| 1 | 0 0 | -- | Serial Boot SCI |
| 1 | 0 1 | -- | Serial Boot CAN |
| 0 | -- | Valid | SC |
| 0 | -- | Not Found | Static Mode |
SC启动:
单芯片启动时,会先从低到高搜索每一个Boot location,每一个Boot Location第一个地址为RCHW(Reset Configuration Half-Word),若RCHW的BOOT_ID区域包含0x5A,则此块可作为启动分区,第一个Boot Location起始处为启动地址偏移4个地址(每4个地址为一个32bits数据)。
例如代码从0x00FA0000处,Boot location0处启动,则对应RCHW为,0x00FA0000:0x005A0000,实际会从0x00FA0004处执行第一个代码,例如下面执行了跳转指令,跳转到了0x01000000。
具体设置flash地址方法为修改xxx_flash.ld文件.


浙公网安备 33010602011771号