TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320VC5502调试SDRAM时,有两个头疼问题

TMS320VC5502调试SDRAM时, , 
两个问题, 求解
1,写一个字节,结果所以内存全部变掉;
2,0x1e0000到0x200000之间的内存变成—-了

Shine:

你好,

请问你用的是CCS版本号是多少?

在GEL文件中有没有配置这部分memomry为可读写?

xuming sun:

回复 Shine:

—-问题,已经修改GEL文件, ok了.

但是那个超过0x200000地址之后, 写一个数据, 为什么以后的所有数据都变成一样的呢?? 4Bank x 1M x16 bit的sdram, CE0 CE1 已经合并,

 

EMIF_Config MyEmifConfig = {
EMIF_GBLCTL1_RMK(// EMIF Global Control Register 1EMIF_GBLCTL1_NOHOLD_HOLD_ENABLED,	// Hold enableEMIF_GBLCTL1_EK1HZ_EK1EN,// High-Z controlEMIF_GBLCTL1_EK1EN_ENABLED// ECLKOUT1 Enable),
EMIF_GBLCTL2_RMK(// EMIF Global Control Register 2EMIF_GBLCTL2_EK2RATE_1XCLK,// ECLKOUT2 RateEMIF_GBLCTL2_EK2HZ_EK2EN,// EK2HZ = 0, ECLKOUT2 is driven with value specified by EKnEN duringEMIF_GBLCTL2_EK2EN_ENABLED// ECLKOUT2 Enable (enabled by default)),EMIF_CE1CTL1_RMK(// CE1 Space Control Register 1EMIF_CE1CTL1_TA_DEFAULT,EMIF_CE1CTL1_READ_STROBE_DEFAULT,EMIF_CE0CTL1_MTYPE_16BIT_SDRAM,EMIF_CE1CTL1_WRITE_HOLD_MSB_DEFAULT,EMIF_CE1CTL1_READ_HOLD_DEFAULT),
EMIF_CE1CTL2_RMK(// CE1 Space Control Register 2EMIF_CE1CTL2_WRITE_SETUP_DEFAULT,EMIF_CE1CTL2_WRITE_STROBE_DEFAULT,EMIF_CE1CTL2_WRITE_HOLD_DEFAULT,EMIF_CE1CTL2_READ_SETUP_DEFAULT),
EMIF_CE0CTL1_RMK(// CE0 Space Control Register 1EMIF_CE0CTL1_TA_DEFAULT,// Not use for SDRAM (asynchronous memory types only)EMIF_CE0CTL1_READ_STROBE_DEFAULT,	// Read strobe widthEMIF_CE0CTL1_MTYPE_16BIT_SDRAM,	// 16-bit-wide SDRAMEMIF_CE0CTL1_WRITE_HOLD_DEFAULT,	// Write hold widthEMIF_CE0CTL1_READ_HOLD_DEFAULT	// Read hold width),
EMIF_CE0CTL2_RMK(// CE0 Space Control Register 2EMIF_CE0CTL2_WRITE_SETUP_DEFAULT,	// Write setup widthEMIF_CE0CTL2_WRITE_STROBE_DEFAULT,	// Write strobe widthEMIF_CE0CTL2_WRITE_HOLD_DEFAULT,	// Write hold widthEMIF_CE0CTL2_READ_SETUP_DEFAULT	// Read setup width),
EMIF_CE2CTL1_RMK(// CE2 Space Control Register 1EMIF_CE2CTL1_TA_DEFAULT,EMIF_CE2CTL1_READ_STROBE_DEFAULT,EMIF_CE2CTL1_MTYPE_DEFAULT,EMIF_CE2CTL1_WRITE_HOLD_MSB_DEFAULT,EMIF_CE2CTL1_READ_HOLD_DEFAULT),
EMIF_CE2CTL2_RMK(// CE2 Space Control Register 2EMIF_CE2CTL2_WRITE_SETUP_DEFAULT,EMIF_CE2CTL2_WRITE_STROBE_DEFAULT,EMIF_CE2CTL2_WRITE_HOLD_DEFAULT,EMIF_CE2CTL2_READ_SETUP_DEFAULT),EMIF_CE3CTL1_RMK(// CE3 Space Control Register 1EMIF_CE3CTL1_TA_DEFAULT,// Not use for SDRAM (asynchronous memory types only)EMIF_CE3CTL1_READ_STROBE_DEFAULT,	// Read strobe widthEMIF_CE2CTL1_MTYPE_32BIT_SDRAM,	// 32-bit-wide SDRAMEMIF_CE3CTL1_WRITE_HOLD_DEFAULT,	// Write hold widthEMIF_CE3CTL1_READ_HOLD_DEFAULT	// Read hold width),
EMIF_CE3CTL2_RMK(// CE3 Space Control Register 2EMIF_CE3CTL2_WRITE_SETUP_DEFAULT,	// Write setup widthEMIF_CE3CTL2_WRITE_STROBE_DEFAULT,	// Write strobe widthEMIF_CE3CTL2_WRITE_HOLD_DEFAULT,	// Write hold widthEMIF_CE3CTL2_READ_SETUP_DEFAULT	// Read setup width),EMIF_SDCTL1_DEFAULT,/*
EMIF_SDCTL1_RMK(// SDRAM Control Register 1EMIF_SDCTL1_TRC_OF(6),// Specifies tRC value of the SDRAM in EMIF clock cycles.EMIF_SDCTL1_SLFRFR_DISABLED// Auto-refresh mode),*/EMIF_SDCTL2_RMK(// SDRAM Control Register 20x15,// 4 banks,12 row address, 8 column addressEMIF_SDCTL2_RFEN_ENABLED,// Refresh enabledEMIF_SDCTL2_INIT_INIT_SDRAM,EMIF_SDCTL2_TRCD_OF(4),// Specifies tRCD value of the SDRAM in EMIF clock cyclesEMIF_SDCTL2_TRP_OF(8)// Specifies tRP value of the SDRAM in EMIF clock cycles),EMIF_SDRFR1_DEFAULT,EMIF_SDRFR2_DEFAULT,/*
0x61B,// SDRAM Refresh Control Register 1
0x0300,// SDRAM Refresh Control Register 2
*/EMIF_SDEXT1_DEFAULT,
EMIF_SDEXT2_DEFAULT,
/*
EMIF_SDEXT1_RMK(// SDRAM Extension Register 1EMIF_SDEXT1_R2WDQM_1CYCLE,EMIF_SDEXT1_RD2WR_3CYCLES,EMIF_SDEXT1_RD2DEAC_1CYCLE,EMIF_SDEXT1_RD2RD_1CYCLE,EMIF_SDEXT1_THZP_OF(1),// tPROZ2=2EMIF_SDEXT1_TWR_OF(0),//EMIF_SDEXT1_TRRD_2CYCLES,EMIF_SDEXT1_TRAS_OF(4),EMIF_SDEXT1_TCL_2CYCLES),
EMIF_SDEXT2_RMK(// SDRAM Extension Register 2EMIF_SDEXT2_WR2RD_0CYCLES,EMIF_SDEXT2_WR2DEAC_1CYCLE,0,EMIF_SDEXT2_R2WDQM_1CYCLE),*/EMIF_CE1SEC1_DEFAULT,// CE1 Secondary Control Register 1
EMIF_CE0SEC1_DEFAULT,// CE0 Secondary Control Register 1
EMIF_CE2SEC1_DEFAULT,// CE2 Secondary Control Register 1
EMIF_CE3SEC1_DEFAULT,// CE3 Secondary Control Register 1
//EMIF_CESCR_DEFAULT// CE Size Control Register1
}

Shine:

回复 xuming sun:

你好,

1. 请问2片16bit SDRAM在硬件上是怎么连的?只用了CE0作为片选信号吧?

2. EMIF CE Size Control Register 1的CES位有没有设成10?

SDCTL的SDWTH[4:0]是怎么设置的?

xuming sun:

回复 Shine:

1, 是一片SDRAM, 64mBIT, 只用了CE0

2,CES设置成了01, 你说的10是全部空间, 寻址16Mbytes

3,SDCTL上图的程序已给出.

4,谢谢你的回复和帮助

仿真情况已经可以访问0x200000, 修改了gel文件.

http://bbs.21ic.com/forum.php?mod=viewthread&tid=711238&extra=

新问题, 是离开仿真环境, 测试0x200000出问题, 已经把gel的寄存器配置都写入了程序………..

Shine:

回复 xuming sun:

如果你只用1片的话, CES设成01就可以了。

我看到你程序中对SDCTL的配置是 EMIF_SDCTL1_DEFAULT, 也就是0xF000, 这跟你用的SDRAM不匹配吧?

另外, 你可以写一些数据后再回读,看是不是CCS显示的问题还是SDRAM配置的问题?

xuming sun:

回复 Shine:

1, 

SDCTL 1应该是没问题的, 因为0X200000以内的都是ok的.

2,

直接烧录NAND FLASH做boot, 然后做SDRAM的读写校验. 0x200000以内都通过. 已经排除CCS的显示问题了. 

SDRAM的配置, 也找不出哪里的问题.

3,

前辈有无实际操作经验?

Shine:

回复 xuming sun:

1. 片选信号CE0, CE1怎么接的?2. 5502不支持NAND flash boot mode, 你是通过二次bootloader加载的吗? 建议现在仿真器模式下调通后,再用boot mode.

xuming sun:

回复 Shine:

1,

CE0 连接SDRAM的片选.

刚发现,

boot时, CE1接NAND FLASH.

非boot时, CE1悬空. NAND FLASH 连接CE2.

不好意思.

现在, 只能使用仿真器做测试了.

做boot是因为刚开始对GEL的不理解,要排除编译IDE和GEL的问题.

有个问题, 是不是即使GEL文件没有, 在程序里对EMIF初始化, 也可以进行测试的? 就是能否直接排除IDE/GEL的问题?

现在已经回到仿真调试.

2,

BOOTM=011, External memory boot (via EMIF) from 16-bit asynchronous memory

是可以NAND FLASH 启动的.

3,

您那儿有没有做过5502+64Mbit SDRAM的朋友, 现在我都开始怀疑datasheet了. 真的可以访问64Mbit吗?

xuming sun:

回复 Shine:

还有, 发现 EMIF_CONFIG 配置参数, I/O寄存器窗口值基本不动; 用EMIF_RSET()才能改变?但是效果, 和用GEL改变一样, 明明只有8Mbytes的sdram, 我竟然可以访问到0X600000 (uint16 类型)都不出错….

( ⊙ o ⊙ )啊!

现在我已经不能判断, 是

IDE问题?

gel问题?

芯片问题?

数据手册问题?

程序问题?

…..

Shine:

回复 xuming sun:

我觉得你的硬件设计有点问题。

1. vc5502的EMIF是不支持nand flash的,如果你要用EMIF boot mode的话,需要在CE1空间接Nor flash. 2. vc5502的同一个CE空间是不允许有两种memory同时存在的,所以如果你要用EMIF boot mode的话,建议SDRAM接CE2空间。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320VC5502调试SDRAM时,有两个头疼问题
分享到: 更多 (0)