2016年12月21日水曜日

青色(lpc1768) 黄色(lpc11u24)でspi使用時の注意点

こんばんは、

mbed アドベントカレンダー2016 21日目ですね。

明日はやましょうは渋谷で飲んだくれている予定です。
お近くの方はお呼びください。
今年も、皆様、お世話になりました。mbed関連でもかなりのお仕事ができた年でした。
これも一重に皆様のご協力のおかげと思っております。m(_ _)m


さて私も大好きな青mbedというか黄色mbedと言うか
元nxpのマイコンのspiはちょっと独自でなので注意が必要です。

通常Spiで自分がMasterモードであれば、MOSI側が出力ポートのままである筈と思いますよね。
(STも旧フリスケも出力のままですしね。)
どうもnxp(旧NXP)のマイコンは違うらしく、MOSIはOPENになるっぽいのです。
(ブロック図欲しい。)
でもこれ英語版のwikiペディアではこで良い様な波形が紹介されているのです。
なのでバグってことではなく意図的にこの様になっている模様です。

















上からCS / CLOCK /DATA 出力/DATA 入力の順で
手でピン触りながら波形を計測するとこんな波形がとれます。
なので、ハード的にPULL-UPするか?PULL-DOWNするか?
しておかないとぷらぷらになっちゃうんです。
これ相手のマイコンも入力なので、かなり深刻になるかも?
と言うことで注意しましょうね。

ちなみにフリスケFRDM-K64ではこんな波形になります。


















今回チェック用に作成したコードはこんな感じ
#include    "mbed.h"

Serial      PC(USBTX,   USBRX);                 /* PC UART         */
SPI spi(p5, p6, p7); // mosi, miso, sclk
DigitalOut cs(p8);
/* //////////////////////////////////////////////////////////////////////// */
/* // メイン処理 ////////////////////////////////////////////////////////// */
/* //////////////////////////////////////////////////////////////////////// */
int main(void)
{
    //// PC 通信設定  ////////////
    PC.baud(115200);                             /* PC間フォーマット設定 ボ-レート */
    PC.printf("Progam Start!\n");
    spi.frequency(10000);
    while( true ) {
        if ( PC.readable() )
        {
             uint8_t OutData = PC.getc();
             PC.printf("Data:%2x\n",OutData);
             cs = 0;
             spi.write( OutData );
             cs = 1;
        }
    }
}


ということで注意しよう、SPI時、MOSI OPEN NXP(旧フリスケを除く)

以上
やましょうでした。