[Armadillo:06887] Re: armadillo-420のCSPIでDMAする方法について

Takenoshita Koyo email@hidden
2011年 3月 14日 (月) 16:49:24 JST


竹之下です。

> 私も8byteづつに区切ってやってみましたが、8byte受信後次の受信に
> 入るまでに数ms使ってしまっています。
> この間、SSは下がりっぱなしです。
> つまり、先頭の8byteだけクロックが出た後、かなり長くSSが下がっていて
> 上がったあと次の8byteという動作です。
これは、i.MX25 の SPI コントローラの仕様によるものです。

i.MX25では、Control Register (CONREG)の BURST LENGTHには、一回の
チップセレクト信号アサート(バースト)で転送するビット数を、XCHを1
にする前にセットしておかなければなりません。
    
しかし、現在のSPIスタックでは、転送を開始する前に一回のバーストで
転送するビット数を知るのは難しいです。これは、連続したSPIの転送を
おこなう場合、struct spi_messageに複数のstruct spi_transferをセット
しておこなうようになっているのですが、struct spi_transferが複数ある
場合、一つずつバラバラにmxc_spiドライバに渡されるようになっているためです。

この問題を回避するために、チップセレクトの制御は i.MX25 SPIコントローラで
行わず、GPIOを使ってソフトウェア的に行っています。その影響で、1転送ごとに
「SS信号が下がりっぱなし」という状況が発生しています。

> ーーー
> 以前、別なCPUで自分でSPIドライバを作った事がありますが、bitbangingと
> いうのは知らずに作っていました。
> 今回のarmadilloの実装ではこれを使っているようですが、何で必要なのか
> 今ひとつ解らずにいます。
> ーーー
i.MX31(Armadillo-500シリーズ)とi.MX25(Armadillo-400)シリーズで共通のドライバ
とするために、共通レイヤとしてbitbangを使っています。先のメールで書いた、
>> 32bit以上の長さでバーストさせるとなるとかなり修正が必要になりそうです。
というのが、bitbangを使わずに書き直すという案です。

> 以上のように、クロックを上げても、SSが下がったままクロックの出ない区間が
> 長すぎる為、意味がなさそうです。
ご指摘の通りです。

> SS区間を短く出来れば良いのですが、実装を追いきれていないのでどこがボトル
> ネックなのか突き止め切れていません。
> 
> 何か良い方法があればご教授下さい。
今すぐには良い案が思いつきません。少し考えてみます。

-- 
Koyo Takenoshita




armadillo メーリングリストの案内