|
TMS320VC5502调试SDRAM时, , |

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空间。
TI中文支持网

