您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 技术讨论区 -> [讨论]关于ADSP-21489的外部MEMORY
本帖共有3370个阅读者
发表帖子 发表投票 回复主题
[讨论]关于ADSP-21489的外部MEMORY
zchong(论坛新手)
zchong
头衔:社区公民
帮派:无帮无派
帖数:19
金钱:350
积分:26
注册时间:2012/7/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[讨论]关于ADSP-21489的外部MEMORY
ADSP-21489的external port有4个bank,可以扩展sdram、sram、flash以及其它类sram的芯片。external port支持8bit、16bit数据总线。看了一下手册,有很多迷惑之处,比如文档中提到的logical address,好像都是针对32bit说的,是不是内核寻址的时候都是以32bit为单位的呢,对于外部扩展的16bit数据总线的芯片,可以直接进行以16bit进行读写吗?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/7/8 21:19:41
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

21489都是16位的数据线,但是21489有一个data packing的功能,如
果这个功能使能的话,一个logic address对应的是两个physical address,logic
address是按照32位来操作的,程序执行使用的是logic address,所以如果程序对一个
logic address进行读写操作,控制器会转成对两个physical address的操作,看起来
就是对32位的sdram进行读写。

其外部只有16位数据总线,所以只能扩展16位的SDRAM,但操作时,可以按32bit操作。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/7/9 15:07:02
zchong(论坛新手)
zchong
头衔:社区公民
帮派:无帮无派
帖数:19
金钱:350
积分:26
注册时间:2012/7/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

明白了一些,但是还有一个疑问,data packing功能使能的情况下,程序对logical address的操作会转化成两个对物理地址的操作,那么如果data packing功能禁止,即通过设置PKDIS位禁止数据打包功能,那么这种情况下,一个logical address和physical address是一一对应的关系,还是中间有空洞,如下图所示:

使能data packing

0000 0000 -----0000

                -----0001

0000 0001-----0002

               -----0003

禁止data packing

0000 0000 -----0000

0000 0001-----0001

是不是这样呢?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/7/9 22:50:31
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

在寄存器 SDCTL 中,有一个X16DE 位,在2136x或2137x处理器中,其解释为:

SDRAM External Data Path Width. Selects whether the SDRAM interface is 32 or 16 bits wide.
If X16DE = 0, DATA31-0 should be connected to the SDRAM. If X16DE = 1, DATA15-0 should be connected to the SDRAM and 16 to 32-bit packing is performed.
但在214XX,这一位的解释为:
SDRAM External Data Path Width. This bit should always be set.
貌似214XX系列只能以32Bit访问,不能为16Bit访问。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/7/10 0:18:25
zchong(论坛新手)
zchong
头衔:社区公民
帮派:无帮无派
帖数:19
金钱:350
积分:26
注册时间:2012/7/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

可能我没有表达清楚,现在先不关心sdram,比如我外部接了一个8bit数据宽度的设备,即这些设备只能以8bit进行访问。
针对8bit的情况,如果使能data packing,即PKDIS位清零,那么一个logical address对应的是4次physical address操作,读写都是一样的,此时逻辑地址与物理地址对应的关系是1对4的关系,举例如下:
logical address                   physical address
0000 0000                        0000 0000
                                       0000 0001
                                       0000 0002
                                       0000 0003

0000 0001                        0000 0004
                                       0000 0005
                                       0000 0006
                                       0000 0007
这应该是没有问题的吧

如果禁止data packing,即PKDIS置位,则逻辑地址中的高位的3个字节将被忽略,这个时候与物理地址对应的关系是什么样的,如果我向0000 00001地址写了0x00000012,那么0x12被写到物理地址的0x00000004上还是物理地址的0x00000001上,这个比较关键?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/7/10 8:53:51
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线


上传的图片
  201271010241201.jpg [ 152.11 KB 956×435 ] (缩略时请点击查看原图)

 

我手上没板子,在模拟环境下测试,从上图可以看出,当我以8bit,16bit,32bit方式查看数据时,8bit窗口写入的数据在16bit和32bit窗口中同一个地址高位显示都为0,写入的16位数据在8bit窗口中只能 显示低位。这说明当使用8Bit模式时,其地址仍是按32bit寻址,且高位数据自动填充0。

从图中可以看出,如果我向0000 00001地址写了0x00000012,那么0x12被写到物理地址的0x00000004上。上面测试时,我手动将PACKDIS位设置为1.其他没有配置。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/7/10 10:32:32
zchong(论坛新手)
zchong
头衔:社区公民
帮派:无帮无派
帖数:19
金钱:350
积分:26
注册时间:2012/7/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

这个问题搞清楚了,对于21489而言,当AMI设置成不打包的时候,内部的logical address和外部物理地址是一一对应的关系,logical address对应的数据都是32bit的,物理地址上的数据根据数据总线宽度决定。

sdram和ddr比较特殊,他们只能按照32bit进行存取,在物理上会分解成两次16bit的操作。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/8/17 22:33:10
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.153916 Call, 1 Queries, Processed in 0.031250 second(s),