7 years, 5 months ago.

LPC1114FDHでSPISlaveが動かない。

お世話になっております。 LPC1114FN28が流通しなくなり、変わりにLPC1114FDH28が流通しだしたので、こちらを使っています。

LPC1114FDH28で電圧を監視して、SPIslaveで外部の要求に対応するよう考えていたのですが、サンプルプログラムどおりのコードを入れて様子を見てもコードどおりの反応が得られませんでした。

SPIslaveを定義した後、mainの中でUARTでコードの通過箇所を出力したところ、どうやらmainにはいる前に止まってしまっているようです。

LPC1114FN28ではSPIslaveは正しく動いているのでしょうか。 過去の情報では、LPC1114FN28でSPIslaveが動かないバグを修正したといった報告があり、デバイス依存の問題なのかソフトの問題なのかを切り分けたいです。

確認できる方、よろしくお願いします。

1 Answer

7 years, 4 months ago.

シリアルコンソールに、「pinmap not found for peripheral」と表示されているのであれば、ポートの指定が正しくありません。 そうではなく、main()関数に到達しないのであれば別の原因が考えられるので、現象が再現するコードをお送り下さい。

LPC1768をマスター、LPC1114FN28をスレーブにしてテストしましたが、特に問題なく動作しました。スレーブ側のコードを以下に示します。

// Reply to a SPI master as slave

#include "mbed.h"

SPISlave device(P0_9, P0_8, P0_6, P0_2); // mosi, miso, sclk, ssel
Serial pc(USBTX, USBRX);

int main() {
    pc.printf("SPISlave test start.\n");
    device.reply(0x00);              // Prime SPI with first reply
    while(1) {
        if(device.receive()) {
            int v = device.read();   // Read byte from master
            printf("%d ", v);
            v = (v + 1) % 0x100;     // Add one to it, modulo 256
            device.reply(v);         // Make this the next reply
        }
    }
}

ありがとうございます。この後自己解決していました。 SPIをスレーブで使うときはデバイスマニュアルのSPIblock通りのピンアサインでなければ動作しないことに気づきまして、デバイス単体でチェックしたところ、動作を確認しました。 レスポンス、ありがとうございました。

posted by Makoto Yamada 14 Feb 2017