打印

单片机外扩用以读写SRAM的总线的“乱排”问题..

[复制链接]
2961|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zq1987731|  楼主 | 2008-10-4 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近偶然得到块“诡异”的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就调用一次地址变换的子程序那还不要麻烦死了啊...

相关帖子

沙发
hotpower| | 2008-10-4 20:46 | 只看该作者

没必要追究SRAM的总线的地址和数据的排列

这主要是为布线不大交叉。
只要站在ARM的立场上数据读写正确即可。

使用特权

评论回复
板凳
xwj| | 2008-10-4 20:56 | 只看该作者

没任何影响,也不需任何转换,因为怎么放进去就是怎么取

不过只限SRAM,
其他的存储器据需要更多的考虑了

使用特权

评论回复
地板
zq1987731|  楼主 | 2008-10-4 21:27 | 只看该作者

原来这样啊...

学校里学习51单片机的时候,所有的SRAM原理图和PCB上都是按顺序连接的,所以看到这么奇怪的用法就糊涂了,“ARM的立场上读写正确”“怎么进去就怎么出来”...恍然大悟,谢谢楼上两位~~每次画PCB到SRAM这块都要打一堆过孔,现在看来是做了好久的无用功了...

使用特权

评论回复
5
hotpower| | 2008-10-5 21:59 | 只看该作者

8031时代用此手段来增大反汇编的难度(地址数据转换)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

759

帖子

3

粉丝