問題タブ [lpc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
serial-port - ARM キールを使用した USB CDC
プロジェクトの一部として USB CDC を使用したいのですが、最も簡単な方法は何ですか?
私はキールアームでいくつかのプロジェクトを試しましたが、速度が遅すぎて、それには非常に多くの問題があります!
c - Storing CRC into an AXF/ELF file
I'm currently working on a C program in the LPCXpresso (eclipse-based) tool-chain on Windows 7, an IDE with gcc targeting the an NXP Cortex M3 microprocessor. It provides a simple way to compile-link-program the microprocessor over JTAG. The result of a build is an AXF file (ELF format) that is loaded by a debug configuration.
The loaded program resides in Flash memory from 0x00000 to 0x3FFFB. I'd like to include a 4-byte CRC-32 at 0x3FFFC to validate the program at start-up. I added another section and use the gcc __attribute__
directive to access that memory location.
To compute and store the CRC-32 value, my plan was to use SRecord with the following post-build steps:
This creates a binary with a checksum (necessary for bootloader) and then computes the CRC over the used Flash memory, storing the CRC value at 0x3FFFC.
However, I don't think I can load the binary file using the debugger. There is a built in programming utility with LPCXpresso that can load the modified binary file, however, that doesn't let me debug. I believe I can then try to start a debugging session with the original AXF file using "attach-only" mode, however, this becomes cumbersome.
I've been able to use readelf to inspect the crc32_build
variable in the AXF file. Is there a way to edit the variable in the AXF file? Is there an industry-standard approach to inserting a CRC as a post-build step?
arm - CAN の ACK スロット エラーを解消するにはどうすればよいですか?
CAN バスを使用して 2 つの LPC2129 マイクロコントローラーを接続しています。送信側からはメッセージを一気に送信しますが、受信側では受信割り込みが連続して実行されます。
受信割り込みよりも優先度の低い割り込みであるため、最初は ACK エラーが発生しますが、後で受信割り込みが連続して発生し、送信機から 1 回しか送信していないにもかかわらず、データも適切に受信されます。
詳細は次のとおりです。
この ACK エラーを解消するにはどうすればよいですか?
networking - 外部 DNS サーバーが使用されている場合、uIP DNS clinet が失敗する
uIP スタックを使用して、センサー データを含むリモート Web サーバーに HTTP 投稿を送信しました。DNS クライアントとして resolv.c (uIP の一部として含まれている) を使用して、リモート Web サーバーのドメイン名を IP アドレスに解決しています。ルーター (192.168.1.1) を DNS サーバー アドレスとして使用する限り、すべて正常に機能します。しかし、外部 DNS サーバー アドレス (Google のパブリック DNS サーバー 8.8.8.8 など) を使用しようとすると、解決に失敗します。ネットワーク設定が手動で構成されているコンピューターで同じ外部DNSサーバーを使用しようとしたため、ルーターのファイアウォールは除外され、問題なく動作します。私は長い間この問題に悩まされており、誰かがこの問題を解決するのを手伝ってくれるとありがたいです!
私のプラットフォームでは、RDB1768 (LPC1768 ベース) + LPCxpresso を使用しています。さらに情報が必要な場合はお知らせください。
c - LPC1788 マイクロコントローラが断続的に USB メッセージを送信しない
私は NXP LPC1788 マイクロコントローラー用のコードを開発しており、私の仕事の一部は、それをベースにした製品を USB 互換にすることです。ほとんどのレッグワークは完了しており、一般的に USB 経由の通信は CAN 経由とほぼ同じように機能します。
ただし、私が遭遇した問題の 1 つは、マイクロコントローラーから USB メッセージを一定の出力で生成し、これらのメッセージをかなり接近して送信すると、これらのメッセージの一部がドロップされることがあるということです。
PC側でメッセージを受信するためにWinUSBに基づいて作成したカスタムドライバーを使用していますが、最初は受信側に問題があるのではないかと疑っていました。ただし、USBLyzer を使用して、問題が送信側にあると確信しています。USBLyzer のログは、 WinUsb_ReadPipe()から取得したものから生成されたログと完全に一致します。
LPC1788 は USB 2.0 Full Speed プロトコルを使用しており、プローブを使用して約 12 MHz で情報が送受信されていることを確認しました。
デバイスは、論理エンドポイント 2 IN と論理エンドポイント 2 OUT の 2 つのエンドポイントを使用するように構成されています。これらはどちらも、最大パケット サイズが 64 バイトのバルク転送用に構成されています。
メッセージは少なくとも 500 ~ 600 マイクロ秒間隔で送信されていると思います (スレッドに人為的に 500 us の遅延を導入したため、メッセージの送信にかかる時間はそれよりもはるかに短くなります)。これは私が先週得たものです。デバッグ ツールが動作していないため、現在確認できません。
これは、マイクロコントローラーの USB 初期化コードです。
これは、マイクロコントローラが USB 経由でメッセージを送信するために使用するコードです。
編集
何が起こっているのかを理解するために、これは私の USB ドライバーの受信機能から生成されたログ ファイルです (USBLyzer のものは実質的に同じです)。
次のサイクルでメッセージを受信する必要があります。
このログから、サイクル内のメッセージの一部がスキップされていることがわかります。
編集2
以下に含まれるのは、USBLyzer によって生成された生のキャプチャ ログとフィルター処理されたキャプチャ ログからの抜粋です。私のドライバーはポーリング駆動型であり、タイムアウトを使用しているため、未加工のログはほとんどがキャンセルされた要求で構成されています。
生ログ:
フィルタリングされたログ:
c - LPC1788 で USB DMA エンジンを使用するにはどうすればよいですか?
私は NXP LPC1788 マイクロコントローラー用のコードを開発していますが、最近は USB の動作を改善しようとしています。USB に関する私の現在の問題は、USB がスレーブ モードで構成されていることです。通常の操作では大量のメッセージを送受信する必要があるため、CPU はほとんどの時間を USB の処理に費やしており、ボトルネックが発生しています。
スレーブモード構成から DMA モードに切り替えることで、この問題を解決しようとしています。サンプル プロジェクトを参考にしてきましたが、必要なコードのほとんどは適切に配置されていると思います。
以前と同様に、USB の初期化は正常に機能します。問題は、DMA モードで設定したエンドポイントに USB メッセージを送信しようとするとEpDMAEn
(レジスタの適切なビットを有効にすることによって)、そのエンドポイントに対して USB システム エラー割り込みが発生することです。これについて私が得ることができる唯一の情報は次のとおりです。
データの転送時、または DD のフェッチまたは更新時にシステム エラー (AHB バス エラー) が発生すると、対応するビットがこのレジスタにセットされます。SysErrIntSt は読み取り専用レジスタです。
プログラムのこの時点では、UDCA に触れたり、DMA 記述子をセットアップしたり、過去の初期化のようなものをセットアップしたりしていません。これは、USB バスで最初のメッセージが受信されるとすぐに発生するエラーであり、それを行う必要があると思います。
エンドポイント 2 の IN と OUT を使用しています。これは、最大パケット サイズが 64 バイトのダブル バッファ バルク エンドポイントです。
DMA を使用しない場合、USB は正常に動作することを確認しました。
DMA エンジンの初期化プロセスを実行し、エンドポイントを DMA モードではなくスレーブ モードに設定すると、USB が正常に動作することを確認しました。
Example Projects
-> NXP
-> LP17xx
- >の下にある USB 大容量ストレージの例177x_8x CMSIS
は、デフォルトの構成を使用すると正常に動作することを確認しました。
これを次のように変更すると、同じように壊れます。
USB ハードウェア ソース ファイルの先頭に、次のように記述します。
次のコードで USB 周辺機器を初期化します。
私のUSBリセットコード:
準備ができたら、これを使用して USB を実行します。
最後に、私の USB 割り込みルーチン:
私が理想的に探しているのは、DMA エンジンを使用した USB メッセージの送受信を示す LPC1788 で実行できる私のコードまたは実際のサンプル プログラムのいずれかにエラーを見つけることができる場合の解決策です。
また、AHB バス エラーの原因についての情報もいただければ幸いです。
編集
以下のTurbo Jの回答への回答:
UDCAのアドレスを確認してください。必要なアラインメントは非常に厳密で、256 バイトの IIRC であるため、アドレスは LDB として 0x00 で終わる必要があります。GCC では、リンカー スクリプトで USB_RAM セクションをサポートする必要があります。
私の USB ハードウェア ヘッダー ファイルには、次のものがあります。
LPC_PERI_RAM_BASE
値は 0x20000000UL です。
私のソースファイルには、次のものがあります。
USB_EP_NUM
32 はどこですか。
したがって、UDCA は RAM メモリ ブロックの先頭から始まる 128 バイトの配列である必要があると思います。
c - マイコンで画像受信
LinkSprite JPEG Color Camera と LPC1768 mbed マイクロコントローラーを購入しました。「LinkSprite」カメラで画像をjpeg形式で撮ることができ、提供されたチュートリアルに従って、これらの画像をデスクトップに転送して見ることができます.しかし、これらの画像を「LPC1768 mbed」マイクロコントローラーで処理したい.たとえば、ループしたいその画像の各行と列を使用して、色を一致させます。画像全体を 2D 配列に受け取り、配列をループして red のような色と一致させる方法を教えてください。データがどのように見えるかを画像に転送するときの別の問題。ff d8 ff e0 00 10 ...........40 c6 81 90 b9 aa ee 68 19 ff d9. jpeg 画像は ff d9 で始まり、ff d9 で終わることがわかっています。しかし、これらの値の中からピクセルを特定するにはどうすればよいですか? また、色が赤色と一致するかどうかを比較するにはどうすればよいですか?
カメラが写真を撮り、画像をバイト単位で転送するためのコード
JPEGCamera.cpp 内
}
「processPicture」関数で画像バイトを配列に格納する方法はありますか?? 保存された画像を簡単に読み取る方法はありますか???