2025年6月28日土曜日

文鎮化しBOOT出来なくなったFujitsu Celsius J580 を回復

文鎮化した富士通のPCの回復は、専門業者に依頼するか、FreeDOSをインストールしたUSBメモリーを使って最新のBIOSを上書きする方法しかネットに情報が無い。とくに後者のUSBメモリーを使う方法は成功しなかった事例も多そうだ。ここに、それ以外の方法で回復した事例があるので紹介する。ただ、本件は1つの成功事例ではあっても不確定要素を含んでおり再現性は保証できない。あくまで参考として見ていただきたい。

以下ダラダラと経緯を書いたので、全体を要約すると、

  1. 約半月ぶりに Fujitsu Celsius J580(以下J580)を立ち上げようとしたがビープ音と再起動を繰り返した。この時Fujitsuのロゴも出なく、キーボードも効かず、いわゆる「文鎮化」となった。
  2. ボタン電池を外すC-MOSリセットは効果が無かった。 
  3. ネット情報を頼りにUSBメモリーを使ったBIOS再インストールに挑戦したが効果は無かった。
  4.  3.に準じた方法でWindows10のインストール用USBを起動することが出来て、そこからBIOSに入ることが出来た。
  5.  BIOSで時刻を合わせ設定保存・終了を選んだ後、元のSSDからWindowsを起動する事が出来た。

という事である。 以下は経緯である。

6月中半に累積更新を適用し、しまっておいたFujitsu Celsius J580 に月末の累積更新を適用するため起動しようとしたら全く立ち上がらない。1回のビープ音と再起動を繰り返すのみでFujitsuのロゴも出ない。キーボードも無反応。やられた!、これが悪名高き文鎮化(レンガ化)か(このPCはサブのPCとして普段は使用せず定期的な Windows Update のみ行っている)。

富士通のサポートページでは「公開予定のBIOSは問題の発生を抑えるもので、既に問題が発生したものを復旧させるものではありません。」と事前の対策を呼び掛けており、問題が起きた後ではお手上げという状態だ。一方富士通のこのページを見る人の大部分は既に手遅れの人だろう。

そこでYouTubeで紹介されていたBIOSの更新をやる事にした。その概要は、32GB以下のUSBメモリーを用意し、それをFujitsuのWEB(国際版)で提供されているツール(FTS_BootStick_100_1088425.exe)でフォーマットする。 さらにそのUSBメモリーに同WEBからダウンロードし展開した自分のPC用のBIOSファイルを格納し、J580のUSBポートにに挿す。J580のメインボードのFrontPanelコネクタにあるRecovery端子をジャンパーでショートさせたあと電源をONにすると自動的にBIOSが上書きされる。この時DVDやHDD、SSDなどのストレージやその他のデバイスはディスプレイを除き予め外しておく必要がある。これで上手く行くはずだ。なお下図のRecovery端子はJ580のピンの配置であり、この上に被さっているソケットには両端に余計な1列の穴が空いているので場所を間違えないよう注意しないといけない(モデルや基板ごとの確認が必要)。

この方法はYouTubeでも紹介されているし、Fujitsu ESPRIMOでの成功例も多い。またWindowsではないがこのページにも同様の手順が書いてある。しかしこれをやってみたが全くダメ。ボタン電池を外してCMOSをクリヤーするのは最初に試したがダメ。ネット情報によると、古いバージョンのBIOSファイルの方が成功率が高いとかあり、真似してみても駄目。この方法でもしエラーが起きたとしても何回かビープ音がなるはずだが私の場合はリトライ(勝手に電源がON-OFF)を繰り返すのみでビープ音は鳴らずUSBから起動する気配がない。そうか、YouTubeでやり方を紹介していた人が仕事としては受けないと言っていたのはこういう事かと納得した。

上記ツールでUSBメモリーにインストールされるのはFreeDOSというMS-DOS互換のフリーのOSでUSB自身で起動できるよう(ブータブル)になっている筈だが私のJ580では起動されるようには見えない。この場合、考えられる原因は、(1)上記ツールの不備かUSBとの相性でUSBメモリーがブータブルになっていない、(2)ワークステーション用であるCelsiusではセキュリティや信頼性確保のため何らかの細工が行われておりFreeDOSの起動がブロックされている、(3)BIOSが完全に壊れ、例えブータブルUSBでも読み込めない、(4)BIOSの更新では現在と同じか或いはより古いバージョンを書き込むことはできない、等が考えられる。(1)を考え他のメーカのUSBメモリーでも試したがダメだった。

こうなったらハードウェア・ツールを使って最新BIOSを強制的にEEPROMに書き込むしかない、と諦めかけていた。狙いはこいつ(GD25B127D)だ。

単に書き込むと言っても門外漢の私が成功する確率は高くない。なぜならこのROMにはBIOS以外にPC固体の識別番号やMACアドレス等の固有情報が書き込まれている可能性があり、またチェックサムやMD5などセキュリティに関する情報も入って保護されいる可能性があるので単純に書き込めばよいというものでも無いだろう。 ROMの直接書き換えは最後の手段だ。

待てよ、ブータブルと言えばWindowsのインストーラもそうだ。ダメモトでやってみようと思い立ち、手持ちのWindos10 22H2のUSBインストーラで試した。Recovery端子を短絡しディスプレイ以外のデバイスを外したJ580にWindos10 のインストーラを挿して電源をONにする。すると、何とビープ音がするではないか。2回-4回-1回というパターンのビープ音を2~3回繰り返した後インストーラが立ち上がり、画面にメニューが表示された。

そこでキーボードを接続しメニューから「BIOSの設定(正確な名前は憶えていない)」を選択するとBIOSが立ち上がった。バージョンを確認するとBIOSは既に対策版のバージョン(R1.38.0)になっている。イケルかも・・・。

そこで電池を外したことで狂っていた日時を修正し、設定の保存・終了を選び一旦電源を落とした。どうも立ち上がりそうな雰囲気だ。そこでUSBインストーラを外し、文鎮化前まで使っていたSSD(Windows11インスト―ル済)をM.2ソケットに戻し、Recovery端子のジャンパーを外して電源をONにすると何事も無かったようにWindowsは立ち上がった。

Windowsが立ち上がればこっちのもの、後は普通のWindowsマシンとして扱えばよい。本来の目的であった累積更新を適用し DVDやHDD等残りのデバイスも接続してメデタシメデタシとなった。

BIOSが既に対策版になっていた理由には次の2つが考えられるが、どちらが正しいかは分からない。

(1)6月中旬のWindowsUpdateで既にBIOSは対策版になっていたがBIOSが使うデータ領域が破壊されたままだったので立ち上がらなくなっていた。

(2)ビープ音が鳴らず見かけ上起動しなかったBIOS書き換え用USBメモリーだったが実際には書き換えは行われていた。しかしBIOSの使うデータ領域が破壊されたままだったので立ち上がらなくなっていた。

個人的には(2)はBIOSの書き換えに分の単位で時間がかかると思うので現象と合わず、(1)が正解かなと思う。 

終り

 

 

 

2025年6月20日金曜日

2色 8×8 マトリクスLEDを使う(その6)

 LEDの明るさはTB62706BFに付ける外部抵抗(R-EXT)で決まるが、この抵抗は桁毎に固定抵抗をハンダ付けしているため容易に明るさを変更できない。 一方設置の自由度を増すため明るさは可変にしたい。

そこで(その4)で述べたようにイネーブル信号をパルス幅変調(PWM)して明るさを可変にする事とした。 当初は2ms毎のラスタースキャンを起動しているTMR2をトリガーにTMR1とCLCを組み合わせてPWMを作る事を考えたが、やってみるとどうも上手く行かない。理由は不明だがTMR1にクロック(Fosc)が供給されないのだ。そこでCCPを使う事とした。CCPは元々TMR2と組み合わせてPWMを作る事が出来るようになっている。

この回路の動作の中心はクロック(Fosc/4)でカウントUPされる8ビットのTMR2である。TMR2の値がPR2と同じになると、 次のクロックでTMR2は0にリセットされる。すなわちPR2+1の周期のカウンタとなる。またこの時R-S・FFがSETされPWMのパルスがスタートする。さらにこのタイミングで割り込みを発生させることが出来る。

CCPでは10ビットのCCPRと10ビットに拡張されたTMR2とが比較され(10ビットのTMR2がFoscで駆動されていると考えると分かり易い)、一致するとR-S・FFがリセットされPWMのパルスが終了する。この動作が成り立つためには 0< CCPR <(PR2*4)の関係が成立している必要がある。

最初からCCPを使えばよかったように思われるが、そうしなかったのには理由がある。TMR2による2ms毎の割込み処理の中では先ず1行分のデータを作成し、次にSPIインターフェイスでデータをLEDの各桁まで届け、最後にラッチさせることでその行データがLEDを光らせる。つまり割り込みから実際の表示(ラッチ)迄の処理である程度の時間を取られる。一方明るさを制御するPWM信号はラッチを起点としたいが、実際は割り込みが起点となり処理に時間を取られるので望む結果が得られない。そこで処理の順番を変更し、割込みと同時にラッチを行うことでPWMの起点と整合させる事とした。その後次の割込みに向けて行データを用意し各桁へ届けて割込み処理を終える。このデータのラッチ(表示)は次の割込みの頭で行う。

 この方法でPWMパルスのデユーティ比は概ねCCPR/(PR2*4)である。この式から分かるがPR2が小さい場合にはPWMの細かい制御は出来ない。具体的には行スキャンレートを2msとするためのPR2の値は7なので明るさは3~4%単位での制御となる。

なお、R-EXTの値はテスト段階では室内用に10KΩを使ったがPWMを実装した後は1KΩにした。これでけっこう明るくでき、直射日光下でなければ昼間の屋外でも見えるだろうし、R-EXTを小さくすればもっと明るく出来る。LED1個当たりの最大平均電流は25mAなのでR-EXTは約800Ωまで下げることが出来る(ピークを考えるともっと下げられる)。一方それが最大16個並列になるので、ソースドライバは400mAのドライブ能力が必要だがTD62783は最大500mAのドライブ能力がある(推奨条件とは異なる)ので通常の動作は大丈夫だろう。

 (続く)

2025年6月8日日曜日

2色 8×8 マトリクスLEDを使う(その5)

 出すのが遅れたが制御部は次のような簡単な回路である。J101が外部インターフェイス用のRS-232Cコネクタ、J102とJ104はドライバー部との接続コネクタである。配置の自由度を増すため2個設けている。2つのジャンパーはソフト的にチェックして立ち上げモードを変更できるようにするためのものであり、またこの端子をデバッグ用信号の出力にも使っている。その2で見せた割り込み中を表すトレース波形はここから取り出した。

このユニットを作って驚いたのは、PICが極めて低消費電力なのは言うに及ばず、J101にRS-232cのケーブル経由でPCが接続されていれば電源を切っても動き続ける事である。回路的には何処からも電源が供給されていなくても、UARTのRX 端子(U-RX)に加わるHの信号電圧だけで機能している事になる。つまり入力ポートからの漏れ電流だけで動いていることになる。さらに5桁のマトリクスLEDを接続した状態でもこの動作は継続される。このとき暗闇で見るとLEDが薄く点灯して動作している。これには感動した。

(続く) 

 

2025年6月6日金曜日

2色 8×8 マトリクスLEDを使う(その4)

 5桁のLEDマトリクスを裏側から見るとこうなる。制御部は一番左の二階部分。全体を見るとコネクタが多くの経費を食っているようだ。

 

 使っているCコンパイラのバグに悩まされて手間取ったが(Cコンパイラのバージョンが古いままだったため原因不明の異常動作に悩まされたが最新のバージョンに上げたら安定した)、その後表示内容をスクロールさせる機能を追加することが出来た(以下はデータ量を減らすため動作が分かる程度のショート動画にしている)。


 

スクロールの基本的な構造は、表・裏2つの画面バッファを持ち(それらを瞬時に切り替えることも可能)、2つのバッファを(縦または横に)ループ状に繋げて連続的にシフトする事でスクロールさせている。左・上スクロールを組み合わせて斜め上スクロールも出来て、見てると浮遊感があるが見続けていると酔った感じになって気分が悪くなった。

機能は一通り出そろったので、これrらをユーザインターフェイスにどう纏めるかが課題となった。あと、LEDの明るさを抵抗で決めているがソフト的に変更できるようにしたい。そのためには現在BLINKの機能に使っているイネーブル端子をパルス幅変調する必要がある。このときパルスの周期を表示と同期させないとエイリアシングが発生して周期的に明滅するので一工夫する必要がある。とりあえずTimer1とCLCを使えば何とかなるだろう。

現在、前作の超音波測距センサーと組み合わせて反射物までの距離を表示させている。

(続く)