由于公司终端产品的平台由三星的2440换到9260上(可能是由于9260更适合于工业场合上),考虑到后续项目也可能采用此平台,为与时俱进,因此利用闲时间也来学习学习这个平台!
按照惯例,先了解下9260的存储空间分配及其启动方式:
1. 9260的总线为32bit,因此其存储空间共有4G,一共分成16个bank, 每个bank为256MB ,其中, bank0映射为内部存储器,即启动存储器、内部ROM和内部2个SRAM, 启动存储器因为选择的启动方式不同而不同 ; bank1-bank8映射为外部存储器,分别对应片选0到片选7 。
2. 与2440一样,9260也总是从地址0x0启动的,因此需要重点关注谁被映射到地址0。映射由两个参数决定,一个硬件参数即 BMS引脚电平状态 ,一个软件设置参数即REMAP参数。 REMAP为0:当检测到BMS引脚为1时,内部ROM被映射到地址0x0, 当检测到BMS引脚为0时, 上面说到的片选0也就是bank1被映射到地址0x0。因此通过BMS引脚的电平设置,实现了2种启动方式。
3. 先看BMS引脚为0时的情况:bank1即对应片选0是EBI(外部总线接口),接的是外部存储器。通常情况下,一般从 norflash启动或者nandflash启动,而从数据手册中可知9260处理器内部已经为nandflash预留了片选3,因此如果把norflash接在片选 0,就可以实现norflash启动。
4. 再看BMS引脚为1时的情况:此时内部ROM被映射到地址0x0。9260的 内部ROM被映射到地址0x0时,程序先扫描两个SPI DataFlash,查找是否有相应的8个异常向量,即检测前28bytes的内容,如果是异常向量,表明能够引导系统,此时根据向量6的大小,确定要装载到sram的大小,之后REMAP(重映射)下,这样sram就变成了地址0,之后程序跳转到0地址执行;如果两个SPI DataFlash没有相应的向量,则转向Nand Flash检测,如果检测到8个异常向量,表明Nand Flash能够引导,方法跟以上相同。
6. 总结:
当我们需要从nor flash启动时,BMS引脚设置为低电平,这样nor flash所在的存储器bank1,也就是EBI片选0,被映射到地址0,此时实现从nor flash启动;当我们需要从nand flash启动时,BMS引脚设置为高电平,这时内部ROM被映射到地址0,ROM中的程序( 芯片内部的bootloader ), 检测过两个spi dataflash之后,当检测到nand flash有相应的向量的时,就会把nand flash中向量6标记的大小的代码自动复制到SRAM中,之后重映射,即把内部SRAM映射到地址0x0,跳到地址0x0,开始执行 系统 。
当我们从nor flash启动时候,没有特别需要说的,此时我们忽略bank0的内容,即sram和rom中的内容,我们可以利用容量更大的SDRAM来做事情。当我们从nand flash启动时,nand flash启动代码中的一小部分被copy到了sram中(此时rom被映射到0,sram在其后),之后REMAP后,sram被映射到了地址 0,cpu自动跳到0地址,即我们的小部分启动代码那执行,此时,启动代码也可以用容量更大的sdram来做事情了~
NAND FLASH启动时,芯片内部的bootloader(位于内部ROM)将bootstrap丢到SRAM运行,然后bootstrap将SDRAM和NAND/DATAFLASH初始化完成,将uboot或者用户程序从NAND或者DATAFLASH加载到SDRAM运行 。
公司的终端产品采用的是NAND FLASH启动,从原理图看,BMS引脚置为了高电平,正如我们所分析的那样!