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.

EVM5515例程CSL_USB_MSC_dmaExample_Out生成bin文件,下载到开发板无法正常工作,怎么办?

例程使用的GEL文件为0250.evm5515.gel

我将GEL文件的功能用C文件实现,如下

7245.evm5515.c
/********************************************************************/
/* evm5515.gel                                                    */
/* Version 0.02                                                     */
/*                                                                  */
/* This GEL file is to be used with the 5515 EVM.                 */
/* Changes may be required to support specific hardware designs.    */
/*                                                                  */
/* Code Composer Studio supports six reserved GEL functions that    */
/* automatically get executed if they are defined. They are:        */
/*                                                                  */
/* StartUp()              - Executed whenever CCS is invoked        */
/* OnReset()              - Executed after Debug->Reset CPU         */
/* OnRestart()            - Executed after Debug->Restart           */
/* OnPreFileLoaded()      - Executed before File->Load Program      */
/* OnFileLoaded()         - Executed after File->Load Program       */
/* OnTargetConnect()      - Executed after Debug->Connect           */
/*                                                                  */
/*   Version History                                                */
/*     v0.01        Initial Release                                 */
/*     v0.02        Corrected PLL settings                          */
/********************************************************************/
//StartUp()
//{
//    c5515_MapInit();
//}

/*--------------------------------------------------------------*/
/* OnTargetConnect() -- this function is called after a target  */
/* connect.                                                     */
/*--------------------------------------------------------------*/
void OnTargetConnect()
{
//    GEL_Reset();
    Peripheral_Reset();
    ProgramPLL_100MHz();
    SDRAM_INIT();
//    GEL_TextOut("Target Connection Complete.\n");
}

/*--------------------------------------------------------------*/
/* OnPreFileLoaded()                                            */
/* This function is called automatically when the 'Load Program'*/
/* Menu item is selected.                                       */
/*--------------------------------------------------------------*/
//OnPreFileLoaded()
//{
//    /* Reset the CPU to clean up state */
//    //GEL_Reset();
//}

/*--------------------------------------------------------------*/
/* OnRestart()                                                  */
/* This function is executed before a file is restarted. Disable*/
/* interrupts and DMA from the current program so pending       */
/* events and transfers don't interfere with the new program.   */
/*--------------------------------------------------------------*/
void OnRestart()
{
    /* Disable interrupts */
    *(volatile ioport Uint16 *)0x0003 = *(volatile ioport Uint16 *)0x0003 | 0x0800; //*(int*)0x0003 = *(int*)0x0003 | 0x0800; // Set INTM
    *(volatile ioport Uint16 *)0x0000 = 0;      //*(int*)0x0000 = 0;      // Clear IER0
    *(volatile ioport Uint16 *)0x0045 = 0;      //*(int*)0x0000 = 0;      // Clear IER1
}
/*--------------------------------------------------------------*/
/* OnReset()                                                    */
/* This function is called by CCS when you do Debug->Resest.    */
/* The goal is to put the C55xx into a known good state with    */
/* respect to cache, dma and interrupts.                        */
/*--------------------------------------------------------------*/
//OnReset( int nErrorCode )
//{
//}

/*--------------------------------------------------------------*/
/* OnFileLoaded()                                               */
/* This function is called by CCS when you do File->Load Program*/
/* The goal is to do in post file loaded configuration that may */
/* be needed.                                                   */
/*--------------------------------------------------------------*/
//OnFileLoaded()
//{
//}

#define ESCR     0x1c33

#define SDTIMR1  0x1020 
#define SDTIMR2  0x1021 
#define SDCR1    0x1008 
#define SDCR2    0x1009
#define SDSRETR  0x103C
#define SDRCR    0x100C

#define PRCR     0x1C05 
#define PCGCR1   0x1c02
#define PCGCR2   0x1c03
#define PSRCR    0x1c04 

#define CLKCFGL  0x1c1e
#define CCR2     0x1c1f
#define CGCR1    0x1c20
#define CGCR2    0x1c21
#define CGCR3    0x1c22
#define CGCR4    0x1c23
#define CCSSR    0x1c24
#define IVPD     0x0049


// ***************************************************************************

///* Memory map based on MP/MC value (assume MP/MC = 0).    */
//c5515_MapInit() {
//    GEL_MapOn();
//    GEL_MapReset();
//
//    /*Program Space*/
//
//    /* DARAM */
//    GEL_MapAdd(0x0000C0,0,0x001F40,1,1);    /* DARAM0 */
//    GEL_MapAdd(0x002000,0,0x002000,1,1);    /* DARAM1 */
//    GEL_MapAdd(0x004000,0,0x002000,1,1);    /* DARAM2 */
//    GEL_MapAdd(0x006000,0,0x002000,1,1);    /* DARAM3 */
//    GEL_MapAdd(0x008000,0,0x002000,1,1);    /* DARAM4 */
//    GEL_MapAdd(0x00A000,0,0x002000,1,1);    /* DARAM5 */
//    GEL_MapAdd(0x00C000,0,0x002000,1,1);    /* DARAM6 */
//    GEL_MapAdd(0x00E000,0,0x002000,1,1);    /* DARAM7 */
//
//    /* SARAM */
//    GEL_MapAdd(0x010000,0,0x002000,1,1);    /* SARAM0 */
//    GEL_MapAdd(0x012000,0,0x002000,1,1);    /* SARAM1 */
//    GEL_MapAdd(0x014000,0,0x002000,1,1);    /* SARAM2 */
//    GEL_MapAdd(0x016000,0,0x002000,1,1);    /* SARAM3 */
//    GEL_MapAdd(0x018000,0,0x002000,1,1);    /* SARAM4 */
//    GEL_MapAdd(0x01A000,0,0x002000,1,1);    /* SARAM5 */
//    GEL_MapAdd(0x01C000,0,0x002000,1,1);    /* SARAM6 */
//    GEL_MapAdd(0x01E000,0,0x002000,1,1);    /* SARAM7 */
//    GEL_MapAdd(0x020000,0,0x002000,1,1);    /* SARAM8 */
//    GEL_MapAdd(0x022000,0,0x002000,1,1);    /* SARAM9 */
//    GEL_MapAdd(0x024000,0,0x002000,1,1);    /* SARAM10 */
//    GEL_MapAdd(0x026000,0,0x002000,1,1);    /* SARAM11 */
//    GEL_MapAdd(0x028000,0,0x002000,1,1);    /* SARAM12 */
//    GEL_MapAdd(0x02A000,0,0x002000,1,1);    /* SARAM13 */
//    GEL_MapAdd(0x02C000,0,0x002000,1,1);    /* SARAM14 */
//    GEL_MapAdd(0x02E000,0,0x002000,1,1);    /* SARAM15 */
//    GEL_MapAdd(0x030000,0,0x002000,1,1);    /* SARAM16 */
//    GEL_MapAdd(0x032000,0,0x002000,1,1);    /* SARAM17 */
//    GEL_MapAdd(0x034000,0,0x002000,1,1);    /* SARAM18 */
//    GEL_MapAdd(0x036000,0,0x002000,1,1);    /* SARAM19 */
//    GEL_MapAdd(0x038000,0,0x002000,1,1);    /* SARAM20 */
//    GEL_MapAdd(0x03A000,0,0x002000,1,1);    /* SARAM21 */
//    GEL_MapAdd(0x03C000,0,0x002000,1,1);    /* SARAM22 */
//    GEL_MapAdd(0x03E000,0,0x002000,1,1);    /* SARAM23 */
//    GEL_MapAdd(0x040000,0,0x002000,1,1);    /* SARAM24 */
//    GEL_MapAdd(0x042000,0,0x002000,1,1);    /* SARAM25 */
//    GEL_MapAdd(0x044000,0,0x002000,1,1);    /* SARAM26 */
//    GEL_MapAdd(0x046000,0,0x002000,1,1);    /* SARAM27 */
//    GEL_MapAdd(0x048000,0,0x002000,1,1);    /* SARAM28 */
//    GEL_MapAdd(0x04A000,0,0x002000,1,1);    /* SARAM29 */
//    GEL_MapAdd(0x04C000,0,0x002000,1,1);    /* SARAM30 */
//    GEL_MapAdd(0x04E000,0,0x002000,1,1);    /* SARAM31 */
//
//    /* External-Memory */
//    GEL_MapAdd(0x050000,0,0x7B0000,1,1);    /* External-SDRAM */
//    GEL_MapAdd(0x800000,0,0x400000,1,1);    /* External-Async */
//    GEL_MapAdd(0xC00000,0,0x200000,1,1);    /* External-Async */
//    GEL_MapAdd(0xE00000,0,0x100000,1,1);    /* External-Async */
//    GEL_MapAdd(0xF00000,0,0x0E0000,1,1);    /* External-Async */
//
//    /* ROM */
//    GEL_MapAdd(0xFE0000,0,0x008000,1,0);    /* SAROM0 */
//    GEL_MapAdd(0xFE8000,0,0x008000,1,0);    /* SAROM1 */
//    GEL_MapAdd(0xFF0000,0,0x008000,1,0);    /* SAROM2 */
//    GEL_MapAdd(0xFF8000,0,0x008000,1,0);    /* SAROM3 */
//
//    /* Data Space */
//
//    /* DARAM */
//    GEL_MapAdd(0x000000,1,0x000060,1,1);    /* MMRs */
//    GEL_MapAdd(0x000060,1,0x000FA0,1,1);    /* DARAM0 */
//    GEL_MapAdd(0x001000,1,0x001000,1,1);    /* DARAM1 */
//    GEL_MapAdd(0x002000,1,0x001000,1,1);    /* DARAM2 */
//    GEL_MapAdd(0x003000,1,0x001000,1,1);    /* DARAM3 */
//    GEL_MapAdd(0x004000,1,0x001000,1,1);    /* DARAM4 */
//    GEL_MapAdd(0x005000,1,0x001000,1,1);    /* DARAM5 */
//    GEL_MapAdd(0x006000,1,0x001000,1,1);    /* DARAM6 */
//    GEL_MapAdd(0x007000,1,0x001000,1,1);    /* DARAM7 */
//
//    /* SARAM */
//    GEL_MapAdd(0x008000,1,0x001000,1,1);    /* SARAM0 */
//    GEL_MapAdd(0x009000,1,0x001000,1,1);    /* SARAM1 */
//    GEL_MapAdd(0x00A000,1,0x001000,1,1);    /* SARAM2 */
//    GEL_MapAdd(0x00B000,1,0x001000,1,1);    /* SARAM3 */
//    GEL_MapAdd(0x00C000,1,0x001000,1,1);    /* SARAM4 */
//    GEL_MapAdd(0x00D000,1,0x001000,1,1);    /* SARAM5 */
//    GEL_MapAdd(0x00E000,1,0x001000,1,1);    /* SARAM6 */
//    GEL_MapAdd(0x00F000,1,0x001000,1,1);    /* SARAM7 */
//    GEL_MapAdd(0x010000,1,0x001000,1,1);    /* SARAM8 */
//    GEL_MapAdd(0x011000,1,0x001000,1,1);    /* SARAM9 */
//    GEL_MapAdd(0x012000,1,0x001000,1,1);    /* SARAM10 */
//    GEL_MapAdd(0x013000,1,0x001000,1,1);    /* SARAM11 */
//    GEL_MapAdd(0x014000,1,0x001000,1,1);    /* SARAM12 */
//    GEL_MapAdd(0x015000,1,0x001000,1,1);    /* SARAM13 */
//    GEL_MapAdd(0x016000,1,0x001000,1,1);    /* SARAM14 */
//    GEL_MapAdd(0x017000,1,0x001000,1,1);    /* SARAM15 */
//    GEL_MapAdd(0x018000,1,0x001000,1,1);    /* SARAM16 */
//    GEL_MapAdd(0x019000,1,0x001000,1,1);    /* SARAM17 */
//    GEL_MapAdd(0x01A000,1,0x001000,1,1);    /* SARAM18 */
//    GEL_MapAdd(0x01B000,1,0x001000,1,1);    /* SARAM19 */
//    GEL_MapAdd(0x01C000,1,0x001000,1,1);    /* SARAM20 */
//    GEL_MapAdd(0x01D000,1,0x001000,1,1);    /* SARAM21 */
//    GEL_MapAdd(0x01E000,1,0x001000,1,1);    /* SARAM22 */
//    GEL_MapAdd(0x01F000,1,0x001000,1,1);    /* SARAM23 */
//    GEL_MapAdd(0x020000,1,0x001000,1,1);    /* SARAM24 */
//    GEL_MapAdd(0x021000,1,0x001000,1,1);    /* SARAM25 */
//    GEL_MapAdd(0x022000,1,0x001000,1,1);    /* SARAM26 */
//    GEL_MapAdd(0x023000,1,0x001000,1,1);    /* SARAM27 */
//    GEL_MapAdd(0x024000,1,0x001000,1,1);    /* SARAM28 */
//    GEL_MapAdd(0x025000,1,0x001000,1,1);    /* SARAM29 */
//    GEL_MapAdd(0x026000,1,0x001000,1,1);    /* SARAM30 */
//    GEL_MapAdd(0x027000,1,0x001000,1,1);    /* SARAM31 */
//
//    /* External-Memory */
//    GEL_MapAdd(0x028000,1,0x3D8000,1,1);    /* External-SDRAM */
//    GEL_MapAdd(0x400000,1,0x200000,1,1);    /* External-Async */
//    GEL_MapAdd(0x600000,1,0x100000,1,1);    /* External-Async */
//    GEL_MapAdd(0x700000,1,0x080000,1,1);    /* External-Async */
//    GEL_MapAdd(0x780000,1,0x070000,1,1);    /* External-Async */
//
//    /* ROM */
//    GEL_MapAdd(0x7F0000,1,0x004000,1,0);    /* SAROM0 */
//    GEL_MapAdd(0x7F4000,1,0x004000,1,0);    /* SAROM1 */
//    GEL_MapAdd(0x7F8000,1,0x004000,1,0);    /* SAROM2 */
//    GEL_MapAdd(0x7FC000,1,0x004000,1,0);    /* SAROM3 */
//
//    /* IO Space */
//    GEL_MapAdd(0x0000,2,0xFFFF,1,1);        /* XPORT */
//}

void Peripheral_Reset()
{
    int i;

    *(volatile ioport Uint16 *)PSRCR = 0x0020;//*(short *)PSRCR@IO = 0x0020;
    *(volatile ioport Uint16 *)PRCR  = 0x00BB;//*(short *)PRCR@IO  = 0x00BB;

    for(i=0;i<0xff;i++);
    *(volatile ioport Uint16 *)IVPD = 0x027F;//*(short *)IVPD@data = 0x027F; // Load interrupt vector pointer
    //GEL_TextOut("Reset Peripherals is complete.\n");
}

void ProgramPLL_100MHz() {
    int i;

    //GEL_TextOut("Configuring PLL (100.00 MHz).\n");
    /* Enable clocks to all peripherals */
    *(volatile ioport Uint16 *)PCGCR1 = 0x0;//*(short *)PCGCR1@IO = 0x0;
    *(volatile ioport Uint16 *)PCGCR2 = 0x0;//*(short *)PCGCR2@IO = 0x0;

    /* Bypass PLL */
    *(volatile ioport Uint16 *)CCR2 = 0x0;//*(short *)CCR2@IO = 0x0;

    /* Set CLR_CNTL = 0 */
    *(volatile ioport Uint16 *)CGCR1 = *(volatile ioport Uint16 *)CGCR1 & 0x7FFF;//*(short *)CGCR1@IO = *(short *)CGCR1@IO & 0x7FFF;

    *(volatile ioport Uint16 *)CGCR1 =  0x8BE8;//*(short *)CGCR1@IO =  0x8BE8;
    *(volatile ioport Uint16 *)CGCR2 =  0x8000;//*(short *)CGCR2@IO =  0x8000;
    *(volatile ioport Uint16 *)CGCR3 =  0x0806;//*(short *)CGCR3@IO =  0x0806;
    *(volatile ioport Uint16 *)CGCR4 =  0x0000;//*(short *)CGCR4@IO =  0x0000; 

    /* Wait for PLL lock */
    for(i=0;i<0x7fff;i++);

    /* Switch to PLL clk */
    *(volatile ioport Uint16 *)CCR2 = 0x1;//*(short *)CCR2@IO = 0x1;

//    GEL_TextOut("PLL Init Done.\n");

}

/* mSDRAM = MT48H4M16LF-8 */
/* Timings based on EMIF clk = 100MHz */

void SDRAM_INIT()
{
    int i;

    /* reset EMIF */
    *(volatile ioport Uint16 *)PRCR = 0x0002;//*(short *)PRCR@IO = 0x0002;
    for(i=0;i<0xff;i++);

    //enable SDRAM clock
    *(volatile ioport Uint16 *)CLKCFGL = 0x0001;//*(short*)CLKCFGL@IO=0x0001;

	/* enable word writes to EMIF regs */
    *(volatile ioport Uint16 *)ESCR = 0;//*(short *)ESCR@IO = 0;

    /* step 1 */
    *(volatile ioport Uint16 *)SDTIMR1 = 0x4710;//*(short *)SDTIMR1@IO = 0x4710;
    *(volatile ioport Uint16 *)SDTIMR2 = 0x3911;//*(short *)SDTIMR2@IO = 0x3911;
    *(volatile ioport Uint16 *)SDSRETR = 0x0007;//*(short *)SDSRETR@IO = 0x0007;

    /* step 2 */
    *(volatile ioport Uint16 *)SDRCR = 0x04E3;//*(short *)SDRCR@IO = 0x04E3;

    /* step 3 */
    *(volatile ioport Uint16 *)SDCR1 = 0x4720;//*(short *)SDCR1@IO = 0x4720;
    *(volatile ioport Uint16 *)SDCR2 = 0x0001;//*(short *)SDCR2@IO = 0x0001;

    /* step 4 */
    for(i=0;i<0xff;i++);

    /* step 5 */
    *(volatile ioport Uint16 *)SDRCR = 0x061A;//*(short *)SDRCR@IO = 0x061A;

    //GEL_TextOut("SDRAM Initialization Complete.\n");
}

并在main函数的开头调用

OnRestart();

OnTargetConnect();

调试结果正常,能够实现USB MSC功能,通过PC读写开发板上的文件。

生成bin文件下载到开发板上,运行不正常,PC无法识别USB设备。

  • 生成bin文件步骤如下:

    双击上图中的cmd.bat文件即生成EVM_Sample.bin文件。

    cmd.bat文件内容为:

    hex55 evm5515.cmd

    EVM5515.cmd文件内容为:

    -boot
    -v5505
    -serial8
    -b
    -o EVM_Sample.bin
    EVM_Sample.out

  • 建议用仿真器跟一下boot过程,看是代码没有加载进来还是加载后运行错误。
    processors.wiki.ti.com/.../Debugging_Boot_Issues
  • 你好!

    你发的这个链接上的操作有点复杂,我不确定自己都做对了没有。

    CCS Crashing when Connecting这个步骤不知道怎么弄。

    能不能简单一点,因为开发板是EVM5515,例程也是TI官方的,能不能帮我验证这个例程,怎么才能获得能正确实现USB MSC功能的.bin文件。

    我用前面描述的方法,在HID例程上能够正常实现USB鼠标的功能。

    另外,我清空GEL文件的内容,即GEL文件实际上没有作任何操作,然后在C中实现GEL中的函数。

    在调试模式下,能够正常实现USB MSC功能,生成bin文件下载后还是不正常。

    我们产品的主要功能已经实现了,现在还差通过PC的USB接口读取TF卡的功能。

    我已经尝试了很多次,都没有成功。不知道问题在哪里。

    所以恳请帮帮忙,谢谢!

  • 检查一下初始化代码里是否将相应的时钟重新使能了。请见下面截图说明,芯片的ROM bootloader启动后将所有时钟都关掉了,所以需要用户在在自已的main里重新使能。 

  • user5287758 说:
    CCS Crashing when Connecting这个步骤不知道怎么弄。

    这个跟你的问题无关。

    如果烧写的文件有问题导致连不上仿真器,可以在上电前将flash的CS与3V3短接,在上电后就可以松开,以让bootloader跳过从flash读取代码的过程,然后再连接仿真器,将flash擦掉,烧写正确的bin文件。

  • 你好!

    例程中,main()函数调用了CSL_mscTest()函数,该函数的前两行就是使能所有外设时钟

    CSL_Status CSL_mscTest(void)
    {
    	CSL_Status      status;
    	volatile Uint32 looper;
    
    	*(ioport volatile int *)0x1c02 = 0x0;
    	*(ioport volatile int *)0x1c03 = 0x0;
    ......
    ......
    }

    在GEL文件中,ProgramPLL_100MHz()也对这两个寄存器进行了操作,我在evm5515.c中也实现了相同的操作。

  • 你好!
    这个问题能解决吗?我发了两个类似的贴了,都是无果而终。


    因为开发板是EVM5515,例程也是TI官方的,能不能帮我验证这个例程,怎么才能获得能正确实现USB MSC功能的.bin文件。


    能否让你们FAE工程师帮我验证一下,或者加我的QQ(1957056403阿德(陆**))协助解决?

    谢谢!
  • 你好!
    这个问题能解决吗?我发了两个类似的贴了,都是无果而终。


    因为开发板是EVM5515,例程也是TI官方的,能不能帮我验证这个例程,怎么才能获得能正确实现USB MSC功能的.bin文件。


    能否让你们FAE工程师帮我验证一下,或者加我的QQ(1957056403阿德(陆**))协助解决?

    谢谢!
  • 【最终解决方法】:程序原来使用.tcf对中断函数mmcsd0_isr()、USBisr()等进行配置绑定,改为使用IRQ_enable()、IRQ_plug()等函数进行配置。