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.

EVMK2H使用DSP NAND Boot的問題



大家好,

在嘗試將EVMK2HX設定為DSP NAND boot時遇到問題,以下是我的步驟,請協助看一下是否有問題,

1. 撰寫一個利用GPIO控制LED閃爍的程式(利用K2_STK_DSP_v1.1中的GPIO專案修改),已於CCS驗證功能正常。(此時EVMK2HX的BootMode設定為DSP No-Boot,DIP switch為0001)

 2. 將前一步驟產生的GPIO.out檔案轉換成GPIO.bin檔案,轉換的方式是參考以下網站資料:

        https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/354771/1253899#1253899

 3. 透過mscdk底下的NAND writer進行燒錄,步驟是參考 \mcsdk_bios_3_01_04_07\tools\writer\nand\docs\README.txt 檔案,

        由輸出結果來看,似乎有成功寫入。 

4. 將EVM板斷電,調整DIP switch為1000,此時EVMK2HX的BootMode為DSP NAND。

 5. 將EVM上電,LED不會閃爍。

 

以上步驟是否有問題呢?

  • 你的代码的cmd文件是否都用了全局地址而不是局部地址。

  • 跟您確認一下,您的意思是指:我必須要使用global address嗎?

    底下是我使用的cmd文件,看起來應該是local address

    -heap 0x800
    -stack 0x1000

    MEMORY
    {
    /* Local L2, 0.5~1MB*/
    VECTORS: o = 0x00800000 l = 0x00000200
    LL2_RW_DATA: o = 0x00800200 l = 0x3FE00

    /* MSMC RAM 2MB*/
    MSMC_RAM: o = 0x0C000000 l = 0x00200000

    /* External DDR3, upto 2GB per core */
    DDR3_CODE: o = 0x80000000 l = 0x01000000 /*set memory protection attribitue as execution only*/
    DDR3_R_DATA: o = 0x81000000 l = 0x01000000 /*set memory protection attribitue as read only*/
    DDR3_RW_DATA: o = 0x82000000 l = 0x06000000 /*set memory protection attribitue as read/write*/
    }

    SECTIONS
    {
    vecs > VECTORS

    .text > LL2_RW_DATA
    .cinit > LL2_RW_DATA
    .const > LL2_RW_DATA
    .switch > LL2_RW_DATA

    .stack > LL2_RW_DATA
    GROUP
    {
    .neardata
    .rodata
    .bss
    } > LL2_RW_DATA
    .far > LL2_RW_DATA
    .fardata > LL2_RW_DATA
    .cio > LL2_RW_DATA
    .sysmem > LL2_RW_DATA
    }

  • 是的,启动必须使用全局地址,举个例子,core 0和core 1都使用0x00800000,那么bootloader应该加载到哪个核? 

  • Allen Yin 说:

    是的,启动必须使用全局地址,举个例子,core 0和core 1都使用0x00800000,那么bootloader应该加载到哪个核? 

    我嘗試將memory address修改為global address,但結果仍然一樣,設定為DSP NAND Boot後,LED燈不會閃爍,

    我修改的地方如下:

    VECTORS: o = 0x10800000 l = 0x00000200 

    LL2_RW_DATA: o = 0x10800200 l = 0x3FE00

    請問是否有錯誤呢?或是還有地方遺漏需要修改的?

  • JW 说:

    是的,启动必须使用全局地址,举个例子,core 0和core 1都使用0x00800000,那么bootloader应该加载到哪个核? 

    我嘗試將memory address修改為global address,但結果仍然一樣,設定為DSP NAND Boot後,LED燈不會閃爍,

    我修改的地方如下:

    VECTORS: o = 0x10800000 l = 0x00000200 

    LL2_RW_DATA: o = 0x10800200 l = 0x3FE00

    請問是否有錯誤呢?或是還有地方遺漏需要修改的?

    [/quote]

     

    附上我使用的Project,主要是從K2_STK_DSP_v1.1中的GPIO範例做修改,

    Board: EVMK2HX Rev. 4.0

    CCS: 6.2

    MCSDK: mcsdk_bios_3_01_04_07

    workspace_v6_2.7z
  • 你可以先用一个简单的代码,在启动以后连上JTAG看看代码是否正确的load到内存,PC指针跑到什么位置?

    另外,K2H上ARM优先启动用得比较多,DSP一般是作为从核启动的,而且ARM上的uboot和linux有成熟的方案,为何不考虑先从ARM启动?

  • Allen Yin 说:

    你可以先用一个简单的代码,在启动以后连上JTAG看看代码是否正确的load到内存,PC指针跑到什么位置?

    另外,K2H上ARM优先启动用得比较多,DSP一般是作为从核启动的,而且ARM上的uboot和linux有成熟的方案,为何不考虑先从ARM启动?

    1.我利用原先的GPIO程式,在Boot Mode為DSP No-boot與DSP NAND Boot兩種模式下,PC都指到0x10808758

    2. 會要使用DSP啟動的原因是,先前有一個專案是使用Keystone I 6678所開發的,現在因為要改使用Keystone II的處理器,

         而目前ARM的功能暫時不需要(linux方面我們也不熟悉),所以才會想要利用單純DSP做啟動(BOOT)。

  • 从你的现象看,已经跑进main函数,启动已经完成了,还是应该检查一下代码部分是不是有问题。