我正在调整一些测试软件,用于通过USB将.bin文件上传到我们的产品中。该产品具有Atmel AT91SAM7X256处理器。该软件全部用c#编写,并在Windows XP机器上运行。
以前的程序员(不再与公司合作)使用名为AT91BootDLL.dll的dll文件扫描USB端口以获取ateml处理器并获取其上的句柄。然后它可以打开一个USB连接,并做各种事情,如读,写等。这一切都很好,但偶尔它不能再找到任何连接。当发生这种情况时,我无法再通过USB将任何东西连接到PC,因为Windows无法检测到它。然后我必须关闭PC,当这个窗口决定冻结时。
我需要深究它,因为我对这个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;
}
答案 0 :(得分:2)
您可以在此下载最新的SAM-BA套件,以确保您拥有最新版本的所有内容:
http://www.atmel.com/tools/ATMELSAM-BAIN-SYSTEMPROGRAMMER.aspx
但是看看上面的代码,它几乎依赖于Atmel提供的例程。调用逻辑和/或固件中可能存在其他错误,但除非您发布完整代码,否则我认为任何人都无法帮助您。如果您不想发布它,可以尝试Atmel工程,如果您是批量客户,那么支持就可以了。
我个人总是使用CDC接口为AT91SAM系列编写自己的引导加载程序,将新映像从主应用程序写入外部FLASH,然后设置一个标志并重新启动以加载它以消除外部依赖关系,但这是一项相当大的工作。