请教关于nor flash驱动问题

qzhp   2009-2-17 17:59 楼主
高手好:
  我现在做的是64M nor flash驱动 ,hzdysymbol给我提供了一份64M的NorFlash驱动代码,现在有些疑问请教各位
  关于nor flash在boot中的操作:
1、请问在EBOOT中对Nor FLASH进行擦除和写入操作,是否需要定义nor FLASH的物理地址 ,否则硬件怎么能识别出这块nor flash
2、在处理前4个block的unlock时
   if ((g_FlashDeviceType == L18) || (g_FlashDeviceType == L30) || (g_FlashDeviceType == P30))
     {
           if ((FlashStart >= flash_start_address) && (FlashStart < (flash_start_address + 0x40000)))  
                        //为什么 + 0x40000(256K)应该加128K(32K*4),flash_start_address地址是什么??
                  .......
      }   
3、if ( ((g_FlashDeviceType == L18) || (g_FlashDeviceType == L30) || (g_FlashDeviceType == P30)) &&  (num_l3_blocks_erased > 0) )
                {        // We need to take care of the first 16K blocks if there are any
                        pFlash += (L3_BLOCK_SIZE / 2);
                        num_l3_blocks_erased--;   
                }
                else
                {pFlash += (BLOCK_SIZE / 2);  //为什么除2,每个BLOCK是128K,应该pFlash += BLOCK_SIZE??
                }
4、 pBlockAddress = (volatile UINT16 *) (0xBC900000);//0xBC900000是个什么地址??
谢谢各位

回复评论 (5)

顶一次
点赞  2009-2-17 20:35
NOR一般是直接接到总线上的,比如接到CS1上,对该片选的地址进行操作,就是向NOR芯片发指令。写需要指令,读则是线性的。0xBC900000是片选对应的虚拟地址,一般是从0xBC900000开始的64M或128M空间。
点赞  2009-2-17 22:06
1、请问在EBOOT中对Nor FLASH进行擦除和写入操作,是否需要定义nor FLASH的物理地址 ,否则硬件怎么能识别出这块nor flash
nor flash的物理地址不是由你来定义的,硬件上就已经决定了

2、在处理前4个block的unlock时
  if ((g_FlashDeviceType == L18) || (g_FlashDeviceType == L30) || (g_FlashDeviceType == P30))
    {
          if ((FlashStart >= flash_start_address) && (FlashStart < (flash_start_address + 0x40000)))  
                        //为什么 + 0x40000(256K)应该加128K(32K*4),flash_start_address地址是什么??
                  .......
      }   
flash_start_address就是flash对应的虚拟地址
为什么是256K?给你的代码里的注释写得还不够清楚吗?

3、if ( ((g_FlashDeviceType == L18) || (g_FlashDeviceType == L30) || (g_FlashDeviceType == P30)) &&  (num_l3_blocks_erased > 0) )
{ // We need to take care of the first 16K blocks if there are any
pFlash += (L3_BLOCK_SIZE / 2);
num_l3_blocks_erased--;  
}
else
{pFlash += (BLOCK_SIZE / 2);  //为什么除2,每个BLOCK是128K,应该pFlash += BLOCK_SIZE??
}
除2还是除4要看你的pFlash是怎么定义的

4、 pBlockAddress = (volatile UINT16 *) (0xBC900000);//0xBC900000是个什么地址??
0xBC900000不是什么地址,只是flash上对应的一个虚拟地址而已



点赞  2009-2-18 09:51
给了你参考代码自己还不好好去研究,还要别人给你分析
下回拒绝回答这样的问题
点赞  2009-2-18 09:53
仔细看下FLASH的DATASHEET,很多问题都可以了解。
点赞  2009-2-18 14:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复