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ピンを監視する方法があれば教えて頂けますでしょうか?

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

コメント

中村です。

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割り込みですかね。

--
なかむら

中村様

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

中村です。

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

昨晩、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だと思います。

--
なかむら

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

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

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

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

畑と申します。

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

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

畑様

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