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.

OMAPL138程序固化NAND flash 启动

Other Parts Discussed in Thread: OMAP-L138

前提:我用创龙给的nandwrite.out固化例程到开发板是没问题,但那是8位bus,现在想用16位的。

之前我也发过帖子  e2echina.ti.com/.../163923

现在遇到的问题和我找到的另一个帖子比较像e2echina.ti.com/.../344013

我也是在OMAP-L138_FlashAndBootUtils_2_40文件夹的NANDWriter下找了个nandwriter文件,加上几个.c和.h组合成的一个烧写工程。

板子用的创龙的开发板做bus=8的实验,其他都没改变,但就是一直停留在Starting OMAP-L138 NANDWriter.    不往下执行了。

debug一步一步跟踪后,发现执行到这返回的是NULL。

if (DEVICE_AsyncMemInit(hAsyncMemInfo->interfaceNum) != E_PASS)
{
return NULL;
}

再往下执行停留在这个if里面了。陷入死循环

// Send reset command to NAND
if ( NAND_reset(hNandInfo) != E_PASS )
return NULL;

我也看过其他解决方法,说是改GEL文件,但是没看出来在哪改,有没有大神帮忙解决下。

或者谁有16位的nandwrite.out我项目上用的是芯片是MT29F4G16ABADAH4:D

  • nandwriter.c里有NAND位宽的定义。


    #define NANDWIDTH_16
    //#define NANDWIDTH_8

    另外gel文件里要确定初始化EMIFA为NAND pinmux及模式。把这个函数加到ontargetconnect()里调用,或者从CCS菜单scripts里点击 EMIFA_NAND_PINMUX进行初始化:

    hotmenu EMIFA_NAND_PINMUX() {
    PSC0_LPSC_enable(0, LPSC_EMIFA);
    PINMUX7 = (PINMUX7 & ~0x00FF0FF0) | 0x00110110;
    PINMUX9 = 0x11111111;
    PINMUX12 = (PINMUX12 & ~0x0FF00000) | 0x01100000;
    EMIFA_ACFG2 |= 0x1; // 16-bit
    EMIFA_NANDFCR = (EMIFA_NANDFCR & ~0x30) | 0x12;

    // Set OE Low
    PINMUX6 = (PINMUX6 & ~0x000000F0) | 0x00000080;
    GPIO_BANK23_DIR = (GPIO_BANK23_DIR & ~(1 << 6));
    GPIO_BANK23_CLR = (1 << 6);

    GEL_TextOut("\tEMIFA Pins Configured for NAND.\n","Output",1,1,1);
    GEL_TextOut("\t---------------------------------------------\n","Output",1,1,1);
    }

  • 首先感谢回复:

    我在试验中把这个函数加到ontargetconnect()里调用了

    OnTargetConnect( )
    {
    EMIFA_NAND_PINMUX();

    GEL_TextOut("\tEMIFA Pins Configured for NAND.\n","Output",1,1,1);
    GEL_TextOut("\t---------------------------------------------\n","Output",1,1,1);

    CPU_PLL_PSC_DDR_Init();

    }

    menuitem "Initiation"

    hotmenu EMIFA_NAND_PINMUX()
    {
    PSC0_LPSC_enable(0, LPSC_EMIFA);
    PINMUX7 = (PINMUX7 & ~0x00FF0FF0) | 0x00110110;
    PINMUX9 = 0x11111111;
    PINMUX12 = (PINMUX12 & ~0x0FF00000) | 0x01100000;
    EMIFA_ACFG2|=0x1; // 16-bit
    EMIFA_NANDFCR = (EMIFA_NANDFCR & ~0x30) | 0x12;
    // Set OE Low
    PINMUX6 = (PINMUX6 & ~0x000000F0) | 0x00000080;
    GPIO_BANK23_DIR = (GPIO_BANK23_DIR & ~(1 << 6));
    GPIO_BANK23_CLR = (1 << 6);
    }

    也能connect target 成功,下载了您刚发的.out文件,还是没固化成功。

    [ARM9_0] Starting OMAP-L138 NANDWriter.
    Do you want to global erase NAND flash?y
    Enter the binary AIS file name to flash (enter 'none' to skip) :
    E:\OMAP-L138\gurde\bootloader\upp16.ais
    Number of blocks needed for data: 0x1
    Writing image data to block 0x1, page 0x0
    Verify failed. Marking block as bad...
    Writing image data to block 0x2, page 0x0
    Verify failed. Marking block as bad...

    现在想问一下:

    我看了文档,EMIFA_ACFG2|=0x1; // 16-bit这块应该是EMIFA_ACFG3吧,都是用EMA_CSn_3的

    我改过来之后,用OMAP-L138_FlashAndBootUtils_2_40生成8位的.out文件在开发板上试了试,还是没效果。

    您看还有啥错误没。我用各种方法都没试成功。

    想换OMAP-L138_FlashAndBootUtils_2_40串口的方式,发现更难改。。。

  • 想换OMAP-L138_FlashAndBootUtils_2_40串口的方式,发现更难改

    不是现成的吗?你是说要在cygwin下编译麻烦?

  • user5324036 说:
    PINMUX7 = (PINMUX7 & ~0x00FF0FF0) | 0x00110110;
    PINMUX9 = 0x11111111;
    PINMUX12 = (PINMUX12 & ~0x0FF00000) | 0x01100000;
    EMIFA_ACFG2|=0x1; // 16-bit
    EMIFA_NANDFCR = (EMIFA_NANDFCR & ~0x30) | 0x12;

    这时忘了加上EMIF_D[8-15]的pinmux配置了。应该按下面这样配置。

    PINMU7=0x00110110;

    PINMUX8=0x11111111;

    PINMUX9=0x11111111;

    PINMUX12 = (PINMUX12 & ~0x0FF00000) | 0x01100000;

    EMIFA_ACFG3 |=0x1; // 16-bit

    EMIFA_NANDFCR = (EMIFA_NANDFCR & ~0x30) | 0x12;

  • Tony Tang
    多谢了,现在程序能固化到NAND FLASH了。
    Number of blocks needed for data: 0x1
    Writing image data to block 0x1, page 0x0
    Writing image data to block 0x1, page 0x1
    Writing image data to block 0x1, page 0x2
    Writing image data to block 0x1, page 0x3
    Writing image data to block 0x1, page 0x4
    Writing image data to block 0x1, page 0x5
    Writing image data to block 0x1, page 0x6
    Writing image data to block 0x1, page 0x7
    Writing image data to block 0x1, page 0x8

    NAND boot preparation was successful!


    新问题是:我在仿真的时候都啥没问题。但是固化后,我用NAND FLASH模式启动后,没效果

    实验用到upp,uart串口,iic,EPROM。通过串口接收命令然后通过upp转发到fpga的。中间的参数变量通过iic放在EPROM里存储。

    不知是哪一步出问题了(串口没启动?)。固化后程序没跑起来。