0

私は、.bin ファイルを USB 経由で当社の製品の 1 つにアップロードするために使用されるいくつかのテスト ソフトウェアを採用しています。製品には Atmel AT91SAM7X256 プロセッサが搭載されています。ソフトウェアはすべて c# で書かれており、Windows XP マシンで実行されています。

以前のプログラマー (もう会社にはいない) は、AT91BootDLL.dll という dll ファイルを使用して、ateml プロセッサの USB ポートをスキャンし、そのハンドルを取得します。次に、USB 接続を開き、読み取り、書き込みなどのさまざまなことを実行できます。これはすべて正常に機能しますが、接続されているものを見つけることができなくなります。これが発生すると、Windowsが検出に失敗するため、USB経由でPCに何も接続できなくなります。次に、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;
}
4

1 に答える 1

2

ここから最新のSAM-BAキットをダウンロードできるので、すべての最新バージョンがあることを確認してください。

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

しかし、上記のコードを見ると、Atmelが提供するルーチンにかなり依存しています。呼び出しロジックやファームウェアに他のエラーがある可能性がありますが、完全なコードを投稿しない限り、誰もあなたを助けることができないと思います。投稿したくない場合は、Atmelエンジニアリングを試してみてください。ボリュームのあるお客様であれば、サポートはOKです。

個人的には、CDCインターフェイスを使用してAT91SAMシリーズ用の独自のブートローダーを常にコーディングし、メインアプリケーションから外部FLASHに新しいイメージを書き込み、フラグを設定して再起動し、外部の依存関係を取り除くためにロードしましたが、それはかなり大規模な事業。

于 2012-12-14T10:12:11.933 に答える