8966|24

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

高分求助nand flash扩大到512M的驱动修改问题 [复制链接]

平台--2440
现在把nand flash扩大到512M,导致系统不能启动,请问如果要让系统启动,要修改哪些地方呢?
要修改C:\WINCE500\PLATFORM\smdk2440\eboot吗
C:\WINCE500\PLATFORM\smdk2440\NBOOT呢?
C:\WINCE500\PLATFORM\smdk2440\DRIVERS\Nandflsh呢?

除了以上三个之外,还要什么要修改的?谢谢前辈指点

最新回复

注册表问题,经理解决了。结贴。我还不知道具体原因,看注册表去了  详情 回复 发表于 2008-9-27 11:36
点赞 关注

回复
举报

57

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个平台我不清楚,如果你这个flash是用来做boot的,那eboot要改,如果nk在flash上,那nboot也要改。如果系统启动之后还需要做存储,那nandflash的driver也要改。
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
wince4.2和wince5.0下修改有什么不同?
我的系统是5.0,但是我看我的BSP文件夹结构是从wince4.2升级到wince5.0
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 xjfox 的回复:
这个平台我不清楚,如果你这个flash是用来做boot的,那eboot要改,如果nk在flash上,那nboot也要改。如果系统启动之后还需要做存储,那nandflash的driver也要改。


如果我的bootloader没有使用eboot呢,我的是在ADS写编写的bootloader呢?那么eboot和nboot就不用改了吧?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果你的bootloader和nk都和这个flash没关系,那eboot和nboot就不用改了

我没用过4.2
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼上说的真是个好办法,赞
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

7
 
=============================================
我在nand flash驱动那里
看到有如下宏定义

#ifndef __NAND_H__
#define __NAND_H__
#define K9F1G08_SUPPORT        (1)
#define K9F2G08_SUPPORT        (1)
#define K9F4G08_SUPPORT        (1)
#define K9F8G08_SUPPORT        (1)
#define K9K2G16_SUPPORT        (1)
-----------是不是这个有毛病呢?不可能同时支持那么多种容量的nand flash的啊。
---------再仔细看看程序
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
1.首先要修改硬件,因为系统要自动把前4k内容读到内部RAM中去,而不同flash,页面大小等是不一样的,具体怎么修改,看2440的开发手册flash那一节。

2.要修改nboot,eboot和flash读写有关的部分,不同的flash读写是不一样的。

3.修改BSP中FLASH部分的驱动

修改的地方还是比较多
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
系统能够起来了,但是有毛病产生,希望前辈们指导,————————————————不能发现盘符了。
启动信息如下
Do you want to run? [y/n] : y
Windows CE Kernel for ARM (Thumb Enabled) Built on Feb  8 2007 at 23:36:51
ProcessorType=0920  Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8c201320

Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
---------------InitDisplay-----------------
SDMMC config set rGPGCON: ff214180
SDMMC config Init Done.
OEMInit Done...
Sp=ffffc7cc
Data Abort: Thread=93ee5000 Proc=8d376070 'filesys.exe'---是什么问题呢?导致数据异常?
AKY=00000003 PC=02ee4140(flashdrv.dll+0x00004140) RA=02ee27bc(flashdrv.dll+0x000027bc) BVA=b4c0000c FSR=0000000d
RaiseException: Thread=93ee5000 Proc=8d376070 'filesys.exe'
AKY=00000003 PC=03f8dfec(coredll.dll+0x0001dfec) RA=8c22a900(NK.EXE+0x0002a900) BVA=00000000 FSR=00000000
384 clock
BAK_Init: dwContext = 0x602ed64
BacklightInitialize IOP
BacklightInitialize
!!!!!!!!!!!! BACKLIGHT ON !!!!!!!!!!!!
DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded.
DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded.
::: PBT_InitializeAddresses - Success
DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\SDBusDriver). Driver cannot be unloaded.
        charlie::SDIO::SDHOST::SDCSDCardDllEntry::DLL_PROCESS_ATTACH
        charlie::SDIO::SDCInitialize+
        charlie::SDIO::SDCInitialize-
--S3C2440DISP::InitializeHardware
HARDWARE\DEVICEMAP\KEYBD\IOBase:b5600000
[KBD] v_pIOPregs mapped at 1d0000
Lyg.p: Layout Manager successfully initialized to  2
Touch Init
Maximum Allowed Error 256:
MSIM: IM_ReadRegistry read KB 5
Explorer(V2.0) taskbar thread started.
GET_DESCRIPTOR:DEVICE 0x12, 0x40
SET_ADDRESS - 0x1
GET_DESCRIPTOR:DEVICE 0x12, 0x12
GET_DESCRIPTOR:CONFIGURATION
GET_DESCRIPTOR:CONFIGURATION
GET_DESCRIPTOR:DEVICE 0x12, 0x12
GET_DESCRIPTOR:CONFIGURATION
SET_CONFIG 1
AUTORAS:: Dialer notifies: [1] [Dialer Start]
Posting WM_NETCONNECT(TRUE) message
AUTORAS:: Dialer notifies: [4] [Dialer Connected]
!!!!!!!!!!!! BACKLIGHT OFF !!!!!!!!!!!!
Data Abort: Thread=93ee5000 Proc=8d376070 'filesys.exe'---是什么问题呢?导致数据异常?
-------盘符不能发现和什么相关?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
AKY=00000003 PC=02ee4140(flashdrv.dll+0x00004140) RA=02ee27bc(flashdrv.dll+0x000027bc) BVA=b4c0000c FSR=0000000d

这个dll是你自己写的dll吗?看一下flashdrv.map文件中0x00004140是在哪个函数段里。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
觉得系统起来了啊,看到同步连接已经成功啊.注册表为HIVE?如果是,先不要试这个!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 songtitan 的回复:
AKY=00000003 PC=02ee4140(flashdrv.dll+0x00004140) RA=02ee27bc(flashdrv.dll+0x000027bc) BVA=b4c0000c FSR=0000000d

这个dll是你自己写的dll吗?看一下flashdrv.map文件中0x00004140是在哪个函数段里。


对,看看到底是什么问题。'filesys.exe'就是文件系统进程,它加载你的flash驱动的时候出错了,这样当然不能出现相应的盘符了。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 10 楼 songtitan 的回复:
AKY=00000003 PC=02ee4140(flashdrv.dll+0x00004140) RA=02ee27bc(flashdrv.dll+0x000027bc) BVA=b4c0000c FSR=0000000d

这个dll是你自己写的dll吗?看一下flashdrv.map文件中0x00004140是在哪个函数段里。


---------你好,我按照你的提示找到C:\WINCE500\PLATFORM\smdk2440\target\ARMV4I\retail\flashdrv.map
但是找不到0x00004140这个数字啊。没有这个0x00004140
AKY=00000003 PC=02ee4140(flashdrv.dll+0x00004140) RA=02ee27bc(flashdrv.dll+0x000027bc) BVA=b4c0000c FSR=0000000d -----是什么意思
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

14
 
毛病还真多,是不是和Kernel的内存分配和使用有关。查一下你的BSP中所有和内存设置有关的地方,还有config.bib的配置?
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 14 楼 gooogleman 的回复:
毛病还真多,是不是和Kernel的内存分配和使用有关。查一下你的BSP中所有和内存设置有关的地方,还有config.bib的配置?

问题多不怕,就从flashdrv.dll的加载问题慢慢查。
NK可以正常烧写和加载,说明EBOOT下的nand的读写操作已经正确,nand驱动应该也问题不大。
如果KITL可以工作,还是会省事很多。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

16
 
songtitan前辈,在下面这个网页里面有讲到关于.map文件和异常相关的问题,但是我看不明白。你能不能帮我讲讲这个.map文件和异常的关系。谢谢了
http://blogs.msdn.com/hopperx/archive/2005/06/29/433842.aspx
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
汗。。。好吧,
以hopperx的例子,出错的PC是在PC=03f74680(coredll.dll+0x00014680),ok,记住0x00014680
再看coredll.map(谁出错,看谁的map文件,你的是flashdrv.map),注意第三列,
(Hint: the following was copied and pasted from the coredll.map text file found in the image release directory.)

0001:00013638       GetWindowLongW             10014638 f   coredll_ALL:twinuser.obj

0001:00013648       BeginPaint                 10014648 f   coredll_ALL:twinuser.obj

0001:000136cc       EndPaint                   100146cc f   coredll_ALL:twinuser.obj

0001:00013750       GetDC                      10014750 f   coredll_ALL:twinuser.obj

0001:000137d4       ReleaseDC                  100147d4 f   coredll_ALL:twinuser.obj

0001:00013858       GetParent                  10014858 f   coredll_ALL:twinuser.obj

发现0x00014680是在BeginPaint 和EndPaint之间,故出错的是在BeginPaint函数体内。

RA是返回地址,这个信息能告诉你是谁在掉这个出错的函数。
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

18
 
按照songtitan前辈提供的文章,http://www.pediy.com/bbshtml/bbs5/pediy50402.htm------仅通过崩溃地址找出源代码的出错行
0001:00003124       FMD_Init                   10004124 f   FMD:fmd.obj--------那么应该这里出现问题了!去看看,http://blogs.msdn.com/hopperx/archive/2005/06/29/433842.aspx这篇老外文章也讲得不错,专门针对PB的,强烈推荐大家看看。
0001:000032cc       FMD_ReadSector             100042cc f   FMD:fmd.obj
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 songtitan 的回复:
汗。。。好吧,
以hopperx的例子,出错的PC是在PC=03f74680(coredll.dll+0x00014680),ok,记住0x00014680
再看coredll.map(谁出错,看谁的map文件,你的是flashdrv.map),注意第三列,
(Hint: the following was copied and pasted from the coredll.map text file found in the image release directory.)

0001:00013638      GetWindowLongW            10014638 f  coredll_ALL:twinuser.obj

0001:00013648  …



------------不好意思,刚才我没有看到你的留言,看到你推荐的文章,我就不会这么问了。我找的那篇老外文章讲得不是和清楚
麻烦你了,不过让大家看到也是帮了大家。真的很佩服你哦,做wince火候这么厉害。学习你。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

20
 
根绝songtitan前辈提示,异常发生的地方是FMD_Init这个函数,据我所知,程序异常一般都是指针使用不当,或者逻辑算数错误产生的,但是我看这里并没有什么不妥当的,请大家看看这段程序到底有什么猫腻。
同时还有一个疑问,在MSDN的一些牛人博客上,发现,他们寻找异常方法有的是根据PC,有的是根据RA,我尝试过两个都用,但是找到异常的地方却不同。真是把我搞晕了。到底他们这么做有什么根据呢?高人们快出来指点一下啊。PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut)
{

    // Caller should have specified NAND controller address.
    //
        int i;
        DWORD FlashId;
//ggg    BOOL bLastMode = SetKMode(TRUE);

        // Enable the clock to NAND controller
        s2440CLKPWR->rCLKCON |= (1<<4);
    // Set up initial flash controller configuration.
    //
    s2440NAND->rNFCONF =  (TACLS  <<  12) | /* CLE & ALE = HCLK * (TACLS  + 1)   */
                          (TWRPH0 <<  8) | /* TWRPH0    = HCLK * (TWRPH0 + 1)   */
                          (TWRPH1 <<  4) ;   /* TWRPH1    = HCLK * (TWRPH1 + 1)   */
    s2440NAND->rNFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(0<<6)|(0<<5)|(1<<4)|(1<<1)|(1<<0);
    s2440NAND->rNFSTAT = 0;
        NF_Reset();
//    NF_nFCE_L();            // Select the flash chip.
//    NF_CLEAR_RB();
//    NF_CMD(CMD_RESET);        // Send reset command.
    //NF_WAITRB();            // Wait for flash to complete command.
    for(i=0;i<100;i++);  //tWB = 100ns. //??????
//    NF_DETECT_RB();
        FlashId = ReadFlashID();
    // Get manufacturer and device codes.
//    g_pNandFlashChip = g_NandFlash_Chip_set;
    for(i=0;i     {
            if (FlashId == g_pNandFlashChip->FlashID)
            {
                break;
            }
        g_pNandFlashChip++;
    }
//    NF_nFCE_H();            // Deselect the flash chip.
        if(g_pNandFlashChip->FlashID == 0)
        {
                #if K9K2G16_SUPPORT
                s2440NAND->rNFCONF|=(1<<0);
                NF_Reset();
                FlashId = ReadFlashID16();///???
                if(FlashId !=0)
                {
                        g_pNandFlashChip--;
                        for(i=FLASH_CHIP_COUNTS-1;i>=0;i--)
                        {
                                if (FlashId == g_pNandFlashChip->FlashID)
                                    {
                                        break;
                                    }
                                g_pNandFlashChip--;
                        }
                }
                if(i < 0)
                #endif
                g_pNandFlashChip = NULL;
        }
         s2440NAND->rNFCONF|=(g_pNandFlashChip->is16BitSize);
//ggg  SetKMode (bLastMode);
#ifdef BOOT_LOADER
    EdbgOutputDebugString("FMD_Init: finished successful\r\n");
#else
        RETAILMSG(1,(TEXT("FMD_Init: finished successful\r\n")));
#endif
    return((PVOID)s2440NAND);
}

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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