阅读:1795回复:6
mainstoneIII eboot启动后串口信息一半乱码,一半正常?
在开发板上修改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. 请问这是什么原因啊? |
|
沙发#
发布于:2007-11-06 20:37
可能你的板子串口初始化(baud设置)有问题,我记得intel给的BSP里,串口的初始化有两个地方,最开始的在汇编里面并且打印了一些信息出来显示CPU速度什么的,还有一个应该是debug.c之类的文件里,所以,可能你的debug.c里设置了正确baud,那么后面接收的就能正常显示了
|
|
板凳#
发布于: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--); } } 在这个代码之上打印都是乱码,之后都正常,请高手指点!万分感谢 |
|
地板#
发布于:2007-11-07 08:48
还有请问一下,在调用InitDebugSerial初始化串口以前,还有在调用EdbgOutputDebugString函数,这样打印结果不是很乱,因为汇编部分没有看到对串口作初始化。
|
|
地下室#
发布于:2007-11-07 10:28
最终发现原来是汇编代码中GPIO初始化有问题,已解决。非常感谢dillonhua
提醒。 |
|
5楼#
发布于:2007-11-07 12:58
引用第3楼gerryzhou于2007-11-07 08:48发表的 : 你的BSP还是比较混乱,没有InitDebugSerial反而去调用EdbgOutputDebugString ? 建议把对各个模块的硬件配置初始化(包括时钟,GPIO,等)都放到各自的init里,不要仅仅依赖汇编里的初始化 |
|
6楼#
发布于:2007-11-08 08:23
不过,在没有初始化nitDebugSerial有调用EdbgOutputDebugString是在出错情况下,一般不会调用,否则的话肯定挂掉。还是保持mainstoneIII架构不要变为好,毕竟微软作了很多工作。现在eboot没有问题,网络控制器已修改成DM9000A,可以下载内核。
|
|