SPIのクロック(SCK)について

お世話になっております。
Sugachanceです。

・Synergy S128 
・Renesas Synergy Software Package (SSP) v1.4.0 with e2 studio 6.2.0 1.4.0

で、とある通信モジュールと簡易SPI(ch0,モード1)で通信しようとしていて
嵌ってしまっています。

通信できる出来ないは、いつもの自分の何らかのミスだと思いますが
オシロで波形を見たところ、
SCKのところで
通信用の波形(という言い方が正しいかどうかわかりませんが)
の前に、100usほどの山が見られました。

g_spi0.p_api->open(g_spi0.p_ctrl, (spi_cfg_t *)g_spi0.p_cfg);

を実行したときに出るようなのですが、そもそもこの波形は
SPIとして正しい(なるべくしてなっている、プログラム通り)
のでしょうか。

因みに通信モジュール自体は他のマイコンでSPI動作確認しています。

サポートに問い合わせてもみますが、何か情報をお持ちの方がいらっしゃれば、お願いいたします。

  • わわいです
    そのCPUではなく、RZ/A1の場合のはなしですが、
    ポートの機能指定に、4つほどのレジスタの書き込みが必要となっていまして、初期化ルーチンで、その4つのレジスタの書き込み途中で意図しない出力がなされないようにするために、いったんそのピン機能を入力モードにしておいて、改めて機能指定の書き込みを行う、ということをする必要がありました
    もしかして、そのパルスは入力モードになったときに出るもの、あるいはピンの機能設定中にどうしても出てしまうたぐいのものじゃないかと思ったりしますがどうでしょうか
  • SCK端子がプルアップされていると、入力設定になった場合は赤〇で囲んであるようにHIになったりしませんか、でもオープンする時にSCKの端子を入力に設定する必要があるのか疑問ですが、意図されない出力をしないようにデータレジスターに書き込んでおいて、それから方向レジスターに書き込むようなことをしたりします、それから機能を設定するようなことをします

  • わわい様、IKUZO様

    情報、ご意見ありがとうございます。
    ピン設定周りなんですかね。
    Synergyはソフトウェア周りを(コード生成も含め)保証しているのが
    ポイントの製品なので”仕様”の可能性もありそうで…
    いじると契約が必要ですし…

    とりあえずモジュールとの通信の目的は
    シーケンスをうまくずらして達成できました。

    公式の回答が得られたら報告いたします。
  • わわいです
    イニシャルとかOpenはリセットスタート直後に一回だけ実行するようにしましょう
    Closeなんかは実行の必要がないでしょ
  • 公式の回答は
    >SPI モードレジスタ(SPMR)のCKPOLビットの初期値0により、SCKがHighとなります。
    >その後、同open APIにおいて、コンフィグレーションで指定されたClock Polarity = Low when Idleの設定に従い、SPMR.CKPOL=1となることで、SCKがLowになります。
    >これにより、ご報告頂いた波形となっています。
    で、シーケンスを考えてSSでしっかり制御してねとのことでした。

    わわい様
    仰る通り、openは最初一回だけの実行だったのですが、
    サンプルが逐一open→closeしていたのと、
    通信がうまくいかなかったときに、
    closeを入れてみたらうまくいった(実際は他の部分を変えたことによる成功)
    ので、毎回open,closeしていました(汗
    1つずつ検証しないとだめですね・・・