5735|10

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教烧写系统到开发板的问题 [复制链接]

大家好,我在往开发板里烧写NK文件的时候在到达99%的时候,超级终端出现了:
OEMVerifyMemory FAILED
!OEMVERIFYMEMORY: Invalid image
然后烧写进度就停留在了99%,请问是什么错误啊?应该如何修改呢?

最新回复

还有人帮我确认一下我的说法吗?  详情 回复 发表于 2009-10-21 10:17
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应该是你的bsp 和 bootloader 不配套的问题 找到oemverifymemoty 函数进行修改
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 mabugang 的回复:
应该是你的bsp 和 bootloader 不配套的问题 找到oemverifymemoty 函数进行修改

这个函数在哪里呢?我自己定制系统的时候编译出了NK.bin,EBoot.nb0,chain.bin,chain.1st,EXT.bin,
但是没有编译出nboot.bin 我用的nboot.bin是在别地方考过来的,是不是也没有影响啊。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个问题没有人遇到过吗?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
看你下你的bib里面和loader.h中的内存分配,然后对应的oemverifymem中就ok了
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 guopeixin 的回复:
看你下你的bib里面和loader.h中的内存分配,然后对应的oemverifymem中就ok了

C:\WINCE500\PLATFORM\SMDK2410\SRC\BOOTLOADER\EBOOT目录下的loader.h的内容如下:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

#ifndef _LOADER_H_
#define _LOADER_H_

#include

// Bootloader version.
//
#define EBOOT_VERSION_MAJOR     2
#define EBOOT_VERSION_MINOR     5


//------------------------------------------------------------------------------
//
//  Section Name:   Memory Configuration
//  Description.:   The constants defining memory layout below must match
//                  those defined in the .bib files.
//
//------------------------------------------------------------------------------

#define CACHED_TO_UNCACHED_OFFSET   0x20000000

#define OS_RAM_IMAGE_BASE           0x80040000
#define OS_RAM_IMAGE_SIZE           0x01E00000


#define EBOOT_RAM_IMAGE_BASE        0x8c038000
#define AMD_FLASH_START             (UINT32)OALPAtoVA(BSP_BASE_REG_PA_AM29LV800, FALSE)
#define AMD_FLASH_LENGTH            0x00100000                                      // Size of AMD flash part.
#define EBOOT_STORE_OFFSET          0                                               // Physical flash address byte offset
#define EBOOT_STORE_ADDRESS         (AMD_FLASH_START + EBOOT_STORE_OFFSET)          // Physical flash address where eboot
#define EBOOT_STORE_MAX_LENGTH      0x00040000                                      // Maximum size of eboot in flash.
#define EBOOT_CONFIG_OFFSET         0x000F0000                                      // Physical flash address byte offset
#define EBOOT_CONFIG_ADDRESS        (AMD_FLASH_START + EBOOT_SETTINGS_OFFSET)       // Physical flash address where eboot

//------------------------------------------------------------------------------
//
//  Define Name:    RAM_START/END
//  Description:    Defines the start/end address of cached RAM.
//
//------------------------------------------------------------------------------

#define RAM_START                   (0x80000000)
#define RAM_SIZE                    (32 * 1024 * 1024)              // 32MB
#define RAM_END                     (RAM_START + RAM_SIZE - 1)

//------------------------------------------------------------------------------
//
//  Define Name:    FLASH_START/END
//  Description:    Defines the start/end address of cached FLASH.
//
//------------------------------------------------------------------------------

#define FLASH_START                 (0x92000000)
#define FLASH_SIZE                  (AMD_FLASH_LENGTH)
#define FLASH_END                   (RAM_START + RAM_SIZE - 1)
                                                                                    // settings are stored.
//------------------------------------------------------------------------------
//
//  Define Name:    FLASH_EBOOT_START/END
//  Description:    Defines start/end address of EBOOT image. Required for
//                                        setting the g_ImageType.
//
//------------------------------------------------------------------------------

#define FLASH_EBOOT_START           (UINT32)OALPAtoVA(BSP_BASE_REG_PA_AM29LV800, TRUE)
#define FLASH_EBOOT_END             (FLASH_EBOOT_START + EBOOT_STORE_MAX_LENGTH - 1)


#define FILE_CACHE_START            (0x8c200000 | CACHED_TO_UNCACHED_OFFSET)        // Start of file cache (temporary store
                                                                                    // for flash images).

// Driver globals pointer (parameter sharing memory used by bootloader and OS).
//
#define pBSPArgs                    ((BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START)


// Platform "BOOTME" root name.
//
#define PLATFORM_STRING         "SMDK2410"

// Bootloader configuration parameters (stored in the bootloader parameter partition in NAND flash).
//
typedef struct _NAND_BOOTLOADER_PARAMS_
{
    ULONG  Signature;           // Config signature (used to validate).
    USHORT VerMajor;            // Config major version.
    USHORT VerMinor;            // Config minor version.
    ULONG  StoreOffset;         // Region storage location (BINFS partition offset).
    ULONG  RunAddress;          // Region RAM address (loader copies region to this address).
    ULONG  Length;              // Region length (in bytes).
    ULONG  LaunchAddress;       // Region launch address.

} NAND_BOOTLOADER_PARAMS, *PNAND_BOOTLOADER_PARAMS;

// Download image type (used to decide amongst storage options).
//
typedef enum _IMAGE_TYPE_
{
    IMAGE_LOADER,
    IMAGE_OS_BIN,
    IMAGE_OS_NB0
} IMAGE_TYPE, *PIMAGE_TYPE;

// Loader function prototypes.
//
BOOL InitEthDevice(PBOOT_CFG pBootCfg);
int OEMReadDebugByte(void);
BOOL OEMVerifyMemory(DWORD dwStartAddr, DWORD dwLength);
BOOL AM29LV800_WriteFlash(UINT32 dwOffset, PBYTE pData, UINT32 dwLength);
BOOL AM29LV800_ReadFlash(UINT32 dwOffset, PBYTE pData, UINT32 dwLength);
BOOL AM29LV800_EraseFlash(UINT32 dwOffset, UINT32 dwLength);
BOOL AM29LV800_Init(UINT32 dwAddr);
void Launch(DWORD dwLaunchAddr);
PVOID PCMCIA_Init(void);
BOOL WriteDiskImageToSmartMedia(DWORD dwImageStart, DWORD dwImageLength, BOOT_CFG *pBootCfg);
BOOL FormatSmartMedia(void);
void OEMWriteDebugLED(WORD wIndex, DWORD dwPattern);

#endif  // _LOADER_H_.

C:\WINCE500\PLATFORM\SMDK2410\SRC\BOOTLOADER\EBOOT目录下的的main.c中看到了OEMVerifyMemory函数内容:
BOOL OEMVerifyMemory( DWORD dwStartAddr, DWORD dwLength )
{
    BOOL    rc;                 // return code
    DWORD   Addr1;              // starting address
    DWORD   Addr2;              // ending   address

    // Convert address to a cached address.
    //
    dwStartAddr &= ~CACHED_TO_UNCACHED_OFFSET;

    // Setup address range for comparison
    //
    Addr1 = dwStartAddr;
    Addr2 = Addr1 + (dwLength - 1);

    EdbgOutputDebugString( "****** OEMVerifyMemory Checking Range [ 0x%x ==> 0x%x ]\r\n", Addr1, Addr2 );

    // Validate the bootloader range to set the g_ImageType. The bootloader address
    // range is a subset of the whole flash range. This is required as the original
    // function set the image type based on this. Therefore this check is done before
    // the whole FLASH range is checked.

    if( (Addr1 >= FLASH_EBOOT_START) && (Addr2 <= FLASH_EBOOT_END) )
    {
        EdbgOutputDebugString("****** bootloader address ****** \r\n\r\n");

        // Set the image type

        g_ImageType = IMAGE_LOADER;
        rc = TRUE;
    }
    else if( (Addr1 >= FLASH_START) && (Addr1 <= FLASH_END) )
    {
        EdbgOutputDebugString("****** FLASH address ****** \r\n\r\n");

        rc = TRUE;
    }
    else if( (Addr1 >= RAM_START) && (Addr2 <= RAM_END ) )
    {
        EdbgOutputDebugString("****** RAM address ****** \r\n\r\n");

        rc = TRUE;
    }
    else
    {
        EdbgOutputDebugString("****** OEMVerifyMemory FAILED - Invalid Memory Area ****** \r\n\r\n");

        rc = FALSE;
    }

    // Indicate status

    return( rc );
}


我需要怎么修改啊?请高手指点。
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

7
 
1 #define FLASH_START                (0x92000000)
#define FLASH_SIZE                  (AMD_FLASH_LENGTH)
#define FLASH_END                  (RAM_START + RAM_SIZE - 1)
FLASH_END小于FLASH_START,会影响OEMVerifyMemory中对image类型的判别
2     else if( (Addr1 >= RAM_START) && (Addr2 <= RAM_END ) )
    {
        EdbgOutputDebugString("****** RAM address ****** \r\n\r\n");

        rc = TRUE;
    }

这一段应该是判断你nk image的位置,缺了一个g_ImageType的赋值吧
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

8
 
看了一下,觉得楼上说的是正解
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 6 楼 guopeixin 的回复:
1 #define FLASH_START? ? ? ? ? ? ? ? (0x92000000)
#define FLASH_SIZE? ? ? ? ? ? ? ? ? (AMD_FLASH_LENGTH)
#define FLASH_END? ? ? ? ? ? ? ? ? (RAM_START + RAM_SIZE - 1)
FLASH_END小于FLASH_START,会影响OEMVerifyMemory中对image类型的判别
2? ? else if( (Addr1 >= RAM_START) && (Addr2 <= RAM_END ) )
? ? {
? ? ? ? EdbgOutputDebugString("****** RAM address ****** \r\n\r\n");

? ? ? ? rc = TRUE;
? ? }

这一段应该是判断你nk image的位置,缺了一个g_ImageType的赋值吧


你的意思是说将#define FLASH_END                  (RAM_START + RAM_SIZE - 1) 改成
#define FLASH_END                  (FLASH_START + FLASH_SIZE - 1) 吗?
并且在
        EdbgOutputDebugString("****** RAM address ****** \r\n\r\n");

        rc = TRUE;
之间加上g_ImageType = IMAGE_LOADER;吗?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 
我在烧写的时候已经显示了
****** RAM address ******内容,但是下载到99%的时候,就会出现OEMVerifyMemory FAILED - Invalid Memory Area内容了,不知道这里else if 语句执行完以后,为什么还会执行else的语句。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

11
 
还有人帮我确认一下我的说法吗?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表