最近偶然得到块“诡异”的ARM开发板,处理器是ARM7TDMI核的 其总线外扩控制两块SRAM(62256) 具体连线上可能是为了PCB布线方便吧... 通过74HC573的16位数据总线连接正常,D0~D7连到第一片SRAM的IO1~IO8上,D8~D15连到第二片SRAM的IO1~IO8上。 然后地址线连接就不正常了: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 下面是第一片SRAM与上面的16根地址线连接情况: N A13 A8 A9 A11 A10 A0 A1 A2 A3 A4 A5 A6 A7 A12 A14 下面是第二片SRAM的连接情况: N A10 A11 A9 A8 A13 A14 A12 A7 A6 A5 A4 A3 A2 A1 A0
那么我把该存储器作为32K×16bit应用时,是否实际物理地址中存放得乱七八糟但按此连线在逻辑上按地址按半字(16位)存取0x0000~0x8000地址的内容都是正常的呢? 举个例子——我在程序中给0x0000~0x0003这4个单元写入0x1234的值: 那么在MCU中写指令发出后再读回0x0000~0x0003中的内容应该都是0x1234了,那么在这里,我用这块开发板上的地址线排列: 0x0000时第一片的0x0000内容为0x34,第二片的0x0000为0x12(和正常排列的地址数据线一样) 0x0001时第一片的0x0400内容为0x34,第二片的0x0001为0x12(开始不正常了,但不会有冲突) 0x0002时第一片的0x0200内容为0x34,第二片的0x0002为0x12 0x0003时第一片的0x0600内容为0x34,第二片的0x0003为0x12 ………………………… 这样的话我就出现了糊涂的地方:按此应用,数据线按D0~D15对锁存IO1~IO16连好后,地址线可以以PCB布局方便为前提的情况下将A0~A14与SRAM上的A0~A14“随意的”连接,而不需要在PCB上为A0~A14对SRAM上的A0~A14一对一相连而妥协以至于打N多过孔,又破坏美观又增加许多不必要的过孔分布参数? 那么这样的话如果我要用于64K×8bit该如何解决呢?如果非要在ARM程序中按照一定的规则用一次外部SRAM就调用一次地址变换的子程序那还不要麻烦死了啊... |