gerryzhou
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2009-04-18
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望133点
  • 贡献值0点
  • 好评度132点
  • 原创分0分
  • 专家分0分
阅读:1752回复:6

mainstoneIII eboot启动后串口信息一半乱码,一半正常?

楼主#
更多 发布于:2007-11-06 17:05
在开发板上修改mainstoneIII的eboot运行,发现串口打印信息前半部分是乱码,后半部分正常。如下:
K酵櫻乚ス懡萃?
??晒曆?浇驯絽憰蓙
降到??蓞慑乊暽庭焦伵古?榨毖?劫亖諄闪凛伵砷唾檠?)5?山徒櫻乚ス懡萃?
??晒曆?浇驯絽憰蓙殴排仚缴佈?寡暠?叆雇呀箷%?曎暠恋暪褋A呇櫧傻?榨毖?劫亖賮闪凛5)II=I?9迮
攻验?曆萁森?
ˉ羴菇褋櫧展憗呇伭釅呡亮土?)5)A蓵屯乵9QIu佈絹懡莨苯厬伖捷伣蓙mMA
u佈亶吂崟惫5)5)攻?靴節仴祬潟亼捷贡絽憗ス佂0 seconds. INFO: Trying to locate/initialize PCMCIA NIC in slot 0...
INFO: Performing PCMCIA NIC initialization.  Please wait...
ERROR: Invalid PCMCIA configuration data 0x0.
INFO: Trying to locate/initialize PCMCIA NIC in slot 1...
INFO: Performing PCMCIA NIC initialization.  Please wait...
ERROR: Invalid PCMCIA configuration data 0x0.
INFO: Trying to initialize the built-in SMSC NIC...
ERROR: LAN91CInit: Network Chip not found at 0xba700300
ERROR: Failed to initialize SMSC LAN91C111 Ethernet controller.
INFO: Trying to initialize USB RNDIS...
HostMiniInit:: !!
Rndis:: initialization: with addr=0
Rndis:: initialization!
Rndis:: PDDInit Success!
Rndis:: Get MAC address 0,0,0
Rndis:: initialization: Fail!
ERROR: Failed to initialize Bulverde Rndis USB Ethernet controller.
ERROR: Failed to detect and initialize Ethernet controller.

请问这是什么原因啊?
dillonhua
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望401点
  • 贡献值0点
  • 好评度128点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-06 20:37
可能你的板子串口初始化(baud设置)有问题,我记得intel给的BSP里,串口的初始化有两个地方,最开始的在汇编里面并且打印了一些信息出来显示CPU速度什么的,还有一个应该是debug.c之类的文件里,所以,可能你的debug.c里设置了正确baud,那么后面接收的就能正常显示了
gerryzhou
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2009-04-18
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望133点
  • 贡献值0点
  • 好评度132点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-07 08:42
详细看过汇编代码,没有打印消息语句。我原先使用的盛龙威嵌的bsp中确实有打印cpu频率的信息,但是不管是mainstoneII还是mainstoneIII没有这种信息打印出来,而且两个现象是一样的。在eboot中,前半部分和后半部分信息打印都是同一个函数EdbgOutputDebugString打印的,分界线是一下代码:
    StartTime     = OEMEthGetSecs();
    PrevTime      = StartTime;
    CurrTime      = StartTime;
    Selection     = 0;

    // Allow the user an amount of time to halt the auto boot/download process.
    // Count down to 0 before proceeding with default operation.
    //
    while ((CurrTime - StartTime) < g_EbootCFG.delay)
    {
        UINT8 k=0;
        UINT8 j;
        UINT8 x,y,z;

        Selection = OEMReadDebugByte();
        if ((Selection == 0x20) || (Selection == 0x0d))
        {
            break;
        }
        CurrTime = OEMEthGetSecs();  
        if (CurrTime > PrevTime)
        {
            PrevTime = CurrTime;
            if (AutoBootDelay < 9)
                k = 11;
            else if (AutoBootDelay < 99)
                k = 12;
            else if (AutoBootDelay < 999)
                k = 13;

            for (j = 0; j < k; j++)
            {
                OEMWriteDebugByte((BYTE)0x08); // print back space
            }
            x = AutoBootDelay / 100;
            y = (AutoBootDelay % 100) / 10;
            z = ((AutoBootDelay % 100) % 10);
            //OEMWriteDebugLED(0, ((x << 8) | (y << 4) | (z)));
            EdbgOutputDebugString ( "%d seconds. ", AutoBootDelay--);
        }

    }
在这个代码之上打印都是乱码,之后都正常,请高手指点!万分感谢
gerryzhou
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2009-04-18
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望133点
  • 贡献值0点
  • 好评度132点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-07 08:48
还有请问一下,在调用InitDebugSerial初始化串口以前,还有在调用EdbgOutputDebugString函数,这样打印结果不是很乱,因为汇编部分没有看到对串口作初始化。
gerryzhou
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2009-04-18
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望133点
  • 贡献值0点
  • 好评度132点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-07 10:28
最终发现原来是汇编代码中GPIO初始化有问题,已解决。非常感谢dillonhua
提醒。
dillonhua
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望401点
  • 贡献值0点
  • 好评度128点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-11-07 12:58
引用第3楼gerryzhou于2007-11-07 08:48发表的  :
还有请问一下,在调用InitDebugSerial初始化串口以前,还有在调用EdbgOutputDebugString函数,这样打印结果不是很乱,因为汇编部分没有看到对串口作初始化。


你的BSP还是比较混乱,没有InitDebugSerial反而去调用EdbgOutputDebugString ?

建议把对各个模块的硬件配置初始化(包括时钟,GPIO,等)都放到各自的init里,不要仅仅依赖汇编里的初始化
gerryzhou
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2009-04-18
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望133点
  • 贡献值0点
  • 好评度132点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-11-08 08:23
不过,在没有初始化nitDebugSerial有调用EdbgOutputDebugString是在出错情况下,一般不会调用,否则的话肯定挂掉。还是保持mainstoneIII架构不要变为好,毕竟微软作了很多工作。现在eboot没有问题,网络控制器已修改成DM9000A,可以下载内核。
游客

返回顶部