2

この質問は、Freescale i.mx デバイス (具体的には i.MX535) で SDMA エンジンを実行することを扱います?

UART から 32 バイトを超えるパケットを受信し、SDMA エンジンで自動的に取得したいと考えています。これは可能ですか?SDMAの使用に関する追加情報を持っている人はいますか?

編集:私の状況と問題についてもう少し具体的に説明します。

独自の SDMA スクリプトを読み込んで実行することができました。テストベンチは、

  1. UART2 で UART 通信 (9600、raw) をセットアップします (標準の Freescale UART ドライバーは使用しません)。
  2. しきい値レベル 16 で UART2 rx dma 要求をセットアップします。
  3. UART 2 外部メモリのようなスクリプトを実行する UART2 の SDMA チャネルをセットアップします。

このセットアップは、32 バイト未満のパケットではうまく機能しますが、サイズが 32 バイトを超える場合、データはRX FIFO Overrunビット セットでドロップされます。UART2 で SDMA を有効にして標準の Freescale UART ドライバを使用すると、同じエラーが発生します (UART からステータス レジスタをDMA ERRORラベルで出力します)。

Q1. 誰かが UART2 のような通常のUARTで 32 バイトを超えるパケットを受信できましたか? 私のスクリプトにバグがあることを暗示しています。

通常のUART は、SDMA コアに直接接続されている共有 UART であることをどのように示しますか。この UART スクリプトを UART3 でもテストしました。私の結論と考察は次のとおりです。
まず、標準の Freescale UART ドライバーと、標準のスクリプトを使用して SDMA を有効にしてテストします。これは、32 バイトを超えるパケットと 1MHZ のボーレートで問題なく動作します。したがって、これを自分のスクリプトと UART ドライバーで動作させたいと思っていましたが、UART3 RX レジスタから読み取るスクリプトを作成できません。

Q2. 誰かが共有 UART からデータを読み取るスクリプトを作成しましたか?

4

2 に答える 2

2

この種の情報を得るには、最初に生まれた人をフリースケールに売却する必要があります。彼らは多くの内部文書を持っています。答えを得るのは簡単なことではありません。

このリポジトリを取得してみてください: git://git.pengutronix.de/git/imx/sdma-firmware.git

ROM には、理解する必要のある API を備えたさまざまなルーチンがあります。一般に、何かを変更したい場合、そこにすべてのコードを配置するのに十分な RAM がありません。Sasha の逆アセンブラを使用して、バイナリの 1 つを微調整してみてください。

IMX25リファレンスには、SDMA コントローラーに関するより多くの公開ドキュメントがあります。IMX53のリファレンス マニュアルでは、SDMA についてはほとんど触れていません。

于 2013-02-28T18:02:37.337 に答える
2

誰かが共有 UART からデータを読み取るスクリプトを作成しましたか?

共有ペリフェラルからデータを読み書きする場合は、内部 SDMA RAM (0x1000-0xFFFF) のメモリ マップされた「ペリフェラル x メモリ空間」領域を介してデータにアクセスする必要があります。したがって、私の場合、0x3000 内部 sdma RAM へのアクセスは、UART3 RXD レジスタからデータを読み取ります。

于 2013-03-04T13:09:23.090 に答える