3054|5

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教关于nor flash驱动问题 [复制链接]

高手好:
  我现在做的是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是个什么地址??
谢谢各位

最新回复

仔细看下FLASH的DATASHEET,很多问题都可以了解。  详情 回复 发表于 2009-2-18 14:25
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
顶一次
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
NOR一般是直接接到总线上的,比如接到CS1上,对该片选的地址进行操作,就是向NOR芯片发指令。写需要指令,读则是线性的。0xBC900000是片选对应的虚拟地址,一般是从0xBC900000开始的64M或128M空间。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
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上对应的一个虚拟地址而已



 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
给了你参考代码自己还不好好去研究,还要别人给你分析
下回拒绝回答这样的问题
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
仔细看下FLASH的DATASHEET,很多问题都可以了解。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表