firmware 0.1.1 の問題

firmware 0.1.1 には致命的なバグが存在することが判明しました。このバグが起きると常に「不明なデバイス」と表示されて kazzo が使用できなくなります。

1月10日以降に発送した分は 0.1.2 に更新してありますが、手違いの可能性がありますのでバージョンの確認をお願いします。

対象バージョン

0.1.1 のみ。 (0.1.0 にはこのバグは発生しません)

発生条件及び頻度

不明。筆者を含め 4 人の環境で 6 回発生しています。

対処方法

対処済みの firmware 0.1.2 を用意しました。以下の2通りの方法があります。

  • kazzo と USB 通信が出来る方はブートローダ経由での更新
  • USB 通信が出来ない方は ISP 経由での更新

ブートローダ経由での更新

用意するもの

  • kazzo 本体
  • firmware 0.1.2
    • kazzo_test.exe
    • kazzo 0.1.2 に含まれる kazzo_mega16*.hex ファイル (以降 kazzo_mega164p.hex を使用している体で進めます)
  • SNROM カセット
    • どのソフトが SNROM かはリストを参照してください。
    • セーブデータが消えますので消えて困るデータをお持ちの方は unagi で待避してください。
    • 待避方法は unagi.exe r snrom.urw kietekomarudata.sav です。
    • 無改造のカセットが使用可能です。
    • カセット内部の電池が切れていても問題ありません。

手順

  • 電源を切った状態で SNROM カセットを接続する
  • 電源及び USB を接続する
  • 下記のコマンドでバージョンを確認します。
    kazzo_test.exe v
    kazzo16 0.1.1 Jan  2 2010
    

と表示されたら 0.1.2 へ更新してください。

  • 下記のコマンドでファームウェアを更新します。
    kazzo_test.exe w kazzo_mega164p.hex
    
  • 下記の表示が出て、USB の接続がきれますが問題ありません。別の表示が出る場合は SNROM の接続ができていません。
    USB connection will be disconnteced. This is normally.
    Re-turn on kazzo's power.
    
  • 5秒程度待ち電源を切ります。電源の再投入は重要です。必ず行ってください。
  • 5秒程度待ち電源を入れます。
  • 下記のコマンドでバージョンを確認します。
    kazzo_test.exe v
    

kazzo16 0.1.2 / Jan 10 2010 と表示されれば成功です。

  • 下記のコマンドでファームウェアの詳細な比較も可能です。
    kazzo_test.exe v kazzo_mega164p.hex
    

cmd_update.png

更新に失敗し、再投入後も不明なデバイスと表示される場合は ISP 経由での更新が必要です。

注意: この方法で 0.1.1 から 0.1.0 に更新できますが、 0.1.0 ではこの方法で更新することはできません。

ISP 経由での更新

AVR ライタを使用して更新します。 AVR ライタをお持ちでない方は下記メールアドレスまで至急連絡をください。

designmail.png

発生理由

firmware 0.1.1 には AVR ライタ不要のブートローダという機能を搭載しました。ブートローダは RAM に転送されたイメージをファームウェアとしてファームウェア自身を更新することが出来ます。

ファームウェアの更新手順を記載します。

  1. ユーザー: RAM がのったカートリッジを接続する
  2. ホスト: ファームウェアイメージを送信 (REQUEST_CPU_WRITE, REQUEST_PPU_WRITE)
  3. ファームウェア: 受信したイメージを RAM に書き込む
  4. ホスト: イメージを送信要求 (REQUEST_CPU_READ, REQUEST_PPU_READ)
  5. ファームウェア: RAM を読み込みホストへ送信
  6. ホスト: イメージを受信, イメージの中身を確認
  7. ホスト: 問題なければファームウェア更新要求を送信 (REQUEST_FIRMWARE_PROGRAM)
  8. ファームウェア: RAM を読み込み、ファームウェア自身を更新

問題は下記の通りに起きています。

  1. ファームウェア: ファームウェア更新要求を誤認
  2. ファームウェア: 接続されていない RAM を読み込み、ファームウェア自身を更新

対策方法

firmware 0.1.2 では下記の処理を加え、誤認後の更新を回避しています。

  1. ファームウェア: ファームウェア更新要求を誤認
  2. ファームウェア: RAM を読み込み、内容とリクエスト引数を確認する。異常があった場合、更新しない。
  3. ファームウェア: 接続された RAM を読み込み、ファームウェア自身を更新