Armadilloフォーラム

SPI通信でのMISOピン状態監視

nic-segawa

2016年12月14日 13時44分

お世話になります。

Qt4にてSPI通信を使用していますが、通信相手のADコンバーターがMISOピンのHIGH/LOW状態で送受信の可否を通知する仕様となっています。
MISOピンがHIGHの時は送受信不可で、LOWになった時に送受信可能となります。
MISOピンのHIGH/LOW状態を監視することは可能でしょうか?MISOラインを分岐し、GPIO割り込みとして検知するのが1つの方法だと思うのですが、直接MISOピンを監視する方法があれば教えて頂けますでしょうか?

よろしくお願い致します。

コメント

y.nakamura

2016年12月16日 1時48分

中村です。

A/D変換データの準備ができたというRDY信号と
MISOが共通の1つのピンになってるやつですね。

たぶん、MISOのラインをSPIのRDYピンにも入れてあげて、
SPIの設定(CONREG)のbit9-8(DRCTL)を01にすれば
いいんだと思いますが、2.6.26-atXも3.14-atXも
ドライバソースをざっと見たところでは、
RDY信号には対応してないみたいです。

i.MX25のリファレンスマニュアルのCSPIの説明には、
次のように書いてあります。

18.4.3.1.1 Master Mode with SPI_RDY
...
If CONREG[DRCTL] is set to 01, the SPI burst can be triggered only if a falling edge of the SPI_RDY
signal has been detected. Figure 18-14 shows the relationship between a SPI burst and the falling edge of
SPI_RDY signal.

ドライバをいじらないのであれば、
手っ取り早いのはGPIO割り込みですかね。

--
なかむら

nic-segawa

2016年12月16日 8時47分

中村様

ご回答ありがとうございました。
ドライバを変更しない状態では対応していないんですね。
GPIO割り込みで対応する方が早そうなので、そちらで検討してみます。
ありがとうございました。

y.nakamura

2016年12月16日 10時31分

中村です。

質問内容からは外れるので別スレッドにした方がいいのかもしれませんが、
ここにぶら下げさせてもらいます。

昨晩、3.14カーネルのドライバソースと、Armadillo-400シリーズの
ソフトウェアマニュアルのSPIのところを読んでいて、
誤記かな?と思うところがありましたので、書いておきます。

http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_soft…
のカーネルコンフィギュレーションの最後のあたり、

<*>   Freescale i.MX SPI controllers            <SPI_MXC>
      *** SPI Protocol Masters ***

のSPI_MXCはSPI_IMXだと思います。

--
なかむら

at_yashi

2016年12月16日 11時39分

Linux カーネル 2.x から 3.x に変わるときに、CONFIGの名前が変更になったみたいですね。

a400の Linux 3.14 用 (v2)、aiot g2, g3, x1 のドキュメントを修正して起きます。

a400の Linux 2.6.x用 (v1)と aiot g1 は、そのままで。

ありがとうございました。

toshiya_hata

2016年12月16日 8時59分

畑と申します。

当方の場合、Armadillo-810 Cベタ書きの事例で恐縮なのですが、SPI通信をただのGPIOのソフト制御で書いてしまっています。
これならGPIOにアサインできるピンを使い放題で少々プロトコルに癖があっても自分で対処でき、速度もGPIOの制御方法次第で400kbps程度出せます。単純に数バイト読むだけなら10行余りですし。
(Armadillo-810 driverからgpio_set_value()/gpio_get_value()を呼び出し、速度はgpio_set_value()で空書きして調整…しようとしてノーウェイトで落ち着いた例)

もしも嵌りそうになったら、案(B)にでもご検討ください。

nic-segawa

2016年12月16日 9時15分

畑様

各ピンをGPIOで制御する方法もあるのですね。
参考にさせて頂きます。
ありがとうございました。