|
TMS320VC5502调试SDRAM时, , |
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
|
TMS320VC5502调试SDRAM时, , |
----问题,已经修改GEL文件, ok了.
但是那个超过0x200000地址之后, 写一个数据, 为什么以后的所有数据都变成一样的呢?? 4Bank x 1M x16 bit的sdram, CE0 CE1 已经合并,
EMIF_Config MyEmifConfig = {
EMIF_GBLCTL1_RMK( // EMIF Global Control Register 1
EMIF_GBLCTL1_NOHOLD_HOLD_ENABLED, // Hold enable
EMIF_GBLCTL1_EK1HZ_EK1EN, // High-Z control
EMIF_GBLCTL1_EK1EN_ENABLED // ECLKOUT1 Enable
),
EMIF_GBLCTL2_RMK( // EMIF Global Control Register 2
EMIF_GBLCTL2_EK2RATE_1XCLK, // ECLKOUT2 Rate
EMIF_GBLCTL2_EK2HZ_EK2EN, // EK2HZ = 0, ECLKOUT2 is driven with value specified by EKnEN during
EMIF_GBLCTL2_EK2EN_ENABLED // ECLKOUT2 Enable (enabled by default)
),
EMIF_CE1CTL1_RMK( // CE1 Space Control Register 1
EMIF_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 2
EMIF_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 1
EMIF_CE0CTL1_TA_DEFAULT, // Not use for SDRAM (asynchronous memory types only)
EMIF_CE0CTL1_READ_STROBE_DEFAULT, // Read strobe width
EMIF_CE0CTL1_MTYPE_16BIT_SDRAM, // 16-bit-wide SDRAM
EMIF_CE0CTL1_WRITE_HOLD_DEFAULT, // Write hold width
EMIF_CE0CTL1_READ_HOLD_DEFAULT // Read hold width
),
EMIF_CE0CTL2_RMK( // CE0 Space Control Register 2
EMIF_CE0CTL2_WRITE_SETUP_DEFAULT, // Write setup width
EMIF_CE0CTL2_WRITE_STROBE_DEFAULT, // Write strobe width
EMIF_CE0CTL2_WRITE_HOLD_DEFAULT, // Write hold width
EMIF_CE0CTL2_READ_SETUP_DEFAULT // Read setup width
),
EMIF_CE2CTL1_RMK( // CE2 Space Control Register 1
EMIF_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 2
EMIF_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 1
EMIF_CE3CTL1_TA_DEFAULT, // Not use for SDRAM (asynchronous memory types only)
EMIF_CE3CTL1_READ_STROBE_DEFAULT, // Read strobe width
EMIF_CE2CTL1_MTYPE_32BIT_SDRAM, // 32-bit-wide SDRAM
EMIF_CE3CTL1_WRITE_HOLD_DEFAULT, // Write hold width
EMIF_CE3CTL1_READ_HOLD_DEFAULT // Read hold width
),
EMIF_CE3CTL2_RMK( // CE3 Space Control Register 2
EMIF_CE3CTL2_WRITE_SETUP_DEFAULT, // Write setup width
EMIF_CE3CTL2_WRITE_STROBE_DEFAULT, // Write strobe width
EMIF_CE3CTL2_WRITE_HOLD_DEFAULT, // Write hold width
EMIF_CE3CTL2_READ_SETUP_DEFAULT // Read setup width
),
EMIF_SDCTL1_DEFAULT,
/*
EMIF_SDCTL1_RMK( // SDRAM Control Register 1
EMIF_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 2
0x15, // 4 banks,12 row address, 8 column address
EMIF_SDCTL2_RFEN_ENABLED, // Refresh enabled
EMIF_SDCTL2_INIT_INIT_SDRAM,
EMIF_SDCTL2_TRCD_OF(4), // Specifies tRCD value of the SDRAM in EMIF clock cycles
EMIF_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 1
EMIF_SDEXT1_R2WDQM_1CYCLE,
EMIF_SDEXT1_RD2WR_3CYCLES,
EMIF_SDEXT1_RD2DEAC_1CYCLE,
EMIF_SDEXT1_RD2RD_1CYCLE,
EMIF_SDEXT1_THZP_OF(1), // tPROZ2=2
EMIF_SDEXT1_TWR_OF(0), //
EMIF_SDEXT1_TRRD_2CYCLES,
EMIF_SDEXT1_TRAS_OF(4),
EMIF_SDEXT1_TCL_2CYCLES
),
EMIF_SDEXT2_RMK( // SDRAM Extension Register 2
EMIF_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 Register
1
}你好,
1. 请问2片16bit SDRAM在硬件上是怎么连的?只用了CE0作为片选信号吧?
2. EMIF CE Size Control Register 1的CES位有没有设成10?
SDCTL的SDWTH[4:0]是怎么设置的?
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的寄存器配置都写入了程序...........
如果你只用1片的话, CES设成01就可以了。
我看到你程序中对SDCTL的配置是 EMIF_SDCTL1_DEFAULT, 也就是0xF000, 这跟你用的SDRAM不匹配吧?
另外, 你可以写一些数据后再回读,看是不是CCS显示的问题还是SDRAM配置的问题?
1. 片选信号CE0, CE1怎么接的?
2. 5502不支持NAND flash boot mode, 你是通过二次bootloader加载的吗? 建议现在仿真器模式下调通后,再用boot mode.
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吗?
我觉得你的硬件设计有点问题。
1. vc5502的EMIF是不支持nand flash的,如果你要用EMIF boot mode的话,需要在CE1空间接Nor flash.
2. vc5502的同一个CE空间是不允许有两种memory同时存在的,所以如果你要用EMIF boot mode的话,建议SDRAM接CE2空间。
1,
Using the TMS320VC5501/C5502 Bootloader.pdf (SPRA911C.pdf) , page4,
bootm=011
Parallel EMIF boot from 16-bit external asynchronous memory
The bootloader reads the boot table from external 16-bit asynchronous memory via the
external memory interface (EMIF). The bootloader will configure the CE1 space for 16-bit,
asynchronous operation and read the boot table from word address 200000h. The operation
of this mode is described in section 2.3.3
bootm=000
Direct Execution from External Asynchronous Memory − No Boot
The C5501 and C5502 also offer two no-boot options in which the DSP executes code
directly from external asynchronous memory. When these options are used, the ROM is
disabled (MPNMC = 1) at reset, effectively forcing the first instruction to be fetched from
external memory at address 0xFFFF00. The C5501 and C5502 support direct execution
from 16-bit or 32-bit external asynchronous memory. The operation of this mode is described
in section 2.3.1.
2,
已经发现NAND FLASH的CE1与SDRAM的CE1冲突, 现在, 改用仿真了+EEPROM boot做测试.
结果: 超过0x600000仍然可以正确读写....见鬼了..
3,
我上传开发板的原理图在附件
1,没看到你电路图里有NAND flash, 只有NOR flash SST39VF800
2,能否不要用boot测试,单独在仿真器模式下测?
3,如果可以的话,把CE1管脚和CPLD断开再测,或者把SDRAM片选接到CE2, CE3悬空不接再测。
1,
非常抱歉. 一直误以为SST39VF800是nand, 谢谢你的提醒, 我又搜了一遍资料. 虽然可以启动, 可能000,011都是NOR FLASH的启动. 一个片上运行, 一个拷贝到ram运行. 不知现在有没有理解对?
2,
已经放弃boot, 全用仿真器
3,
你说的试过. 结果一样.
4,
访问0x600000, 可以读写正确.
后来发现, 实际操作是0x200000, 也就是说正好相差8Mbytes. 也就是实际访问量就是8M.正好符合板载SDRAM.
5,
非常感谢 Shine Zhang 这些天的帮助.