高手好:
我现在做的是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是个什么地址??
谢谢各位
NOR一般是直接接到总线上的,比如接到CS1上,对该片选的地址进行操作,就是向NOR芯片发指令。写需要指令,读则是线性的。0xBC900000是片选对应的虚拟地址,一般是从0xBC900000开始的64M或128M空间。
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上对应的一个虚拟地址而已
给了你参考代码自己还不好好去研究,还要别人给你分析
下回拒绝回答这样的问题
仔细看下FLASH的DATASHEET,很多问题都可以了解。