【问题标题】:Is Atmel processor or AT91Boot dll crashing my USB portsAtmel 处理器或 AT91Boot dll 是否会导致我的 USB 端口崩溃
【发布时间】:2012-12-14 09:35:17
【问题描述】:

我正在调整一些用于通过 USB 将 .bin 文件上传到我们的产品之一的测试软件。该产品具有 Atmel AT91SAM7X256 处理器。该软件全部用c#编写,在windows XP机器上运行。

以前的程序员(不再在公司工作)使用一个名为 AT91BootDLL.dll 的 dll 文件来扫描 USB 端口以查找 ateml 处理器并获取它的句柄。然后它可以打开一个 USB 连接并执行各种操作,例如读取、写入等。这一切都很好,但它时不时地找不到任何连接的东西。发生这种情况时,我无法再通过 USB 将任何东西连接到 PC,因为 Windows 无法检测到它。然后我必须关闭电脑,然后在执行此操作时决定冻结。

我需要深入了解它,因为我对这个 dll 或嵌入式编程都没有经验,所以我只有这些结论。处理器正在做某事导致 USB 端口锁定,或者这个 dll 文件正在做。

我可以在程序中做些什么来帮助防止这种情况发生吗?

对于上传然后从这个处理器读回,有人知道替代方法吗?

这里是扫描打开时用到的一些代码。

private static AT91BootDLL at91 = new AT91BootDLL();

private static unsafe int GetHandle()
{
  // Create a dummy list for the dummy SAM-BA interface ;-)
  byte* dummyName = stackalloc byte[100];
  byte** dummyList = stackalloc byte*[100]; // { n1, n2, n3, n4, n5 };
  for (int i = 0; i < 100; ++i)
  {
    dummyList[i] = dummyName;
  }

  // This function needs to be called before a USB connection can be opened.
  at91.AT91Boot_Scan(ref *(byte*)dummyList);

  // Now that the scan function has been called, we may open an USB connection.
  int handle;
  byte[] name = Encoding.ASCII.GetBytes("\\usb\\ARM0\x00");
  at91.AT91Boot_Open(ref name[0], out handle);

  return handle;
}

【问题讨论】:

    标签: c# atmel


    【解决方案1】:

    您可以在此处下载最新的 SAM-BA 套件,因此请确保您拥有所有内容的最新版本:

    http://www.atmel.com/tools/ATMELSAM-BAIN-SYSTEMPROGRAMMER.aspx

    但是看看上面的代码,它在很大程度上依赖于 Atmel 提供的例程。调用逻辑和/或固件中可能存在其他错误,但除非您发布完整的代码,否则我认为没有人能够帮助您。如果您不想发布它,可以尝试 Atmel 工程,如果您是批量客户,那么支持是可以的。

    就我个人而言,我一直使用 CDC 接口为 AT91SAM 系列编写自己的引导加载程序,将新映像从主应用程序写入外部 FLASH,然后设置一个标志并重新启动以加载它以摆脱外部依赖项,但这是一项相当大的工作。

    【讨论】:

    • 我认为不需要更多代码,因为当软件需要句柄时,它会调用我提供的代码。如您所见,返回了一个句柄,如果该句柄 == 0 则只是显示一个弹出窗口,说无法检测到产品。这就是问题发生时正在发生的事情。感谢您提供有关 CDC 的信息,不知道它是什么,但我会谷歌看看我能找到什么
    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2015-04-17
    相关资源
    最近更新 更多