0

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

以前的程序员(不再与公司合作)使用名为 AT91BootDLL.dll 的 dll 文件来扫描 USB 端口以查找 ateml 处理器并获取其句柄。然后它可以打开 USB 连接并执行各种操作,例如读取、写入等。这一切正常,但时不时地它无法再找到任何连接的东西。发生这种情况时,我无法再通过 USB 将任何东西连接到 PC,因为 Windows 无法检测到它。然后我必须关闭 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;
}
4

1 回答 1

2

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

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

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

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

于 2012-12-14T10:12:11.933 回答