【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文件.

posted on 2018-12-21 15:24  Beatfan  阅读(640)  评论(0)    收藏  举报

导航