6954|24

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2440 2G08的stepldr问题 [复制链接]

现在遇到这样的问题,我按照论坛上的说法,把stepldr.nb1烧了进去。根据stepldr的代码把eboot烧写到第一个block,0page的位置。烧写好之后上电一点反应也没有。在start.s里面点LED也没反应,不知道原因会出在什么地方。可以用Htag烧写是不是说明我的最小系统没什么问题?
大家帮帮忙,说说我现在应该怎么办?

最新回复

谢谢大家帮助,问题终于解决了,结贴给分  详情 回复 发表于 2010-4-30 09:38
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个问题貌似是 实际代码超越了eboot.bib的限制了
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
之前的是12K的stepldr for norflash,修改了stepldr.bib:
MEMORY
;   Name      Start     Size      Type
;   -------   --------  --------  ----
    STEPLDR   00000000  00001000  RAMIMAGE
    STACK     33ff5800  00001000  RESERVED
    RAM       33ff0000  00001000  RAM

CONFIG
        COMPRESSION=ON
        PROFILE=OFF
        KERNELFIXUPS=ON
   
        ROMSTART=00000000
        ROMWIDTH=32
        ROMSIZE=00001000
这样就可以满足从nand启动前面4K的stepldr小于4K了。按别人说的应该烧写stepldr.nb1,但是我烧进去了没有用。
要不谁有2440 k9f2G08 nandflash启动的,可以用的stepldr发给我一个吧~~~实在谢谢了。
kacyquan@gmail.com
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
你将EBOOT烧录到BLOCK 0的PAGE 0了?
这部分是要烧录stepldr,烧EBOOT不行,他们完成的任务不一样,详细地你看一下代码。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
我在BLOCK 0 page 0烧的是stepldr.nb1,然后根据stepldr代码里面的offsize,将eboot.nb0烧些到了block 1位置。eboot烧到block2我也尝试过了,也不行。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
一般情况下stepldr也会有些输出信息,而你的没反应,要么stepldr没烧录进去,要么启动模式设置不对,可以通过ADS等工具看看当前的PC值及内存中的数据,看看是否在运行,或者说是运行到哪里卡住了。
 
 
 

回复

129

帖子

0

TA的资源

一粒金砂(初级)

7
 
请问怎么使用AXD读出ram里面正在运行的数据啊?~
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
AXD把代码直接下载到RAM里面运行,没什么问题。直接下载到RAM里面的程序也可以对nand进行操作。请问大家我还需要怎么做呢?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
大家谁有能用的2440.64MRAM,2G08nand,可以启动的stepldr发给我一个,我试试看就行,不用源代码。谢谢了
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
在AXD查看memory就能够看到RAM中的数据了。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
还有一个问题,stepldr.nb2里前面有一段数据,。这段数据是应该有还是不应该有呢?stepldr.nb2应该是全零的吗?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
如果实在搞不定,可以考虑使用ADS编写一个NBOOT。
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(初级)

13
 
如果实在搞不定,可以考虑使用ADS编写一个NBOOT。
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

14
 
[url=http://www.cnblogs.com/we-hjb/archive/2008/09/27/1299901.html][/url]

看看这里吧,希望有点作用。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

15
 
sunrain_hjb,谢谢哦~~~这个nboot和stepldr差不多啊~~~~
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

16
 
谢谢大家的帮助,现在前面4K的stepldr已经跑起来了,在startup.s点LED灯,发现一直到
    ; Jump to main C routine.
    ;
    bl                main
都是正常的。可以跑过来。我在这个bl main之前加了LED灯闪烁,显示是正常的。然后就应该跳转到C代码了吧。
现在进入C语言的main函数
void main(void)
{
    register nBlock;
    register nPage;
    register nBadBlocks;
    volatile BYTE *pCopyPtr;

        Led_Display(LED_OFF);
//        while(1);
    // Set up copy section (initialized globals).
    //
    // NOTE: after this call, globals become valid.
    //
    SetupCopySection(pTOC);

    // Enable the ICache.
    //
    MMU_EnableICache();
   
    // Set up clock and PLL.
    //
//    ChangeClockDivider(3, 1);              // 1:3:6.
//    ChangeMPllValue(0x6e, 0x3, 0x1);  // Fin=16MHz FCLK=399.65MHz.
//    ChangeMPllValue(0x3e, 0x2, 0x1);  // Fin=16MHz FCLK=296.352MHz.
//    ChangeMPllValue(229, 0x5, 0x0);  // Fin=12Mhz

    // Set up all GPIO ports.
    //
    Port_Init();

    Uart_Init();
        Uart_SendString("Step ldr\r\n");

    // Initialize the NAND flash interface.
    //
    NF_Init();

        //Initialize the LCD interface
        //
        Lcd_Init();

    // Turn the LEDs off.
    //
    Led_Display(LED_OFF);

    // Copy image from NAND flash to RAM.
    //
    pCopyPtr = (BYTE *)LOAD_ADDRESS_PHYSICAL;

    // NOTE: we assume that this Steppingstone loader occupies *part* the first (good) NAND flash block.  More
    // specifically, the loader takes up 4096 bytes (or 8 NAND pages) of the first block.  We'll start our image
    // copy on the very next page.

        //NF_ReadPage(0,0,0x32000000);
        //while(1);

       
    nBadBlocks = 0;
    for (nPage = NAND_COPY_PAGE_OFFSET ; nPage < (LOAD_SIZE_PAGES + NAND_COPY_PAGE_OFFSET) ; nPage++)
    {
        nBlock = ((nPage / NAND_PAGES_PER_BLOCK) + nBadBlocks);
                //Uart_SendDWORD(nPage,1);
        if (!NF_ReadPage(nBlock, (nPage % NAND_PAGES_PER_BLOCK), pCopyPtr))
        {
            if ((nPage % NAND_PAGES_PER_BLOCK) != 0)
            {
            //    Led_Display(LED_OFF);    // real ECC Error.
               
                                Uart_SendString("real ECC Error.\r\n");

                // Spin forever...
                while(1)
                {
                }
            }

            // ECC error on a block boundary is (likely) a bad block - retry the page 0 read on the next block.
            nBadBlocks++;
            nPage--;
            continue;
        }

        pCopyPtr += NAND_PAGE_SIZE_BYTES;
    }

    // Turn the LEDs on.
    //
    Led_Display(LED_OFF);
    // Jump to the image...
    //
    ((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();

}
发现LED灯根本不会OFF,大家给点意见吧。
我用的GPF口控制的LED灯。
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

17
 
自己顶一下
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

18
 
main里的第一个函数Led_Display(LED_OFF);都没有被执行到?

那有可能是堆栈初始化的问题,检查一下堆栈初始化吧。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

19
 
另外,你也可以不用这个函数调用,直接在main里修改LED的状态看看。

如果这样能正常操作LED,那基本上可以确定是堆栈没有正确初始化导致的了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

20
 
谢谢sunrain_hjb前辈了,那个LED off的函数,是我在main里面直接修改的不是在汇编里面写的函数调用过来的。而且在汇编里面直接写一个函数调用过来,也不能关闭LED。
我想请问一下,我怎么查看堆栈是否正确初始化了呢?
 
 
 

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

随便看看
查找数据手册?

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