[ZLG-ARM] 关于SST39VF160

[复制链接]
2770|7
 楼主| 郁闷的人 发表于 2008-2-21 16:06 | 显示全部楼层 |阅读模式
ST, ADDR, AD, DDR, ip
周工好:<br /><br />&nbsp;&nbsp;&nbsp;正在学习ARM.用的是贵司的EASYARM2200开发板。在实验“3.16&nbsp;外部存储器接口实验1”时有一些疑问,希望能解惑!<br />1。关于SST39VF160的起始地址怎么计算的?<br />2。执行FALSH编程操作时,如<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip=GetAddr(0x5555);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*ip=0xaaaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实际上写的数据是0xaa,为什么要写成0xaaaa?有什么讲究么?<br />3。关于这句:(就是在wordprogram()这个程序段中)<br />&nbsp;&nbsp;&nbsp;&nbsp;ip=(volatile&nbsp;uint16&nbsp;*)(FLASH_ADDR|(Addr&0x1FFFFF));<br />&nbsp;&nbsp;&nbsp;&nbsp;不理解这句话的含义。我改成*ip=GetAddr(Addr),觉得更好理解,后来我看了你们有一个勘误表也是这么改的,但有一个问题:我执行wordprogtam(0x02,0x55aa),本意是把数据写入0x81000002&nbsp;地址,但是从存储窗口中观测到实际上是写入到了0x81000004地址,而用ip=(volatile&nbsp;uint16&nbsp;*)(FLASH_ADDR|(Addr&0x1FFFFF))却是正确的。整糊涂了<br /><br />谢谢!
liyangbbs 发表于 2008-2-21 17:36 | 显示全部楼层

re 郁闷的人

我是这样理解的(如果有误别殴打我!):<br />1.除了处理器把外部存储器分配到0x8000&nbsp;0000以上这个要求以外,就是地址线和控制线的组合,平时都是把地址展开成0---31位,专门分析高几位地址形成的原因就好了。<br /><br />2.我认为没什么用,该芯片只要求把低字节写入aa或55。但总线是16位宽的不用白不用!哈哈!<br /><br />3.0x8000&nbsp;0002不是字对齐的,寻址可能出了问题。你可以从这方面考虑。具体,没有分析过。
 楼主| 郁闷的人 发表于 2008-2-25 10:01 | 显示全部楼层

如题

有没有XDJM能说得更详细一点?
zlgarm 发表于 2008-2-25 11:05 | 显示全部楼层

SST39VF160

郁闷的人&nbsp;您好:<br />&nbsp;&nbsp;&nbsp;&nbsp;可以按照liyangbbs的理解。<br />&nbsp;&nbsp;&nbsp;&nbsp;对于写字节时前面加的aa主要是防止产生干扰,一般对于操作总线来说,对于没用的数据位线不提倡全0或全1,如果这样的话总线数据切换时产生的干扰太大。<br />&nbsp;&nbsp;&nbsp;&nbsp;这里如果用wordprogtam(0x02,0x55aa)的话就会对齐到4字节处,因为在ARM中word被认为4字节大小。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;duty:zlgarm_zhanghuping
huangbingg 发表于 2008-2-27 21:08 | 显示全部楼层

再追究下:

我也在自几的EASYARM2200开发板做过这个实验,这句:<br />ip=(volatile&nbsp;uint16&nbsp;*)(FLASH_ADDR|(Addr&0x1FFFFF));<br /><br />确实很难理解,但结果却是对的,即然对了,你们为社么还要纠正在勘误表里呢??<br /><br />                   周工解释下啊~~~~
armecos 发表于 2008-2-28 01:21 | 显示全部楼层

你要是用了《ecos增值包》就不会迷惑了,

&nbsp;&nbsp;&nbsp;&nbsp;0x5555和0x2AAA是flash操作周期里要求的地址,是指flash芯片A0-A19地址线上必须顺序出现的数值,因为SST39VF160的A0是与LPC2210的A1相连,所以这两个地址当然要先左移1位,然后反映在flash上就是操作所要求的正确的地址数值。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;而0x80000002是字节地址,WordProgram()函数为半字数据编程,按照当前硬件连法(SST39VF160的A0是与LPC2210的A1相连),WordProgram()内部使用uint16数据类型操作字节地址(0x80000002)时,是不需要做任何转换的(否则,如果是flash的A0与LPC2210的A0直接连接,那么需要把偏移地址除2,会增加额外的软件操作)。此时,flash的A0为1,半字偏移地址为1,换算成字节偏移地址不就是2嘛。
huangbingg 发表于 2008-2-28 14:18 | 显示全部楼层

还没看明白...

还没看明白,不过先谢下
zlgarm 发表于 2008-2-29 10:05 | 显示全部楼层

外部存储器

huangbingg&nbsp;您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;您可以在开发板上做一些相关外部存储器实验就可以理解了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;zlgarm_lijintao
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部