我的硬件是PXA270 通过16位数据总线连接到64MBYTE的FLASH P33,地址总线是26位
p33是由两块32M的flash组成的,在程序中不能同时访问上下两块FLASH的地址
而是需要有一个地址总线,即最高位的A25作为内部片选,选择当前访问的是BOTTOM 还是top flash
当地址总线A25为高电平时,访问TOP FLASH
当地址总线A25为低电平时,访问BOTTOM FLASH
请问,我怎么对地址总线赋值??地址总线A25的地址是多少??
我的FLASH 的物理地址是0x00000000
那么按照这样来算我的A25的地址是不是应该是 B: 0010 0000 0000 0000 0000 0000 0000
即0x2000000
假设以上推断成立的话
那么我对该地址赋值
(*(VUINT16 *)(0x2000000 )) |= (0x01);
(*(VUINT16 *)(0x2000000 )) &= ~(0x01);
应该是正确的吧????
照着楼主的情况,
(*(VUINT16 *)(0x2000000 ))=0x01; //就是对TOP FLASH的0x00000000地址赋0x01
(*(VUINT16 *)(0x0000000 ))=0x01; //就是对BOTTOM FLASH的0x00000000地址赋0x01
不知道楼主明白没。
另外
(*(VUINT16 *)(0x2000000 )) |= (0x01);
(*(VUINT16 *)(0x2000000 )) &= ~(0x01);
这样赋值当然可以,不过你自己应该知道这是什么意思吧?
你的A25是处理器的A25还是FLASH的A25?
一般来说,总会分配一个片选线给一个存储器.
像你所说的"A25",一般也是分配一条地址线. 这样你在访问对应地址范围时,自然会实现你说的"内部片选"逻辑.
#define rNFDATATOP (*(VUINT16 *)(0x2000000 ))
#define rNFDATABOTTOM (*(VUINT16 *)(0x0000000 ))
rNFDATATOP=0X01;
rNFDATATOP=0X01;
FLASH的读写,擦出是按行地址和列地址根据一定的时序进行的。LZ要看看具体的datasheet上面的说明。