DSP之外部设备连接接口之EMIF

      外部设备连接接口包括外部存储器连接接口(EMIF)、主机接口(HPI)等。外部存储器接口主要用来同并行存储器连接,这些存储器包括SDRAM、SBSRAM、Flash、SRAM存储器等,外部存储器接口还可以同外部并行设备进行连接,这些设备包括并行A/D、D/A转换器、具有异步并行接口的专用芯片,并可以通过外部存储器接口同FPGA、CPLD等连接;主机接口主要用来为主控CPU和C55x处理器之间提供一条方便、快捷的并行连接接口,这个接口用来对DSP进行控制、程序加载、数据传输等工作。
       这里主要是EMIF。
EMIF输入输出信号图:
 
EMIF为3种类型的存储器提供了无缝接口:
1 异步存储器,包括ROM,FLASH,异步SRAM
2 同步突发静态存储器( SBSRAM
3 同步动态存储器( SDRAM
        异步存储器可以是静态随机存储器( SRAM )、只读存储器( ROM )和闪存存储器等存储器,在实际使用中还可以用异步接口连接并行 A/D 采样器件、并行显示接口等外围设备,但使用这些非标准设备时需要增加一些外部逻辑来保证设备的正常使用。
        在使用外部存储器接口时应区分字寻址和字节寻址之间的区别,当 TMS320C55x 访问数据时, CPU 23 位地址访问 16 位字,该方式下数据空间被分成 128 页,每页字长 64K CPU 访问程序代码时,用 24 位地址访问 8 位字节, DMA 控制器访问存储器时也采用字节寻址方式。
        如果多个请求服务同时到达,EMIF会根据每个请求优先级来进行处理。最高为HOLD,最低为刷新。
        对EMIF编程时,必须了解外部存储器地址如何分配给片使能空间,即CE空间,每个CE空间可以同那些类型的存储器连接,以及用那些寄存器位来配置CE空间。
        TMS320C55x的外部存储器映射在存储空间的分布,相应于EMIF的片选使能信号,例如CE1空间的存储器,则必须将其片选引脚连接到EMIF的CE1引脚。当EMIF访问CE1空间时,驱动CE1变低。
数据页
字寻址方式地址范
16 进制)
外部存储器
字节寻址方式地址 范围
16 进制)
2 页后 64K 字节
3-31
02 8000-1F FFFF
CE0 空间
4M-320K )字节
05 0000-3F FFFF
32-63
20 0000-3F FFFF
CE1 空间
4M 字节
40 0000-7F FFFF
64-95
40 0000-5F FFFF
CE2 空间
4M 字节
80 0000-BF FFFF
96-127
60 0000-7F FFFF
MP/MC=0
CE3 空间长度为
4M-32K )字节
剩余地址空间被片上ROM
MP/MC=1
CE3 空间长度为 4M 字节
C0 0000-FF FFFF
TMS320C5510外部存储器映射中的最高地址单独分配给CE3空间,或由CE3及内部的DSP ROM共享。这些地址的分配由CPU状态寄存器ST3_55中的MPNMC位来决定。在DSP复位期间,MPNMC值取决于DSP的NP/MC引脚的信号电平。
 
可以使用全局控制寄存器EGCR和每个CE空间控制寄存器来配置CE空间。
对于每个CE空间,必须设置控制寄存器1中的以下域:
MTYPE 指定存储器类型
MEMFREQ 决定存储器信号的频率
MEMCEN 决定CLKMEM引脚是输出存储器时钟信号,还是被拉成高电平
 
一定要对全局控制寄存器写如下控制位。
WPE 对所有CE空间,使能或者禁止
NOHOLD 对所有CE空间,使能或禁止HOLD请求
 
 
外部寄存器接口硬件连接与配置
 
        外部存储器接口所支持的异步存储器接口、同步突发静态存储器接口和同步动态存储器接口都支持程序代码访问以及 32 位宽、 16 位宽和 8 位宽数据访问。外部存储器的 4 个片选空间都可以单独进行设置,设置的内容包括存储器类型、存储器宽度、读写时序参数等内容。本节将分别给出不同接口的硬件连接以及参数的设置。
1 .异步存储器接口    
         异步存储器的类型多种多样,它们既包括静态随机存储器、闪存存储器、只读存储器等,又有先入先出存储器、双端口存储器等, 这些存储器有着不同的特点,可以根据需要灵活选用。
         外部存储器接口所支持的异步存储器接口、同步突发静态存储器接口和同步动态存储器接口都支持程序代码访问以及 32 位宽、 16 位宽和 8 位宽数据访问。外部存储器的 4 个片选空间都可以单独进行设置,设置的内容包括存储器类型、存储器宽度、读写时序参数等内容。
          AM29LV320D 是一种大容量的闪存存储器,存储容量可以达到 2M /4M 字节,数据总线宽度可以是 8 位或 16 位,下面给出 AM29LV320D DSP 的连接关系示意图。  
       
 
 
      从图中可以看到 C55x 处理器与 AM29LV320D 的连接用了数据线 D7-D0 ,在这种 连接方式下 AM29LV320D DQ15/A-1 引脚应当作为地址线 A-1 来使用,处理器 的地址总线 A[21:0] 接到 AM29LV320D A[20:-1] AM29LV320D BYTE# 号接地, RESET# 接到系统复位信号,写保护 / 快速编程 WP#/ACC 引脚接高电 平。   
      AM29LV320D 的读写时序,如图 5-5 和图 5-6 所示,从时序图中可以看到该 芯片的一个读写周期最短为 90ns 120ns ,而数字信号处理器的 CLKOUT 时钟 DSP 主时钟的 1/1 1/2 1/3 1/4 1/5 1/6 1/7 1/8 ,如果 DSP 运行在 200MHz ,则 DSP 一个时钟周期为 5ns ,如果不能让 DSP 的读写时序同 AM29LV320D 的读写时序相匹配,就无法实现正确的读写。调整 DSP 的读写时 序有两种方法,一种是将 AM29LV320D RY/BY 信号接到 DSP ARDY 信号上 ,通过硬件等待信号实现二者读写时序的同步,另外一种方法是通过软件设置 外部存储器接口寄存器实现正确读写。方法 1 使用简单,但灵活性不强,如果 DSP 通过外部存储器接口连接多个芯片,这种方法就不能使用,软件设置的方 法灵活、方便,推荐使用该种方法设置外部存储器接口的读写时序。
CLKOUT 4 分频时,设置建立时间为 1 个时钟周期,选通时间为 4 个时钟周期,保持时间为 2 个时钟周期就可以正确读取 AM29LV320D 存储器。
外部存储器接口为每个片选空间都提供了独立的片选控制寄存器,通过这些寄存器可以设置寄存器类型,读 / 写时序以及超时时钟周期数,具体可参见下表
片选控制寄存器 1 CEx_1
字段
数值
说明
15~13
Reserved

 

保留
14~12
MTYPE
000b
001b
010b
011b
100b
101b~111b
存储器类型
8 位宽异步存储器
16 位宽异步存储器
32 位宽异步存储器
32 位宽同步动态存储器 (SDRAM)
32 位宽同步静态突发存储器 (SBSRAM)
保留
11~8
READ SETUP
1~15
读建立时间
7~2
READ STROBE
1~63
读选通时间
1~0
READ HOLD
0~3
读保持时间
片选控制寄存器 2 CEx_2
字段
数值
说明
15~14
EXTENED HOLD READ
0~3
读延长保持时间
13~12
EXTENED HOLD WRITE
0~3
写延长保持时间
11~8
WRITE SETUP
1~15
写建立时间
7~2
WRITE STROBE
1~63
写选通时间
1~0
WRITE HOLD
0~3
写保持时间
片选控制寄存器 3 CEx_3
字段
数值
说明
15~8
Reserved

 

保留
7~0
TIMEOUT
0
1 N 255
超时字段(同步存储器超时字段无效)
超时功能被禁止
ARDY信号为低超过N个时钟周期,则发生超时错误
 
因此,使用异步存储器要注意的问题是:
1 外部存储器连接信号
2 EMIF对异步存储器的配置
3 EMIF异步读操作
4 EMIF异步写操作
5 随就绪信号(ARDY)插入的额外周期
 
2 .同步突发静态存储器 (SBSRAM)        同步突发静态存储器是一种高密度、高速的存储器,同同步动态存储器相比,同步静态存储器不需要刷新,访问更加方便、快捷。 TMS320C55x 外部存储器接
支持 32 位宽无校验同步突发管道型静态存储器,同步突发静态存储器的工作频率在与 CPU 时钟同频或 CPU 时钟频率的 1/2
        SBSRAM有流水和流通两种类型,但EMIF只支持流水型,在相同吞吐量的情况下,可以工作在更高的频率。
        同步突发静态存储器所使用的信号包括数据总线 D[0..31] 、地 址总线 A[21..0] 、片选信号 CE0-CE3 、字节使能信号 BE0-BE3 ,此 外还有 SBSRAM 地址选通信号
SSADS 、输出使能信号 SSOE 、写 使能信号 SSWE 和存储器接口时钟 CLKMEM
       接下来给出 C55x 外部存储器接口同 32 位无校验管道型 SBSRAM 的连接图。图中 SBSRAM 占用 CE0 空间, SBSRAM MODE 信号接到低电平使 SBSRAM 工作在 线性突发模式,其他未用的 SBSRAM 信号如 ZZ ADV ADSP GW 信号都接 成非活动状态。
       如果所用的 SBSRAM 是有校验型存储器,连接时则应注意 SBSRAM 的校验 信号 DQP[d:a] 应当接地以减少功率消耗。
      如果要使用 SBSRAM 的电源关闭模式,可以将 SBSRAM ZZ 引脚 C55x 的通用输入输出引脚相连接,通过通用输入输出引脚控制 SBSRAM 是否进入电源关闭模式。
         控制 SBSRAM 接口的寄存器包括 EMIF 全局控制寄存器和片选 控制寄存器 CEx_1 ,接下来给出 SBSRAM 所需设置字段表。
SBSRAM 需要设置字段
所在寄存器
字段名称
数值
说明
片选控制寄存器
14~12
MTYPE
100b
32 位宽 SBSRAM
全局控制寄存器
11~9
MEMFRE Q
000b
001b
CLKMEM 频率
CLKOUT 频率
CLKOUT 频率除 2
全局控制寄存器
7
WPE
0
1
后写使能
禁止后写
后写使能
全局控制寄存器
5
MEMCEN
0
1
存储器时钟使能
CLKMEM 保持高电平
CLKMEM 输出使能
全局控制寄存器
0
NOHOLD
0
1
外部保持控制
允许外部保持
禁止外部保持
 
3 .同步突发动态存储器 (SDRAM)
 
TMS320C55x 外部存储器接口支持 16 位、 32 位宽, 64M 位和 128M SDRAM SDRAM 可以工作在 C55x 频率的 1/2 1/1
SDRAM 的引脚映射和寄存器配置表
SDRAM
及排列方式
使用芯
数量
配置位
占用 CE
空间数
边界 / 行地址
列地址
SDACC SDSIZE SDWID
SDRAM
EMIF
SDRAM
EMIF
64M
4M x16
1
0             0              0
2
BA[1:0] [11:0]
A[14:12]
SDA10 A[10:1]
A[7:0]
A[8:1]
64M
4M x16
2
    1              0              0
4
BA[1:0] [11:0]
A[15:13]
SDA10 A[11:2]
A[7:0]
A[9:2]
64M
2M x32
1
    1              0              1
2
BA[1:0 [10:0]
A[14:13]
SDA10 A[11:2]
A[7:0]
A[9:2]
64M
2M x32
2
    1              0              1
4
BA[1:0 [10:0]
A[14:13]
SDA10 A[11:2]
A[7:0]
A[9:2]
128M
8M x16
1
    0              1              0
4
BA[1:0] [11:0]
A[14:12]
SDA10 A[10:1]
A[8:0]
A[9:1]
128M
4M x32
1
    1              1              1
4
BA[1:0] [11:0]
A[15:13]
SDA10 A[11:2]
A[7:0]
A[9:2]
 
SDRAM 接口专用信号包括 SDRAM 行选通信号 SDRAS 、列选通信 SDCAS 和写使能信号 SDWE SDA10 信号在 ACTV 命令时作为 行地址信号,
在读写操作时作为预加电使能信号,在 DCAB 命令 下为高,保持模式下为高阻态。
         SDRAM 操作时需要一系列命令来支持其运行,下面给出命令 列表
C55x EMIF 接口 SDRAM 命令
命令
说明
DCAB
关闭所有边界
ACTV
打开所选择边界和所选择行
READ
输入起始列地址开始读操作
WRT
输入起始列地址开始写操作
MRS
配置 SDRAM 模式寄存器
REFR
自动循环刷新地址
NOP
不进行操作
 
在进行 SDRAM 操作时需要修改 EMIF 全局控制寄存器和片选控制寄存器 1 ,接下来给出 SDRAM 所需设置字段表。
 
所在寄存器
字段名称
数值
说明
全局控制寄存器
11~9
MEMFRE Q
000b
001b
CLKMEM 频率
CLKOUT 频率
CLKOUT 频率除 2
全局控制寄存器
7
WPE
0
1
后写使能
禁止后写
后写使能
全局控制寄存器
5
MEMCEN
0
1
存储器时钟使能
CLKMEM 保持高电平
CLKMEM 输出使能
全局控制寄存器
0
NOHOLD
0
1
外部保持控制
允许外部保持
禁止外部保持
片选控制寄存器 1
14~12
MTYPE
011b
32 位宽或 16 位宽 SDRAM
 
除了设置以上寄存器以外还需要设置 SDRAM 控制寄存器
SDRAM 控制寄存器 1
字段
初始值
说明
15~11
TRC
1111b
从刷新命令 REFR REFR/MRS/ACTV 命令间 CLKMEM 周期数
10
SDSIZE
0
SDRAM 宽度
0 16 位宽   1 32 位宽
9
SDWID
0
SDRAM 容量
0 64M   1 128M
8
RFEN
1
刷新使能
0 :禁止刷新   1 :允许刷新
7~4
TRCD
0100
ACTV 命令到 READ/WRITE 命令 CLKMEM 周期数
3~0
TRP
100
DCAB 命令到 REFR/ACTV/MRS 命令 CLKMEM 周期数
SDRAM 控制寄存器 2
字段
初始值
说明
10
SDACC
0
0: SDRAM 数据总线接口为 16 位宽
1: SDRAM 数据总线接口为 32 位宽
9~8
TMRD
11b
ACTV/DCAB/REFR 延迟 CLKMEM 周期数
7~4
TRAS
1111b
SDRAS 信号有效时持续 CLKMEM 周期数
3~0
TACTV2A CTV
1111b
SDRAS SDRAS 有效延迟 CLKMEM 周期数
 
SDRAM 周期寄存器和计数寄存器用来设置 SDRAM 的刷新周期, 其中周期寄存器存放刷新所需 CLKMEM 时钟周期数,计数寄存器 存放刷新计数器当前计数值。
 
 
外部寄存器接口的软件设置
 
应用芯片支持库函数对外部寄存器接口进行设置首先要在头文件 中包含 csl_emif.h ,接下来声明 EMIF 配置结构:
EMIF_Config Config_EMIF = {
0x0281,  /* EMIF 全局控制寄存器 */
               /* CLKMEM=OFF */
               /*HOLD_disabled */
0xFFFF, /* EMIF 初始化寄存器 */
0x100c, /* ce01 */
/*MTYPE=001B 16 位异步存储器
  READ START=0000b 读建立周期为 0
  READ STROBE=000011b 读选通周期为 3
  READ HOLD=01b 读保持周期为 1
*/
0x0FFF, /* ce02 */
/*READ EXT HOLD=00b
  WRITE EXT HOLD=00b
  WRITE SETUP=1111b 写建立周期为 =15
  WRITE STROBE=111111b 写选通周期为 =63
  WRITE HOLD=11b 写保持周期为 =3
*/
0x00FF, /* ce03 */
/*TIMEOUT=0XFF,timeout=255*/
0x013E, /* ce11 */
/*MTYPE=000B 8 位异步存储器
  READ START=0001b 读建立周期为 1
  READ STROBE=001111b 读选通周期为 15
  READ HOLD=10b 读保持周期为 2
*/
0x0FFF, /* ce12 */
/*READ EXT HOLD=00b
  WRITE EXT HOLD=00b
  WRITE SETUP=1111b 写建立周期为 15
  WRITE STROBE=111111b 写选通周期为 63
  WRITE HOLD=11b 写保持周期为 3
*/
0x00FF, /* ce13 */
0x1105, /* ce21 */
/*MTYPE=001B 16 位异步存储器
  READ START=0001b 读建立周期为 1
  READ STROBE=000001b 读选通周期为 1
  READ HOLD=01b 读保持周期为 1
*/
0x0105, /* ce22 */
/*READ EXT HOLD=00b
  WRITE EXT HOLD=00b
  WRITE SETUP=0001b 写建立周期为 1
WRITE STROBE=000001b 写选通周期为 1
  WRITE HOLD=01b 写保持周期为 3
0x00FF, /* ce23 */
0x110D, /* ce31 */
/*MTYPE=001B 16 位异步存储器
  READ START=0001b 读建立周期为 1
  READ STROBE=000011b 读选通周期为 3
  READ HOLD=01b 读保持周期为 1
*/
0x010D, /* ce32 */
/*READ EXT HOLD=00b
  WRITE EXT HOLD=00b
  WRITE SETUP=0001b 写建立周期为 1
  WRITE STROBE=000011b 写选通周期为 3
  WRITE HOLD=01b 写保持周期为 1
*/
0x00FF, /* ce33 */
0x07FF, /* sdc1 */
0x0FFF, /* sdper */
0x07FF, /* init */
0x03FF /* sdc2 */
/* 没有 SDRAM*/
};
接下来调用 EMIF 配置函数完成配置过程:
EMIF_config(&Config_EMIF);

你可能感兴趣的:(移动开发)