【DSP开发】6455EMIF
外部设备连接接口包括外部存储器连接接口(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个片选空间都可以单独进行设置,设置的内容包括存储器类型、存储器宽度、读写时序参数等内容。本节将分别给出不同接口的硬件连接以及参数的设置。
异步存储器的类型多种多样,它们既包括静态随机存储器、闪存存储器、只读存储器等,又有先入先出存储器、双端口存储器等,这些存储器有着不同的特点,可以根据需要灵活选用。
外部存储器接口所支持的异步存储器接口、同步突发静态存储器接口和同步动态存储器接口都支持程序代码访问以及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)插入的额外周期
同步突发静态存储器所使用的信号包括数据总线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 | MEMFREQ |
000b
001b
|
CLKMEM频率
CLKOUT频率
CLKOUT频率除2
|
全局控制寄存器 | 7 | WPE |
0
1
|
后写使能
禁止后写
后写使能
|
全局控制寄存器 | 5 | MEMCEN |
0
1
|
存储器时钟使能
CLKMEM保持高电平
CLKMEM输出使能
|
全局控制寄存器 | 0 | NOHOLD |
0
1
|
外部保持控制
允许外部保持
禁止外部保持
|
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 | MEMFREQ |
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 | TACTV2ACTV | 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);