SBC6303ブートローダの開発を中断

SBC6303ブートローダは設計の誤りを正すたびに動きかたがおかしくなり、これこそ大丈夫と思われた3代めのプリント基板でとうとうウンともスンともいわなくなった。すでに目標とした完成時期を1か月も過ぎ、後ろがつかえているので、現状をまとめた上で開発をいったん中断する。動かない製作例を紹介したところで当人以外に意味がないが、間違い探しのクイズとでも思って楽しんでもらえたらありがたい。

sbc6303bl

ブートローダはマイクロSDのHEXファイルまたはSファイルでSBC6303を起動させる。SBC6303と二段重ねにしたときマイクロSDが抜き差しならなくなるのを防ぐため、マイクロSDブレークアウトをプリント基板の裏表どちらにも取り付けられるようになっている。製作例は裏に取り付けてあり、取り付けを忘れたから動かないというわけではない。

sbc6303bl_sd

回路図を下に示す(クリックで拡大表示します)。ブートローダはArduino Pro miniを積んでいて、通電するとすぐこれがSBC6303にリセットをかけ、RAMにプログラムを転送してから解除する。この間、SBC6303のバスはすべてハイZでなければならないが、データバスは仕様上ハイZにならないので74HC245を入れた。

sbc6303bl_sch

RAMのスライドスイッチはデータバスに74HC245を入れていない段階でRAMをただの増設RAMとして使えるようにしたもの。74HC245を入れた回路ではデータバスの信号が競合してそんな風に使えないが(あれ、そうでもないか?)、うっかり取り外すのを忘れてしまった。とはいえ、スライドスイッチがRAMのCSをArduino Pro Miniの側につなぐ設定になっていればブートローダとしての働きに影響はないはずだ。

Arduino Pro Miniのスケッチは、このブログがZIPを拒否するため、PDFの形式でご覧いただきたい。マイクロSDの読み出し、バイナリへの変換、RAMへの書き込みなどは個別のテストで正常。たぶん、ブートローダがSBC6303へバスを引き渡す過程でおかしなことが起きているのだと思う。いったん別の仕事をやってまた考えたら案外つまらないミスが見付かるかもしれない。

広告
カテゴリー: 6800 パーマリンク

SBC6303ブートローダの開発を中断 への11件のフィードバック

  1. tomi9jp より:

    なかなかうまくいきませんね。
    1点質問ですが、SBC6303ブートローダで書き込み終了後にSBC6303のリセットスイッチにてリセットして正常に起動しませんか?
    それで起動すれば、SBC6303ブートローダの切り替えのRES=HIGH、CS=LOWをインラインアセンブラに変更すれば行けるかも。arduinoのdigitalWriteは遅いですから。
    RAMにライトがつながっていますので暴走中にRAMを壊している場合はNGですが。

    • vintagechips より:

      本体のリセットスイッチを押しても起動しませんでした。本体のリセットスイッチを押すとブートローダのRESもまたLOWになり、バスマスタがブートローダへ移るので、離したあと再び本体へバスの受け渡しが生じます。本体がバスを受け取るのはブートローダやリセットスイッチがRESをHIGHにしたあと500m秒たってからなので、この間に何かが起こっているんじゃないかと思います。次のコメントの返信へ続く。

  2. tomi9jp より:

    すみませんインラインアセンブラではなくただ単に
    PORTC= 0x00;
    PORTB= 0x00;
    で良いと思います。0x00は他の信号もありますので正しい値に変更ください。

    • vintagechips より:

      PORTBとPORTCにLOWを出力する意図がよくわからないのですが、切り替えのタイミングはひとつのポイントでしょうね。74HC245がない時点のテストでは、リセット解除後500m秒を見計らってバスを本体へ渡し、かなりの頻度でうまく起動しました。もちろん、バスの競合で一部のデータが書き換わりますし、リセット解除後の動作も正確に一定のタイミングでないため、現実的な方法ではありません。74HC245を入れた回路はArduinoのピンが足りなくて74HC245をハイZにするタイミングを決められず、この方法でさえテストできません。ありがとうございます。今後ともお気付きの点はお気軽にコメントで教えてください。

  3. tomi9jp より:

    解かりにくくて申し訳ありません。
    SBC6303BLとSBC6303を接続する、SBC6303単独の時は一時無視します。
    1.SBC6303BLからRAMへの書込みができる
    2.SBC6303からRAMのリード・ライトができる
    1,2が問題なければSBC6303BLからSBC6303への切り替えがうまくいかない。
    その場合リセットに入っている10μFの電解コンデンサが時間と中間電位を発生するのでSBC6303の10μFコンデンサを一時的に外します。(SBC6303単体での動作は無視)
    2ページ目の下記を
    digitalWrite(RES, HIGH); //Release reset
    digitalWrite(CS, LOW); //RAM enable
    //pinMode(RES, INPUT_PULLUP);
    //while (digitalRead(RES) == HIGH);
    while(true);
    下記の様に修正します。
    PORTC= 0x09; //OC=1,LEH=0,LEL=0,RES=1
    PORTB= 0x06; //SS=1,WR=1,CS=0
    delay(200);
    pinMode(RES, INPUT_PULLUP);
    while (digitalRead(RES) == HIGH);
    //while(true);
    でだめでしょうか?
    digitalWriteからPORTC、PORTBに変更したのはリセットをHiにしてからのリセットベクタ読み込みが最短1μで最長が2μ(1MHz動作の場合)の為RES=1からCS=0がAVRの1クロックで処理する為です。
    また、リセットの10μのコンデンサを取っていますがリセット時間はAVRでコントロールされます。
    でうまくいきませんかね。回路的は問題ないと思うのですが忙しいところ申し訳ありません。

    • vintagechips より:

      ありがとうございます、よくわかりました。ご提案の変更をまったくそのままやってみたところ、やはりウンともスンともいわないのですが、おっしゃるとおり本体の10uFがなければバスの受け渡し期間を管理できますから、この状態でさらにいろいろなテストをしてみます。今はブートローダにウンかスンくらいいわせることが先決なのに、本体に手を加えずカッコよく動かそうとしてやるべきテストを全部やっていませんでしたね。tomi9jpさんに開発の姿勢を学びましたわ。

  4. tomi9jp より:

    開発を中断と言われているところ何度も申し訳ありませんが。
    RAMのCSをA15にしてROMを付けた状態で下記を行った場合両方ともOKでしょうか。
    1.SBC6303BLでの書込みと書き込んだデータがSBC6303切り替え時に化けない確認
     LILBUGの開始アドレスを0x1000に変更したファイルを作成
     SBC6303BLで0x1000からのLILBUGをブートローダで書き込む
     SBC6303BLからSBC6303に切り替える
     SBC6303のROM版LILBUGで0x1000からのLILBUGを確認
    2.SBC6303のROMのリセットベクタを0x1000に変更
     LILBUGの開始アドレスを0x1000に変更したファイルを作成
     SBC6303BLで0x1000からのLILBUGをブートローダで書き込む
     SBC6303BLからSBC6303に切り替える
     ROMのリセットベクタから0x1000のLILBUGの起動
    以上何度も申し訳ありません。

    • vintagechips より:

      両方ともNGです。SBC6303のROMのLILbugが起動しません。Arduinoのスケッチを書き換えてブートローダのRAMが単純な外付けRAMとなるようにしても(ArduinoのバスとリセットをハイZ、74HC573をハイZ、74HC245をイネーブル、RAMのCSはA15)ダメです。私の見立てだと、SBC6303にROMを取り付けた場合、ROMの出力と74HC245の出力が競合すると思います。一緒に考えてくれてありがとうございます。今後ともお気付きの点はお気軽にコメントで教えてください。

  5. ピンバック: SBC6303ルーズキットが販売された | レトロな雰囲気

  6. tomi9jp より:

    SBC6303ブートローダが動作しました。修正点は74HC245のDIRに74HC257の2Y信号の(RAMのRD)の反転信号に変更しました。RW信号ではリード時に下位アドレスをラッチする所でバスの衝突が発生していました。頭が固くて気が付きませんでした。

    • vintagechips より:

      ブログ拝見しました。お見事! さすがです有難うございます。元祖頭の固い人はボクですね。今度はtomi9jpさんのボードが楽しみです。ボクはボクなりに教えていただいた原因を整理し、最適化を目指してみます。たとえばRDの反転じゃなくてWRならどうかとか。お手間をとらせてすみませんでした、お疲れさまでした。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中