8720|36

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CE5.0系统从NAND启动,系统起不来,串口显示“stepldr ldr” [复制链接]

环境:64M NAND+64MSDRAM  WINCE 5.0
我将LOGO转化为二进制文件,通过JTAG烧写到NAND的第9~15块,其中(第0块为stepldr,1为TOC,2~8为EBOOT,第20开始是MBR),系统能正常显示并起来,但是当我插上短路帽从NAND启动的时候,发现系统起不来,串口显示“stepldr ldr”


于是我重新更新 stepldr.bin,系统能起来,但是我发现NAND的第9~15块的LOGO的数据没了??奇怪 怎么没了呢?


最新回复

我是不是该结贴了呢?呵呵~谢谢Veabol~sunrain_hjb~haiou_arm   呵呵~谢谢  详情 回复 发表于 2010-4-6 19:53
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
正常情况下stepldr显示的内容不止stepldr ldr这么一点吧?
怀疑还是写LOGO的时候对stepldr产生了影响
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢前辈指点,正常是不止这么一点。

恩~应该是吧~但是目前无从入手~呵呵
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
烧LOGO是用什么工具来完成的?这个工具能不能读取NAND中的数据,如果可以的话在烧之前和烧之后分别读一下BLOCK0,对比一下
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

5
 
估计是你写LOGO的时候,把BOOT给冲掉了,再烧BOOT又把LOGO给冲掉。

建议再检查一下烧写BOOT和LOGO的相关代码。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 veabol 的回复:
烧LOGO是用什么工具来完成的?这个工具能不能读取NAND中的数据,如果可以的话在烧之前和烧之后分别读一下BLOCK0,对比一下

使用USB—JTAG烧的,然后读了下烧写前后的数据,确定已经烧录完整
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 sunrain_hjb 的回复:
估计是你写LOGO的时候,把BOOT给冲掉了,再烧BOOT又把LOGO给冲掉。

建议再检查一下烧写BOOT和LOGO的相关代码。


我的LOADER.H中
// On disk structures for NAND bootloaders...
//

//
// OEM Reserved (Nand) Blocks for TOC and various bootloaders
//

// NAND Boot (loads into SteppingStone) @ Block 0
#define NBOOT_BLOCK                 0
#define NBOOT_BLOCK_SIZE            1
#define NBOOT_SECTOR                BLOCK_TO_SECTOR(NBOOT_BLOCK)

// TOC @ Block 1
#define TOC_BLOCK                   1
#define TOC_BLOCK_SIZE              1
#define TOC_SECTOR                  BLOCK_TO_SECTOR(TOC_BLOCK)

// Eboot @ Block 2
#define EBOOT_BLOCK                 2
#define EBOOT_SECTOR_SIZE           FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)
#define EBOOT_BLOCK_SIZE            8//SECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)
#define EBOOT_SECTOR                BLOCK_TO_SECTOR(EBOOT_BLOCK)

//logo @ Block 8~ added for logo
#define LOGO_BLOCK                   9
#define LOGO_BLOCK_SIZE              20    //16K*10=160k
#define LOGO_SECTOR                 BLOCK_TO_SECTOR(LOGO_BLOCK)

#define RESERVED_BOOT_BLOCKS        (NBOOT_BLOCK_SIZE +TOC_BLOCK_SIZE +EBOOT_BLOCK_SIZE+LOGO_BLOCK_SIZE)
      
// Images start after OEM Reserved Blocks
#define IMAGE_START_BLOCK           RESERVED_BOOT_BLOCKS
#define IMAGE_START_SECTOR          BLOCK_TO_SECTOR(IMAGE_START_BLOCK)

但是有个问题,我没有对预留的#define LOGO_BLOCK_SIZE              20    //16K*10=160k  BLOCK做reserved|readonly
是不是这个原因?呵呵~
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
有特殊功能的BLOCK应该是需要RESERVED的,
需要注意在每次烧写不同部分时,不能影响到前后的BLOCK。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 5 楼 lightsoure 的回复:
引用 3 楼 veabol 的回复:
烧LOGO是用什么工具来完成的?这个工具能不能读取NAND中的数据,如果可以的话在烧之前和烧之后分别读一下BLOCK0,对比一下

使用USB—JTAG烧的,然后读了下烧写前后的数据,确定已经烧录完整

我的意思是烧写LOGO前后看一下BLOCK0的stepldr有没有变化
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

10
 
1,正常烧录系统映像,不烧录LOGO,系统正常起来了;
2,拔掉短路帽,烧录LOGO到9~15块~,查看stepldr,发现没有变化,插上短路帽,系统起不来了,串口显示“Step ldr”

3,查看stepldr,发现没有变化,LOGO块数据也没丢失;
4,再次更新stepldr和EBOOT.BIN,系统起来,查看LOGO,发现全为0XFF

应该是烧录stepldr和EBOOT.BIN会冲掉LOGO数据   

奇怪了哦?怎么会呢?不解。。。。。


 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

11
 
会不会和内存的分配有关:
楼主对logo和Eboot的eboot.bib文件是怎么配置的?它俩有没有重叠啊?
重点看下你的eboot.bib文件——只是怀疑啊
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 
"stepldr" 是Nboot输出的,可见Nboot找不到eboot了……
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

13
 
我在EBOOT.CPP中添加的读NAND函数:

我的LOGO是320*240通过工具下载
BOOL DisplayLOGO(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr) //added by ….
{
unsigned int * pFB32 = (unsigned int *)IMAGE_FRAMEBUFFER_UA_BASE;
unsigned int * a = pFB32;
unsigned int * p=NULL;
SectorInfo si;

DWORD dwBlock,dwNumBlocks;
dwBlock = LOGO_BLOCK;
g_FlashInfo.wDataBytesPerSector=512;   
g_FlashInfo.wSectorsPerBlock=32;
OALMSG(TRUE, (TEXT("dwBlock(0x%x) X "), dwBlock));

OALMSG(TRUE, (TEXT("dwImageLength = 0x%x \r\n"), dwImageLength));

dwNumBlocks = (dwImageLength / (g_FlashInfo.wDataBytesPerSector*g_FlashInfo.wSectorsPerBlock)) + (dwImageLength%(g_FlashInfo.wDataBytesPerSector*g_FlashInfo.wSectorsPerBlock) ? 1: 0);
OALMSG(TRUE, (TEXT("dwNumBlocks = 0x%x \r\n"), dwNumBlocks));
while (dwNumBlocks--)
{
OALMSG(TRUE, (TEXT("dwBlock(0x%x) X "), dwBlock));
OALMSG(TRUE, (TEXT("g_FlashInfo.wSectorsPerBlock(0x%x)"), g_FlashInfo.wSectorsPerBlock));
OALMSG(TRUE, (TEXT(" = 0x%x \r\n"), dwBlock*g_FlashInfo.wSectorsPerBlock));

//FMD_ReadSector(dwBlock*g_FlashInfo.wSectorsPerBlock, NULL, &si, 1);

FMD_ReadSector(dwBlock * g_FlashInfo.wSectorsPerBlock , NULL, &si, 1); 查坏块,,
//Stepldr & Eboot image in nand flash
//block mark as BLOCK_STATUS_RESERVED & BLOCK_STATUS_READONLY & BLOCK_STATUS_BAD
if ((si.bBadBlock == 0x0) && (si.bOEMReserved !=3 ))
{
++dwBlock;
++dwNumBlocks; // Compensate for fact that we didn't write any blocks.
continue;
}
//BOOL ReadBlock(DWORD dwBlock, LPBYTE pbBlock, PSectorInfo pSectorInfoTable);
//if (!ReadBlock(dwBlock, (LPBYTE)p, g_pSectorInfoBuf)),读取NAND数据
if (!ReadBlock(dwBlock, (LPBYTE)p, g_pSectorInfoBuf))
{
OALMSG(OAL_ERROR, (TEXT("WriteData: failed to read block (0x%x).\r\n"), dwBlock));
return(FALSE);
}
else
OALMSG(TRUE, (TEXT("(LPBYTE)p=0x%x \r\n"), (LPBYTE)p));
//memcpy(a, (unsigned int*)p, g_FlashInfo.dwBytesPerBlock);
memcpy(a, (unsigned int*)p, g_FlashInfo.dwBytesPerBlock); 直接拷贝给显存
a += g_FlashInfo.dwBytesPerBlock/4;
++dwBlock;

}
return TRUE;
}
其中IMAGE_FRAMEBUFFER_UA_BASE我定义为
define IMAGE_FRAMEBUFFER_UA_BASE       0xA0100000

eboot.bib中内容:
MEMORY
;   Name     Start     Size      Type
;   -------  --------  --------  ----
    ARGS     80020800  00000800  RESERVED
    RAM      80026000  00006000  RAM   
    STACK    8002c000  00004000  RESERVED
    EBOOT    80038000  00040000  RAMIMAGE
    BINFS    80080000  00021000  RESERVED
   

; Area used to cache nk.bin while programming flash
    FLSCACHE 80200000  01400000  RESERVED
DISPLAY  80100000  00100000  RESERVED
我没去动他,因为我直接把数据拷贝到了显存
LOADER.H的内容上面的帖子已经贴出来了

其它就是main.c中初始化LCD,和NANDFLASH,然后其它的我基本没去动
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

14
 
这个读NAND是有问题的:1,由于“unsigned int * p=NULL“;所以读出来的数据全都不是实际的数据;2,可能是内存分配问题,unsigned int * p=NULL;改为unsigned int * p,死在FMD_ReadSector(dwBlock*g_FlashInfo.wSectorsPerBlock, NULL, &si, 1);中 ~~~~

哎 烦了
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

15
 
问题貌似比较复杂啊!
先mark一下!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 11 楼 haiou_arm 的回复:
"stepldr" 是Nboot输出的,可见Nboot找不到eboot了……


这个有道理,现在主要问题还是:
拔掉短路帽,烧录LOGO到9~15块~,查看stepldr,发现没有变化,插上短路帽,系统起不来了,串口显示“Step ldr”这个可不肯能是TOC问题,因为我在下载EBOOT.NB0的时候串口打印了TOC的错误(明天我在查查)
   // Try to retrieve TOC (and Boot config) from boot media
    //
    if ( !TOC_Read( ) )
    {
        // use default settings
        TOC_Init(DEFAULT_IMAGE_DESCRIPTOR, (IMAGE_TYPE_RAMIMAGE), 0, 0, 0);
    }
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 lightsoure 的回复:
引用 11 楼 haiou_arm 的回复:
"stepldr" 是Nboot输出的,可见Nboot找不到eboot了……


这个有道理,现在主要问题还是:
拔掉短路帽,烧录LOGO到9~15块~,查看stepldr,发现没有变化,插上短路帽,系统起不来了,串口显示“Step ldr”这个可不肯能是TOC问题,因为我在下载EBOOT.NB0的时候串口打印了TOC的错误(明天我在查查)
……

所以问你正常情况下Stepldr是否只有Step ldr这点输出信息,如果是的话就说明很有可能读取EBOOT的数据不对。
如果Stepldr正常情况下还有其它信息输出就说明Stepldr本身出了问题,还没到EBOOT阶段。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

18
 
你没有将eboot.bib的内容贴完整,还是不知道你的64M到底是怎么细分的。
建议:
1、不要再申请,unsigned int * p这个指针,如果你的64M被分配完毕,它会指到哪去呢?
2、用display定义的缓冲区直接接收:memcpy(a, (unsigned int*)p, g_FlashInfo.dwBytesPerBlock); 直接拷贝给显存,将p直接换为IMAGE_FRAMEBUFFER_UA_BASE。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 haiou_arm 的回复:
你没有将eboot.bib的内容贴完整,还是不知道你的64M到底是怎么细分的。
建议:
1、不要再申请,unsigned int * p这个指针,如果你的64M被分配完毕,它会指到哪去呢?
2、用display定义的缓冲区直接接收:memcpy(a, (unsigned int*)p, g_FlashInfo.dwBytesPerBlock); 直接拷贝给显存,将p直接换为IMAGE_FRA……


1,eboo.bib文件:
;* This software is the confidential and proprietary information of Samsung
;* Electronics, Inc("Confidential Information"). You Shall not disclose such
;* Confidential Information and shall use it only in accordance with the terms
;* of the license agreement you entered into Samsung.
;*
;******************************************************************************

MEMORY
;   Name     Start     Size      Type
;   -------  --------  --------  ----
    ARGS     80020800  00000800  RESERVED
    RAM      80026000  00006000  RAM   
    STACK    8002c000  00004000  RESERVED
    EBOOT    80038000  00040000  RAMIMAGE
    BINFS    80080000  00021000  RESERVED
    ;LOGO     800A1000  00040000  RAMIMAGE

; Area used to cache nk.bin while programming flash
    FLSCACHE 80200000  01400000  RESERVED
    DISPLAY  80100000  00100000  RESERVED

CONFIG
        COMPRESSION=OFF
        PROFILE=OFF
        KERNELFIXUPS=ON
;        ROMOFFSET=25FC8000
        SRE=ON
        ROMSTART=80038000
        ROMWIDTH=32
        ROMSIZE=40000

MODULES
;   Name            Path                                                              Memory Type
;   --------------  ----------------------------------------------                    -----------
    nk.exe          $(_TARGETPLATROOT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot.exe      EBOOT
就这些了,

2,内存分配,昨天后来我也发现了 这么干 就能出图像

 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

20
 
这是我把EBOOT.NB0下到核心板上的信息:
icrosoft Windows CE Ethernet Bootloader Common Library Version 1.1 Built Mar 30 2010 13:24:02
Microsoft Windows CE Bootloader for the Samsung SMDK2440 Version 2.4 Built Mar 30 2010

BP_Init
FMD::FMD_Init
FMD::FMD_Init - pBSPArgs->nfsblk = 0x0
FMD::FMD_Init - READ_REGISTER_BYTE(pNFSBLK) = 0x0
FMD::FMD_Init IPL .....
FMD::FMD_Init Done
MID = 0xec, DID = 0x76 4th Cycle : 0xa5
NUMBLOCKS : 512(0x200), SECTORSPERBLOCK = 256(0x100), BYTESPERSECTOR = 512(0x200)
MID = 0xec, DID = 0x76 4th Cycle : 0xa5
NUMBLOCKS : 512(0x200), SECTORSPERBLOCK = 256(0x100), BYTESPERSECTOR = 512(0x200)
wNUM_BLOCKS : 512(0x200)
dwBlock(0x9) X dwImageLength = 0x25800
dwNumBlocks = 0x2
dwBlock(0x9) X g_FlashInfo.wSectorsPerBlock(0x100) = 0x900
(LPBYTE)p=0xa0100000
dwBlock(0xa) X g_FlashInfo.wSectorsPerBlock(0x100) = 0xa00
(LPBYTE)p=0xa0100000
TOC_Read ERROR: INVALID_TOC Signature: 0xFFFFFFFF
TOC_Init: dwEntry:1, dwImageType: 0x2, dwImageStart: 0x0, dwImageLength: 0x0, dwLaunchAddr: 0x0
+BootConfigInit
-BootConfigInit
TOC {
dwSignature: 0x434F544E
BootCfg {
  ConfigFlags: 0x2020
  BootDelay: 0x5
  ImageIndex: 1
  IP: 0.0.0.0
  MAC Address: 00:00:00:00:00:00
  Port: 0.0.0.0
  SubnetMask: 255.255.255.0
}
ID[0] {
  dwVersion: 0x20004
  dwSignature: 0x45424F54
  String: 'eboot.nb0'
  dwImageType: 0x2
  dwTtlSectors: 0x200
  dwLoadAddress: 0x80038000
  dwJumpAddress: 0x80038000
  dwStoreOffset: 0x0
  sgList[0].dwSector: 0x200
  sgList[0].dwLength: 0x200
}
ID[1] {
  dwVersion: 0x1
  dwSignature: 0x43465348
  String: ''
  dwImageType: 0x2
  dwTtlSectors: 0x0
  dwLoadAddress: 0x0
  dwJumpAddress: 0x0
  dwStoreOffset: 0x0
}
chainInfo.dwLoadAddress: 0X00000000
chainInfo.dwFlashAddress: 0X00000000
chainInfo.dwLength: 0X00000000
}
Press [ENTER] to download image stored on boot media, or [SPACE] to enter boot monitor.

这个地方打印出了出错的信息。。。难道跟这有关?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表