SPISlave.receive()の動作について

21 Oct 2016

SPISlave.receive()の動作について

毎度お世話になっています。 SPISlave.receive()が上手く動作せず悩んでいます。 mbedLPC1768のSPI1とSPI2を直に接続して実験中ですが、SPISlave.receive()が常時0のままのようです。 この関数をコメントアウトすると正常に動いています。 使い方が悪いのかもしれませんが、なにか情報がありましたらお教えください。 https://developer.mbed.org/users/moo/code/_1768_SPI_Test2/

22 Oct 2016

こんにちは。

以下のように、csをマスタの書き込み単位で制御するようにすれば、スレーブのreceive() が期待した値を返しました。

int main() {
    mst.frequency(19200);
    mst.format(8,3);
    slv.frequency(19200);
    slv.format(8,3);
    cs = 1;
    pc.printf("start\r\n");
 
    for (int i=0; i<0xff; ++i) {
        cs = 0;
        mst.write(i);
        cs = 1;
        if (slv.receive()) {
            int v = slv.read();
            pc.printf("%02x  ",v);
        }
        wait(0.1);
    }
}
24 Oct 2016

Wataraiさん。 1バイト事にCSの上下が必要と言う事ですね。 了解しました。 いつも有り難うございます。 ちなみにこれはスレーブ側はハード的にエッヂが必要と言う理解で構いませんか?

24 Oct 2016

vics66@... wrote:

ちなみにこれはスレーブ側はハード的にエッヂが必要と言う理解で構いませんか?

ターゲットに依存するようです。GR-PEACHで同じプログラムを実行したところ、CSがベタLowでもスレーブ側の receive() 関数は1フレーム受信する毎に1を返しました。

24 Oct 2016

「実際に動かして確認しながら」と言う事ですね。 了解しました。 わざわざ他の環境での動作確認までしていただき有り難うございました。