6 Replies Latest reply on Sep 17, 2020 3:50 AM by TakashiM_61

    S6E2H14Fのデバッグに関して

    TeMa_2997106

      S6E2H14F0AGV20000を搭載した基板(以下、「試作基板」と表記)に対してデバッグができません。

      以下状況を踏まえて、質問があります。

       

      [症状]

      試作基板に対してJTAGコネクタからデバッグしようとした際、

      uVisionから「Load」を選択すると、『Flash timeout. Reset the target and try it again.』が表示されロードが行えない。

       

      [状況]

      ・SW開発はCypress社のFM4評価ボード(FM4-120L-S6E2HG, 以下、「評価基板」と表記)で行い、

       評価基板に対してCMSISおよびULINK Pro Dからロードおよびデバッグ動作は確認済み(prj1)。

      ・uVision上でデバイスをS6E2H14Fに変更し、SW層はそのまま移植した試作基板用プロジェクト(prj2)を作成。。

       (ピン配置はS6E2H14Fをベースに決定しているので問題ないと見ています。)

      ・prj2をJTAGから試作基板へロードすると上記症状が発生。

       ただし、タイミングによってはロードが成功することもあり。(再現性は伺えず)

      ・評価基板上のR13(0Ω)を外して外部発振器を停止させ、JTAGからロードを行うと、

       上記症状と同様のエラーメッセージが発現し、prj1の書込みに失敗。

       (試作基板のマイコンは外部発振子を備えていません。)

       これにより、内部発振器とJTAGクロックの速度差が原因であると推測。

      ・JTAGクロックは1MHzがデフォルト設定。

       評価基板に対してJTAGクロック500kHzでprj1ロード失敗。200kHzでロード成功を確認。

       

      [質問]

      上記状況より動作クロック周波数の差異によりロードエラーが生じていると見ています。

      この推測は正しいでしょうか。他に原因はありますでしょうか。

       

      また、これが原因である場合、試作基板でデバッグを行う際にどのように対策すればよいでしょうか。

      ロード時のみJTAGクロック周波数を落としてあとから上げる、

      マイコンの外部発振子用端子から線を引き出しパルジェネなどで外部発振子を模擬する、

      などは可能でしょうか。

       

      宜しくお願いします。

        • 1. Re: S6E2H14Fのデバッグに関して
          TakashiM_61

          評価基板上のR13(0Ω)が正しい確認方法かどうかは判断しにくいですが、JTAGが繋がらない事象に対してJTAGのクロックを落としたりします。これはデバイスからJTAGのコネクタまでの配線長が長い、デバッガーからHost PCまでのケーブルが長い等が考えられます。

          もし、クロックを落として使用できるのであれば、そのままお使いください。

          • 2. Re: S6E2H14Fのデバッグに関して
            TeMa_2997106

            ご回答ありがとうございます。

             

            R13の抵抗ですが、抵抗を外したことは本質ではなく、メインの外部発振器を停止して動作させたことがポイントと考えています。

            (R13の取り外しにより、オシレータを機能的に停止させられると見ています)

            ちなみに、R13を再度短絡させると問題は解消します。

             

            配線長やケーブルの点についてですが、配線長はデバイスのそばで、実質長さは1cm程度です。おそらく問題ではないと考えます。

            デバッガはKeil社のものを用いてますので、これも問題ないという前提えす。

             

            試作基板において、X0端子から線を引き、Function Generatorを用いて4MHz矩形波を入力したところ、

            ロードの問題が解消しました。あくまでデバッグ処理で、ですが、状況だけを見る限り、

            外部発振器がないとデバイスが処理を開始しないようにとらえられます。

             

            現行の試作基板は外部発振器を設けておらず、内部の高速CRのみで動作させたいのですが、

            そもそも外部発振器を設けず、内部発振器のみで動作させることは可能なのでしょうか。

            可能ならばどのような処理が必要になるかご教示いただきたいです。

             

            以上です。

            • 3. Re: S6E2H14Fのデバッグに関して
              TeMa_2997106

              本件、ご進捗はいかがでしょうか。

               

              外部XTALを接続せずに内蔵CR発振のみで動かす際の注意点はありますか?

               

              デバッガの接続でうまくいかないとすれば、既に何かプログラムが書き込まれていて、

              そのプログラムがデバッガがつながる前に外部クロックに切り替えてしまって、

              その時点で外部クロックは存在しないのですべてが停止する、

              ということではないかと思うのですが、いかがでしょうか。

               

              仮に上記が正しい場合のWork aroundが何かをご教示ください。

              (過去の事例で、FlashをEraseして動作したことがあったようなのですが、オペレーションとして正しいのでしょうか)

              • 4. Re: S6E2H14Fのデバッグに関して
                TakashiM_61

                試作基板では外部発振子ではなく、内部CRを使用するという事ですね。

                先ず、お使いのFirmwareでクロックの設定が内部CRを使用するよう設定されているか、確認してください。

                以上、宜しくお願い致します。

                • 5. Re: S6E2H14Fのデバッグに関して
                  TeMa_2997106

                  コメントありがとうございます。

                   

                  内部CRを使用することになったとしても、最後に書き込んだFWが外部発振器で動作させる設定であった場合、

                  その次にデバッガから書き込む際、並びにデバッグを行う際は外部発振器が必要になるのではないでしょうか。

                  (前回内部発振器で動作するFWを書き込んでいた場合はデバッガ経由での書込みとデバッグに外部発振器が不要であることは試作基板で確認)

                  →あくまで経験則からの認識です。相違あればご指摘ください。

                   

                  また、Firmwareでのクロック設定に関しては、

                  uVisionでのプロジェクト生成時に生成されるファイル(system_s6e2h1.c/h)が

                  元々外部発振器で動作するする設定となっていましたので、以下変更を行いました。

                  ・システムクロックモード制御レジスタ(SCM_CTL)設定値を0x520x10

                   

                  その他レジスタは変更を行っていません。この変更により、外部発振器未接続でもSW動作が行えている様子は伺えましたので、最低限内部CRを使用する設定は行えているものとみています。

                   

                  ただし、一点問題がありまして、追加で問い合わせさせていただきたいことがございます。

                  この内部高速CRで動作させて、I2Cを使用したところ、SCLとSDAの波形にズレが生じ、外部素子を正常に動作させることができませんでした。通常SCLのHighエッジでSDAの読み取り、LowエッジでSDAの更新、と認識しているのですが、SCLが位相遅れもしくは位相反転して、SCLのHighエッジでデータの更新が行われるような波形となっていました。

                   

                  同FWを同基板同素子に対して、外部発振器を用いて操作したところ、認識通りの波形が観測でき、素子を正常に動作させられていることが確認できました。

                   

                  外部発振器で動作している以上、内部発振器を用いていることに原因があることは明白かと思います。一般的に内部発振器を用いる際に、内部CRを使用する設定以外に追加で設定および確認が必要なレジスタがあるのではないかと考えていますが、どれが該当するのかいまいちつかめていません。内部発振器を用いる際に、クロック源変更以外にしなければいけない設定をご教示いただきたいです。

                   

                  宜しくお願いします。

                  • 6. Re: S6E2H14Fのデバッグに関して
                    TakashiM_61

                    クロック設定及び、I2Cについてコメントさせていただきます。

                     

                    まず前提としてI2C使用時、バスクロックは8MHz以上で使用する必要があります。

                    32-Bit Microcontroller FM4 Family Peripheral Manual Communication Macro Part

                    3. 専用ボーレートジェネレータ の<注意事項>を参照。

                     

                    次に、今回のケースでは

                    高速CRをPLLに入力し、PLLの出力を分周しPCLKxとして供給する、と認識しております。

                    下記は想定するクロックパスです。(色に意味はありません)

                     

                     

                    この場合、SCM_CTL=0x50で、PSW_TMR.PINC=0b1に設定する必要があります。

                    PLLの設定及び分周期の設定は上記バスクロックは8MHz以上になるように設定してください。

                    SCM_CTL=0x10(reg 3*で高速CRクロックを指定)ではバスクロックを8MHz以上の条件にを満足しません。

                     

                     

                    以上、よろしくお願いします。