• 締切済み

H8について教えて下さい。

HD64F3068Fを使用している基板があるのですが、ROMを書込み通常動作をさせている上では問題ないのですが、デバッグ時のみにCPUが暴走しているようなことになる基板が20枚中1枚だけあります。 それの解析を以来されています。 外部のSRAMか内蔵RAMが悪いと思う・・・と言われています。 が、ソフトまるっきり初心者なのでよくわかりません。 イエロースコープがなんとか使えるようになったかな程度です。 ・4MSRAM(512k * 8bit)の全領域を完全にチェックする方法 ・内蔵RAMをチェックする方法 などあれば教えて下さい。 よろしくお願いします。

  • man_u
  • お礼率70% (56/80)

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> 通信エラーがでます 何を通信しようとしているのか知りませんが、問題を複雑にしないためには、可能な限り簡単な方法でチェックすることをお勧めします。 例えば、合否判定はLEDの点灯とか、ポートに出力して、波形を調べるとかにした方が無難です。余計なことをすると、その部分にバグが入るかもしれませんし、そもそも通信ポートのハードウェアが正常かどうかも分からないわけですから。 > あと、CPU交換・・・はやりそれですかねぇ~。 私なら、交換が簡単なSRAMから付け替えますね。

man_u
質問者

お礼

回答ありがとうございます。 リモートデバッグというのをしています。 とりあえずSRAM -----> CPUの交換をしてみます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

外付けのSRAMについては、普通、0x55、0xAA、インクリメントパターンを全領域に書き込んでから、読み込んだときに同じ値になっているかを判定することになります。アドレスピンが浮いていたり、ショートしている可能性があるので、インクリメントパターンは256バイトごとに初期値をずらした方がよいでしょう。 ただ、こうしたチェックでは、やはりハンダ付けや基板パターンの不良程度しか検出できません。もっと徹底的にデバイスを調べるのであれば、ICテスタなどが必要になるかと思います。 次に、内蔵RAMのチェック方法ですが、シリアルでフラッシュメモリにプログラムを転送するときにも内蔵RAMを使うことになりますので、CPUを動かして調べることは原理的に無理です。 外付けのROMで起動するためには、そのための基板にCPUを実装しなおす必要があるかと思います。そんなことをするぐらいなら、別のCPUに付け替えて、不具合が再現するかどうかを調べた方が簡単です。

man_u
質問者

お礼

256バイトをずらして書いて見ました。 スタックの領域?まで書こうとすると通信エラーがでます (当たり前ですかね) それでスタックを内蔵RAMに配置すると言う方法がイエロースコープにあるのでやってみたんですが、やはり同じ結果でした。 もうちょっと勉強します! あと、CPU交換・・・はやりそれですかねぇ~。 手っ取り早いですね!

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

メモリのチェックは、1バイトごとに0x00から0xffまでコードを書いてみて読み出したときに同じコードかチェックするのが定番です。全領域のRAMの検索は普通C言語を使わずアセンブラを使いROMに書き込んでテストします。 ただし、これでもメモリの壊れ具合でレアケースで分からないことがあるので、うまく判明しなかった場合はもう一捻りです。 例えば何度もチェックを繰り返したり、書き込みパターンを単調にならないように工夫したり、色々とやってみる必要があります。

man_u
質問者

お礼

回答ありがとうございます。 アセンブラですか・・・ がんばって勉強してみます。 深いですね・・・

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

何をチェックするのかによって、方法が変わってくると思います。 デバイスの不良を検出したいのでしょうか? 基板へのハンダ付け不良を検出したいのでしょうか? 基板のノイズレベルやクロストークなどの影響を調べたいのでしょうか? メモリの非実装領域の(フルでコードされていないことによる)ミラーイメージの現れ方を調べたいのでしょうか? > 20枚中1枚だけあります。 大抵、こういった不具合は、ハンダ付けかプリント基板の不良に起因することが多いと思います。 チェックプログラムを作るより、テスターとオシロで調べた方が手っ取り早い気がするのですが...

man_u
質問者

お礼

回答ありがとうございます。 はんだ付け、基板の不良についてはとことん調べましたが、不良箇所は見つけられませんでした。 部品の破損があるかないか調べれたら・・・ という感じで、とりあえずソフトでアプローチしようとしている感じです・

関連するQ&A

  • SH 内蔵RAMを無効化したい

    こんにちは。 SH2を使用しています。タイトルの通り、単純に内蔵RAMを無効化したいのですが、その方法をご教授頂けたらと思います。 ルーチンで: RAMCR.BIT.RAME = 0; と書くと、その時点でプログラムがハングされてしまいます。 何が足りないのでしょうか?ちなみにモードは内部ROM有効、外部にSRAMが接続されています。

  • F-ROM基板

    NC装置でパリティーエラーが発生しました。 F-ROM基板を交換して復旧しましたが、同様のトラブルが再発しています。過去3年で4回です。 基板にミストが付着していたので、それが原因ではないかと思うのですが・・ NC装置メーカーの解析では、導通してないパターンがあったとのことでしたが基板を確認したところ短絡した痕跡はありませんでした。 そこで質問ですが ・短絡以外に断線原因は何か考えられますか? ・F-ROM自体が故障すると上記解析結果のような「導通してないパターン」が発生するのでしょうか? ・ミストによる故障と考えてよろしいのでしょうか? 御教授下さい。 よろしくお願いします。

  • あるメモリ番地からあるメモリ番地へそっくりコピーする方法

    現在、動作確認を行っている基板があるのですが、経験が少なく、いろいろとわかる方に聞く日々が続いています。いろいろと教わった結果、メモリ領域の操作方法や、どのようにメモリ領域を使っているのかを把握することがとても重要と考えて来るようになりました。そこで、テストボードで、CPUにつながったメモリの番地を聞いてみたところ、開発で使用している”memmap.h”というファイルがあると教わりました。それを閲覧してみると次のようにかかれていました。 #include "comm.h" #include "event.h" #include "ethernet/dhcp.h" /* FALSE Memory Map */ #define FLASH_BASE 0x200000 #define FLASH_FONT_ADDR FLASH_BASE #define FLASH_AUDIO_ADDR FLASH_BASE + 0x0B0000 #define FLASH_NUMBER_ADDR FLASH_BASE + 0x1F0000 #define FLASH_ENV_ADDR FLASH_BASE + 0x1F8000 /* SRAM Memory Map */ #define SRAM_BASE 0x400000 #define SARM_TCP_PVC_BUF (BYTE *)(SRAM_BASE + 0x008000) //8 #define SRAM_NUMBER_BUF (BYTE *)(SRAM_BASE + 0x010000) //8 #define SRAM_ENV_BUF (BYTE *)(SRAM_BASE + 0x018000) //8 #define SRAM_FLASH_BUF (BYTE *)(SRAM_BASE + 0x020000) //8 #define SRAM_NET_BUF (BYTE *)(SRAM_BASE + 0x030000) //1 #define SRAM_AUDIO_BUF (BYTE *)(SRAM_BASE + 0x040000) //2 #define SRAM_MISC_USE (BYTE *)(SRAM_BASE + 0x060000) //8 #define SRAM_STACK_BUF (BYTE *)(SRAM_BASE + 0x069000) //8 #define SRAM_JURNEL_BUF (BYTE *)(SRAM_BASE + 0x070000) #define SRAM_JURNEL_BUF2 (BYTE *)(SRAM_BASE + 0x078000) それで、0x400000番地からのSRAMは常に基板の電源を切っても電池で守られているためデータは消えないのですが、ここにパスワード関連の410000番地からのSRAM_NUMBER_BUFでいったんデータを登録したら、FLASH領域のSRAM_NUMBER_BUF(3F0000番地から)に丸ごとコピーしているそうなのですが、そのように丸ごとコピーできるC言語の関数は内でしょうか?また、丸ごとコピーできるような簡単な書き方はないでしょうか?

  • 組み込みソフト。ROM領域にデータ

    C でデータに const 属性をつけて、初期値を設定して定義すると、初期値は ROMにテーブルが作られますがデータ自体は RAM領域に配置されます。 RAMの節約のため、ROM領域にデータを配置する方法はないのでしょうか。

  • ルネサスH8/3048Fの定数領域

    お世話になっております。 ルネサスH8/3048Fについて質問です。 また会社の古い装置を解析しているのですが、わからない事が有り質問させていただきます。 H8/3048F使った装置なのですが、装置のパラメータの設定/記憶にH8/3048Fを使っています。 プログラムは、内部のフラッシュROMに直接書き込んでいます。 が、この装置は増設のEEPROMを持っていないので、設定したパラメータが消えないように、AC100Vの電源とは別に電池を載せて、常にH8/3048Fが動いている状態に保つという変な構造になっています。 ところが、その電池を外した状態でパラメータの設定をし、電源を落として再度投入したところ、なぜか設定が保持されていました。 先に書きましたように、ROMの増設などは一切されていないので首を傾げています。 ひょっとして、プログラムの実行中にROMの定数領域を書き換える事が可能なのでしょうか? 恥ずかしい話ですが、ソースファイルが残っていないため、プログラムの検証が出来ません。 原因が分かる方がおられましたら、ぜひご教授ください。

  • H8(マイコン)のプログラムサイズ

    マイコンの勉強ということでH8/3694F(ROM:32KB、RAM:2KB)を 購入しました。 開発環境はルネサスのHEWを使い、プログラムは同社のFDTを使って 拡張子motファイルをROMに書き込んでいるのですが、そのmotファイル が59KBであることに気付きました。 59KBだとCPUのROMサイズ(32KB)を超えているのですが、これは32KB分 までしか書き込まれていないということになるのでしょうか? プログラム実行中は問題なく動作しているように見えるのですが・・・ また、プログラムサイズを簡単に確認する方法、見積もる方法など 参考になるサイトをご存知でしたら教えて下さい。 よろしくお願いいたします。

  • SOTECのe-note645H起動の不具合

    ヤフオクでジャンク品のe-note645Hを買いました。 到着後はWin98で一応動作していましたが、CD-ROMドライブを認識してなかったので、分解して中を見たりして後再度組み立てたら、OSが起動しなくなってしまいました。 電源を入れると下記のメッセージが出たところで止まってしまいます。 CPU =AMD-K6(tm)-2/450 640K System RAM Passed 127M Extended RAM Passed 0512K Cache SRAM Passed Mouse initialized Keyboard Controller Version:A1.03.05 Fixed Disk 0:IBM-DJSA-210 ATAPI CD-ROM:cD-224e 最終行に Press<F2> to enter SETUP と出てます。 F2キーを押してもそこから先には進みませんでした。 内蔵HDDはIBM製10GBのものに交換してありました。 何とか使える状態まで持っていきたいと思いますが、上記のメッセージで原因が何かわかりますでしょうか。 よろしくお願いいたします。

  • h8 モニタプログラムの改良について

    はじめまして、H8初心者です. 現在実務訓練でH8/3048Fを使用して、測定機器を作成しているところです。そこで、モニタプログラムをROMに書き込むまでできているのですが、Htermを利用してRAMに書き込むプログラムの容量が足りないということで、ROMの余っている部分に関数を書き込みRAMの要領を出来るだけ確保しようと考えています。しかし、いろいろなHPで調べているのですが初心者にはよくわからないことが多く、質問させていただきました。 一応使っているコンパイラ、アセンブラ、リンカは付属CDの秋月製のものです。いろいろと試して、ライブラリ関数を宣言してオブジェクトファイル形式にしようとしているのですが作成されたMAPファイルを見てみても関数が含まれておらず、よくわかりません。 方法としてWatoson8さんという方がその方法について解説しているホームページを参考にさせていただこうと思いましたが、その方法が深く理解できないため、足踏みしている状態です。 そのホームページの内容を秋月製のコンパイラなどを使用して作成する方法でも、その他の方法でも何か知っていることがあったら教えていただきたいです。よろしくお願いします。

  • NORTiプログラムのROM化

    OS    :NORTi4 1.18a 開発環境 :HEW4 コンパイラ:SHC C/C++ Compiler ver.9.01 CPUボード :AP-SH4A-0A(アルファプロジェクト社製) 1.ROMにプログラムを焼く 2.パワーオンリセットでバスの設定、ROMとSDRAMを使用可 3.ROM上の初期化関数へジャンプ 4.初期化領域をゼロクリア、初期化領域データのメモリコピー、  ROM上のプログラムをSDRAMへコピー 5.Cのmain()関数を呼び出し(RAMへジャンプ) http://www007.upp.so-net.ne.jp/SY-Firm-Ware/hew/hew.html http://hitachisoft.jp/Products/SH-C/support/faq_21.html 上記のサイト等を参考に行いましたがうまく動きません。 どこで問題が起きているか確認できるようにモトローラSフォーマット ファイルではなくabsファイルをROMに書き込みデバッグしながら行っています。(ROM上でのデバッグはよくないようなのですが、原因がつかめないので。。。どうしようもなくて。。) リセットベクターからいきなりGOするとmainに飛んでくれないんです。 付属のサンプルプログラムで試した時もいきなりGOするとmainにいってくれません。 ステップ実行で1ステップづつ実行していってmainループの中を一通り動かしてからGOすると動くような状況です。 初期化領域のゼロクリアや、データコピー、プログラムのコピーはちゃんと行われています。 何が悪いのかわからず困っています。 宜しくお願いします。

  • H8Sで割り込み発生時の飛び先アドレスがRAM上にある場合の割り込み関数の記述方法

    ルネサスのマイコンH8Sのプログラムを組んでおります。 プログラムの構成がBoot部分とアプリケーション部分に分かれており、 Bootはアドレス0番地から、アプリは3000番地以降の領域を使用するようになっています。 完成されたBootを使用してアプリケーションのプログラムを組まなければならなく、また、Bootは変更できないことになっています。 このBootの中のベクターテーブル上で、割り込みが発生した場合の飛び先のアドレスがRAM上になるように設定してあります。 このため、アプリケーションソフトでは、 割り込みが発生した場合のRAM上の飛び先に FLASH ROM上の指定したアドレスにジャンプする命令を書き、 FLASH ROMのジャンプ先には、実行したい関数を書きたいのですが、 (1)RAM上の特定のアドレスからFLASH ROM上の指定したアドレスにジャンプさせる方法。 (2)FLAH ROM上の指定したアドレスに関数を記述する方法。 を知りたいのですが、 どなたか教えて頂けないでしょうか? 開発環境はHew4 言語はC言語を使用しております。 私自身が理解不足であるため質問内容が伝わりにくいかと思いますが、 宜しくお願い致します。

専門家に質問してみよう