daseny
驱动牛犊
驱动牛犊
  • 注册日期2005-03-17
  • 最后登录2005-12-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1428回复:4

请教:固件更新程序98/2k下稳定,xp下经常出错。

楼主#
更多 发布于:2005-03-18 09:58
  我受命调试一个基于VC6.0的mp3固件升级程序,据说在Win98/2K中相对稳定,但是在WinXP下经常出错。

  整个流程大致如下:
    开始:
    测试MCU存在;
    传输Boot Block;
    等待MCU重启;
    传输Main Block;
    结束。

  后经过试验、跟踪,发现问题出现的方式都大致如此:
  板子上电(独立电源),接上USB传输线,打开此程序,正常传输完毕;
  板上硬复位,程序重启,Boot Block正常传输完毕,Main Block传输到第n块(Boot和Main都是分块传输,每块4096B,Boot4块,Main506块,0<=n<=8)时出错;
  再次板上硬复位,程序重启,Boot Block正常传输到第n块(1<=n<=2)时出错;
  第三次板上硬复位,程序重启,Boot Block正常传输到第0块时出错,以后再复位结果不变。

  跟踪后确认,所有Main Block中都是在CreatFile()时出错,打开的是PIPE00,最后错误代码87,查表为The parameter is incorrect ERROR_INVALID_PARAMETER。问题是前几个块都没问题,所以我觉得不应该是参数错误。
  Boot Block中都是在执行WriteFileEx()方法后失去响应。

  两个Block的写入方法相同,流程如下:
{
    读取文件到缓冲区;
    Decode();
    GetUsbDeviceFileName();
    CreatFile();  //PIPE00,ERROR
    EraseFlashBlock();
    WriteFileEx();//ERROE
}

  我刚到,请前辈们多多指教。
  先行谢过。
daseny
daseny
驱动牛犊
驱动牛犊
  • 注册日期2005-03-17
  • 最后登录2005-12-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-22 15:07
  呵呵,看来这个帖子要我自己终结了 :)
  问题基本解决,虽然还没有找到根本原因。
  其实解决方法很简单,就是在CreateFile失败时,延时重试。我延时100ms,设置最大重试次数20,实际试验时一般不超过5次。而且正常情况下一般失败都在开始的几个块,开头正常的话,后面问题就不多了。

  猜测一下,既然返回无效参数的错误,应该是第一个参数,就是文件名,其他的可能性不大。估计是MCU忙,无法响应,故系统一时找不到。

  依然期望知道真实答案,希望不吝赐教,依然给分 :)
daseny
daseny
驱动牛犊
驱动牛犊
  • 注册日期2005-03-17
  • 最后登录2005-12-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-21 16:59
  又消除一个可能同时打开PIPE00和PIPE01的错误。
  现在只剩下某次传输时可能产生的CreatFile(\"\\\\...\\PIPE00\")错误了。在每块传输完毕后延时一段时间,可以稍微减少故障概率,但是没有质的变化。还是返回INVALID_HANDLE_VALUE,最后错误代码87。
  苦恼啊。
daseny
daseny
驱动牛犊
驱动牛犊
  • 注册日期2005-03-17
  • 最后登录2005-12-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-21 14:20
  配合Bus Hound跟踪程序,发现在Downloader中出问题是因为MCU没有响应(USTS  05 00 00 c0  no response,请求挂起),除非冷启动,否则一直没有响应,所以这里的问题暂时不再考虑。

  而Main Block中,Bus Hound的最后显示,到上一个块的WriteFileEx方法产生的URB为止,即上一个块正常结束,本块还未有总线信息产生。我看到的CreatFile方法并不产生总线信息。

  请有经验人士给与提示,谢谢。
daseny
daseny
驱动牛犊
驱动牛犊
  • 注册日期2005-03-17
  • 最后登录2005-12-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-21 08:36
  送20分,请指教,不胜感激。
daseny
游客

返回顶部