RL78/G13と78K0R/KE3-AでRESETとRESFの動きが異なる

78K0R/KE3-AのファームをRL78/G13に移植してみて、RESET周りの動きが異なっていて困っています。

1, RL78の方の電源を入れた時、RESFレジスターのTRAPビットが1になっている。他のビットは0。

 ハードリセットを掛けた時やVddのみの入り切りでは、RESFレジスターは全て0。

 GNDとVddの両方を入り切りしたときに(同時ではなく、GNDとVddの入り切りに時間差があっても)、TRAPビットが1になります。

 78K0R/KE3-Aの場合はファームを書き換えた直後に電源を入れた時にTRAPビットが1になりますが、その後電源を入り切りしてもTRAPビットが1になる事はありませんでした。

 

 上記の78K0R/KE3-AとRL78/G13の動作は再現性があります。

  RESFレジスターの読み込み場所は、各機能の初期設定を行う前のファームの先頭で読み込んでおり、メインループの外側です。

 RL78のこの動作を回避する方法はありませんか? 78K0R/KE3-Aと同じ動きで良いのですが

   

2, 以下の現象は常に起きるのではなく、起きたり起きなかったりします。

 RL78/G13の-RESET端子をLowにしたまま,電源の入り切りを行うと、RL78/G13が動かなくなる。再度動かすにはファームを書き換えなければならない。

 78K0R/KE3-Aではこの現象が見られませんでした。

 他のCPUから動作を制御することがありますので、不安が残ります。

Parents
  • チョコです。
    78K0R/KE3-AとRL78/G13では、オプション・バイトの構成が異なっています。(フラッシュのモード内蔵高速クロックの周波数の設定が追加されている。)ここらの変更は問題ないでしょうか?
    電源電圧とクロック周波数の関係で暴走して、書かれていないフラッシュの値(0xFF)を命令としてフェッチすることで、不正命令でのリセットとなったのではないでしょうか。
  • チョコ様

    クロックとの関係も怪しいとは思っていたのですが、なぜそうなるか判らなくて、
    78K0R/KE3-Aの時は外部クロックでしたので水晶発振の安定待ち時間があり、RL78/G13では内部発振を使用していますのでその差があるかも。

    チェコさんの言うような事でしたら、もしかしたらパワーオンリセットと不正命令の二重リセットが掛かっていたら、RESFレジスターのTRAPビットが1になると思いますし、
    単純にCPU内のRESFレジスターのTRAPビットに該当するウェハー上のコンデンサーの容量が他より小さめなので、電源立ち上げ時は閾値が曖昧になるのかなと考えていました。
  • ハルヒさん
    もしかするとRL78/G13のボードが要求を満たしていないのかもしれないのでとりあえず移植をする前に最初の空のmain関数のみをテスト作成してボードの検証をなさったらいかかでしょうか
  • チョコです。

    >チェコさんの言うような事でしたら、もしかしたらパワーオンリセットと不正命令の二重リセットが掛かっていたら、RESFレジスターのTRAPビットが1になると思いますし、

    >単純にCPU内のRESFレジスターのTRAPビットに該当するウェハー上のコンデンサーの容量が他より小さめなので、電源立ち上げ時は閾値が曖昧になるのかなと考えていました。

     

    何か誤解があるようです。G13のマニュアルには、「PORリセットでRESFは全てクリアされます。」と明記されています。

     

     

    PORが解除された段階では、RESFは0x00です。問題はその段階でのクロック周波数です。オプションバイト(000C2H番地)でどのように設定されているかです。

    RL78はPORでの起動電源電圧(1.55V)は動作可能電源電圧(LVモードでの4MHz動作の1.6V以上)より若干低くなっています。LSモードやHSモードなら、さらに差が広がります。

    ここらは、フラッシュの動作モードなので、まともにフラッシュからデータが読めない可能性が高くなります。そうなると0xFFを命令コードとして読出し不正命令リセットになる可能性が高くなります。

    これを避けるには、とりあえず、オプションバイトの000C1HでLVDを2.7Vのリセット・モードに設定してみてください。

  • チョコです。

    その後、どうなったかが分からないので、ダメ押しします。
    TRAPリセットはCPUが起動して、命令を実行しようとした段階でのリセットです。
    PORはその前の段階でのリセットです。これが同時に発生することはありません。
    オプション・バイトをよく確認してください。
  • チョコ様

    >「PORリセットでRESFは全てクリアされます。」
    については理解しています。
    ですので余計に「RESFレジスターのTRAPビットが1」になるのが疑問なのです。
    私の言う「二重リセット」とは、PORでRESFレジスターがクリアーにされた後に、TRAPビットが1になったと思っています。
    それでその要因が何なのか、疑問です。

    先のチョコ様の回答で、PORでリセットが掛かっても、まだクロックの安定時間とか、電源の安定状況によっては不正命令が出てしまうのかと思った次第です。


    オプションバイトの000C1HのVPOC2は1で外部リセットを使用しています。
    000C1HのVPOC2を0にしても外部リセットは使えますでしょうか?
    取説を読む限りでは000C1HのVPOC2を0にしても、外部リセットも使えるようですし、
    VPOC2を0でもタイミングが異なりますが、PORも動作するように思えますが??

    とりあえず
    「オプションバイトの000C1HでLVDを2.7Vのリセット・モード」
    を試してみます。
  • チョコ様

    「オプションバイトの000C1HでLVDを2.7Vのリセット・モード」
    此方でうまくいきました。

    「RESFレジスターのTRAPビットが1」になることは無くなりました。
    やはり、電源を投入するタイミングによっては電圧が変動するのか、
    LIVIRFビットが時々立っている現象が確認できるようになりました。
    此方は完全の電源の問題かと思います。

    以上、有難うございました。
  • チョコです。

    >「RESFレジスターのTRAPビットが1」になるのが疑問なのです。

    あくまで、TRAPは通常の動作で命令をフェッチして実行しようとしたときに発生します。

    よくあるのが、ベクタを定義していない割り込みが発生したときに発生するケースです。

    割り込みでベクタを読み出して、そのアドレスから命令をフェッチしようとしても、定義していないベクタは0xFFになっています。そのため、0FFFFHから命令をフェッチし、暴走して、命令コードとして0xFFをフェッチした場合にTRAPが発生します。リセット動作もある意味割り込みと同じです。フラッシュの0番地と1番地からベクタを読み出しますが、電源電圧がオプション・バイトのC2番地で指定されたフラッシュの動作モードに対応した電圧になっていないのではないかと疑っています。その為に、フラッシュが正しく読み出せずに、暴走してTRAPが発生しているのではということです。

    >PORでリセットが掛かっても、まだクロックの安定時間とか、電源の安定状況によっては不正命令が出てしまうのかと思った次第です。

    クロック(高速オンチップオシレータ)の安定は気にしなくて構いません。電源の安定状態については、PORの電圧が動作可能な電源電圧より低いことが影響して、動作条件を満足していないにも関わらずリセットがかからない可能性があります。その結果暴走してTRAPが発生していると考えられます。

    これを避けるにはLVDを使用する必要があります。マニュアルにも以下のように記述されています。

    >000C1HのVPOC2を0にしても外部リセットは使えますでしょうか?

    使えます。マニュアルには、「電源投入時またはリセットからの起動時に,自動的にオプション・バイトを参照して,」と記載されています。つまり、PORが解除され、かつ外部リセットが解除されてからオプション・バイトの参照が行われます。一部のRL78でP125とRESETが共用になっている端子をポートに設定したにだけ、オプション・バイトが参照された後は、外部リセットは無効になります。この場合でも、PORがかかると外部RESETが有効になり、PORか外部リセットが解除された時点でオプション・バイトが参照されます。

    >VPOC2を0でもタイミングが異なりますが、PORも動作するように思えますが??

    問題はPORの電圧です。

    >とりあえず
    >「オプションバイトの000C1HでLVDを2.7Vのリセット・モード」
    >を試してみます。

     

    ぜひ、そうしてください。

     

  • チョコです。

    >「オプションバイトの000C1HでLVDを2.7Vのリセット・モード」
    >此方でうまくいきました。

    うまくいってよかったです。

    上から順に見て、コメントしているので、順番が入れ替わってしまいましたが、RL78の動きについての解説とでも思ってください。
Reply
  • チョコです。

    >「オプションバイトの000C1HでLVDを2.7Vのリセット・モード」
    >此方でうまくいきました。

    うまくいってよかったです。

    上から順に見て、コメントしているので、順番が入れ替わってしまいましたが、RL78の動きについての解説とでも思ってください。
Children
No Data