SPI通信導入を試みていますがSCK信号が出力されません

初めまして、R.Yと申します。

現在わけあって既にUART通信を行っているRL78/F15のプロジェクトにSPI通信を導入することを試みています。
UART通信はSAU0で行い、SPIはSAU1で行う予定です。

Renesas製品の開発に不慣れなため、題記のような症状が発生しているのか原因が分かりません。
有識者の皆様にお伺いしたいのですがざっとこのようなエラーが生じうるケースを教えていただけないでしょうか。

また、以下の内容は確認しおそらく合っていると思います。

・PMC、PM端子などCLK出力端子から兼用機能を使用できるようレジスタ設定を行った
・PIORを狙った端子からCLK出力ができるよう設定した
・初期化時にR_SAU1_Create()、R_CSI11_Start()を実施した
(どちらもコード生成にて狙った端子でSPI通信ができるよう「シリアル」「ポート」を設定し生成された関数です。)

一つ懸念している点として、既存のプロジェクトのR_CGC_Create()の内容が生成したコードと重複する点があり、
これらがCLK出力を妨げているのではと疑っています。

生成コードにて上記関数内でCLK出力を行うために欠かせない設定などはありますでしょうか。

どうか皆様のお力をお貸しください!

Parents
  • チョコです。

    >一つ懸念している点として、既存のプロジェクトのR_CGC_Create()の内容が生成したコードと重複する点があり、
    >これらがCLK出力を妨げているのではと疑っています。

    SAUで、R_CGC_Createの設定がCSI11のSCK11信号の出力を妨害するようなことはないはずです。R_CGC_Createはクロック発振を制御するだけです。SAUは発振されたクロックを使用して、SAUのプリスケーラとチャネルのSDRレジスタの上位7ビットで指定した値で分周して通信速度を指定するだけです。

    >・PMC、PM端子などCLK出力端子から兼用機能を使用できるようレジスタ設定を行った

    これ以外にSCKをを出力するには、ポートの出力ラッチを1に設定する必要があります。「4.5 兼用機能使用時のポート・モード・レジスタ,出力ラッチの設定」には以下のように記載されています。

    R_SAU1_Createの指定でSCKは出力(マスタ)に設定していますか。

    >・PIORを狙った端子からCLK出力ができるよう設定した

    普通はPIORを使うことはないはずなのですが、P71をSCK信号で使用しないのでしょうか。PIORの設定を眺めると、下に示すように100ピン以上でないとリダイレクト機能は使えないですね。

    >初期化時にR_SAU1_Create()、R_CSI11_Start()を実施した

    これだけでは、CSI11の動作モードを設定して、動作可能にしただけです。SCK11はマスタとして送信データをCSI11を書き込まないと通信は開始しないのでクロックは出力されません。

    具体的な設定が分かれば、確実なことが言えるようになるのですが。

    以上

  • 皆様ご回答いただきありがとうございます!

    一通りいただいたご意見にご回答させていただきます。

    >恐らくですがR_CGC_Createが呼ばれるタイミングのせいでCLK出力がGPIO初期化のAPIの実行のためピン設定がGPIOへ戻されているだけです。(中略)つまり、main関数に入る前にそうなってしまうということです。RXマイコンでスマートコンフィギュレータの場合はそうなってしまいました。方法としてはmain関数に入った後にCLK出力ピンのモードレジスタを再度、変更してやることでCLK出力が出ます。

    承知いたしました。R_SAU1_Create()をmain関数遷移後に移動させてみます。

    >SAUで、R_CGC_Createの設定がCSI11のSCK11信号の出力を妨害するようなことはないはずです。

    ありがとうございます、ひとまずこちらは懸念から除外します。

    >R_SAU1_Createの指定でSCKは出力(マスタ)に設定していますか。

    P70,71,72ポートを使用してSPI通信を行う予定ですが、SCK11出力させる予定のP71レジスタは
    最終1で更新されているため出力に設定されているはずです。

    以下に該当のコードを添付します。

    これだけでは、CSI11の動作モードを設定して、動作可能にしただけです。SCK11はマスタとして送信データをCSI11を書き込まないと通信は開始しないのでクロックは出力されません。

    そうなのですね。
    てっきりレジスタ設定をしてR_CSI11_Start()を実行すればCLK信号は出力されるものだと勘違いしていました……。
    データ送信はCLK信号を確認してから、と思っていたので実際にデータ送信を試みてみます。
    ※ちなみにデータ送信を行っていない状態のSCK端子はHigh状態であるのは正しいでしょうか?

    皆様ご協力いただき感謝します。
    引き続きよろしくお願いいたします。

    また、本件に関連して初心者が陥りやすいケアレスミスなどもご教示いただければ幸いです。

  • チョコです。

    >※ちなみにデータ送信を行っていない状態のSCK端子はHigh状態であるのは正しいでしょうか?

    CSI11のSCR11の設定をどのように設定したかに依存します。ハドウェア・マニュアルの「 」に以下のように記載されています。SCK11の状態は以下の表を見てください。

    >>恐らくですがR_CGC_Createが呼ばれるタイミングのせいでCLK出力がGPIO初期化のAPIの実行のためピン設定がGPIOへ戻されているだけです。

    これはありません。R_CGC_Createでは、外部クロック発振回路または入力を設定するだけで、他の機能出力関連の設定は行いません。

    以上

Reply
  • チョコです。

    >※ちなみにデータ送信を行っていない状態のSCK端子はHigh状態であるのは正しいでしょうか?

    CSI11のSCR11の設定をどのように設定したかに依存します。ハドウェア・マニュアルの「 」に以下のように記載されています。SCK11の状態は以下の表を見てください。

    >>恐らくですがR_CGC_Createが呼ばれるタイミングのせいでCLK出力がGPIO初期化のAPIの実行のためピン設定がGPIOへ戻されているだけです。

    これはありません。R_CGC_Createでは、外部クロック発振回路または入力を設定するだけで、他の機能出力関連の設定は行いません。

    以上

Children
No Data