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时,有两个头疼问题

Other Parts Discussed in Thread: TMS320VC5502, TMS320VC5501

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

  • 你好,

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

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

  • ----问题,已经修改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, 

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

    2,

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

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

    3,

    前辈有无实际操作经验?

  • 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吗?

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

    ( ⊙ o ⊙ )啊!

    现在我已经不能判断, 是

    IDE问题?

    gel问题?

    芯片问题?

    数据手册问题?

    程序问题?

    .....

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

    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, 

    我上传开发板的原理图在附件

    OK5502开发板原理图.pdf
  • 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 这些天的帮助.

  • 1. 理解正确。
    4. 0x200000和0x600000的映射关系是怎么映射的?
    5.不客气,应该的。