はじめに
パラレルライターとかシリアルライターの時代に買ったAT90S2313が出てきた。ディスコンになった古(いにしえ)のCPUだ。ググったらまだ秋月で売ってる。歳のせいかHVPがぁ~とかやってた昔が懐かしくなって久しぶりに使ってみる。今のPCにはプリンタポートもRS-232Cも無いし、どうせなら今時の開発環境やライターでレジェンドCPUに書き込んでみようかと思い立った。
手順
1.arduino as ISPにパッチを当てる
素のままだとAT90S2313を認識しないので先人たち教えに従いリセットの部分を書き換える。認識しても実際の書き込みができずベリファイが落ちる。ハードバインドで-Bオプションは殺されてるので単純に定数を直接書き換えてSPIクロックレートを落とす。この力技で物理的にはavrdude.exeでAT90S2313に書き込めるようになる。2000年代はこの位のスピードだったな。
2.avrdude.confにパッチを当てる
Device signatureが違うぞエラーを回避するため毎度-Fの強制書き込みじゃ気持ちが悪いんでATTiny2313のsignature部分だけAT90S2313用の書き換えた項目を付け加える。
3.boards.txtにパッチを当てる
単にAT90S2313に書き込むだけならavrdude.confのATTiny2313の設定のsignatureだけAT90S2313用の書き換えてATTiny2313だと言い張ればいいんだけど、やっぱ気持ち悪いし外部クロック10Mhzの項目も追加するついでなのでboards.txtのATTiny2313の設定を流用してAT90S2313の項目を追加する。これでコンパイルは通るようになる。
ATTiny2313持ってないんで気にしてないがパッチ当てた事を忘れて将来ATTiny2313に書き込もうとしてハマりそうだ。両立するようにちゃんと書けばいいんだろうけど持ってない石だと確認できないから今はやないでおく。なんか挙動が変だぞ!って10分以内に気づいて、まずはarduino as ISPとTinyCoreをreinstallしろよ未来の自分。
使用環境
- ライター :arduino UNO(arduino as ISP)
- 開発環境 :arduino IDE(ATTinyCore)
- ターゲット:AT90S2313+セラロック
配線
配線(いつも忘れちゃうんでココに書いとく)
| Arduino UNO | AT90S2313 | 説明 |
|---|---|---|
| D10 | RESET(ピン1) | ターゲットのリセット線 |
| D11 | MOSI (ピン17) | データ出力 |
| D12 | MISO (ピン18) | データ入力 |
| D13 | SCK (ピン19) | クロック信号 |
| 5V | VCC (ピン20) | 電源 |
| GND | GND (ピン10) | グランド |
| — | XTAL1 (ピン4) | セラロックへ |
| — | XTAL2 (ピン5) | セラロックへ |
1.arduino as ISPの変更点
①ターゲットリセットの変更
AT90S2313のリセットが上手く行かずavrudeからターゲットが認識できない。
ArduinoISP スケッチ421行目を
-reset_target(true);
+reset_target(false);
に変更
パッチ前はAT90S2313を認識できず
avrdude: Device signature = 0x000000
となるがパッチを当てると
avrdude: Device signature = 0x1e9101
というメッセージに変わったらOK
②書き込み速度を遅くする
現代の書き込み速度にレジェンドCPUはついて行けない。SPI クロックは定数になっておりコマンドラインオプションの-B 数字は効かないのでキメ打ちで書き換える。
ArduinoISP スケッチ57行目を
-#define SPI_CLOCK (1000000 / 6)
+#define SPI_CLOCK (12500 / 6)
に変更
クロックレートを落とせばちゃんと書き込めてベリファイも通るはず。
①と②の変更をしたらコンパイルしてAVRISP mkⅡで焼けばAT90S2313が焼けるarduino as ISPの準備OK
2.avrdude.confの変更点
一番最後にATTiny2313の項目があるんで丸コピーしてAT90S2313に書き換える。でもってsignatureだけさっきの0x1e9101に変えれば-p オプションでat90s2313が通るはず。ここまでやればWinAVRとかでhex作ればat90s2313に書き込み可能。
3.boards.txtの変更点
せっかくなんでarduino IDEからクリック一発でコンパイル&GOしてみるかとboards.txtに
#①attinyx313.menu.chip.2313とクロック設定の間の2404行に
-attinyx313.menu.chip.2313.upload.maximum_data_size=128
-attinyx313.menu.clock.8internal=8 MHz (internal)
+attinyx313.menu.chip.2313.upload.maximum_data_size=128
+attinyx313.menu.chip.s2313=AT90s2313
+attinyx313.menu.chip.s2313.build.mcu=attiny2313a
+attinyx313.menu.chip.s2313.upload.maximum_size=2048
+attinyx313.menu.chip.s2313.upload.maximum_data_size=128
+attinyx313.menu.clock.8internal=8 MHz (internal)
#②外部12Mhzと8Mhzの間に
-attinyx313.menu.clock.12external.build.clocksource=1
-attinyx313.menu.clock.8external=8 MHz (external)
+attinyx313.menu.clock.12external.build.clocksource=1
+attinyx313.menu.clock.10external=10 MHz (external)
+attinyx313.menu.clock.10external.bootloader.low_fuses=0xFF
+attinyx313.menu.clock.10external.build.f_cpu=10000000L
+attinyx313.menu.clock.10external.build.clocksource=1
+attinyx313.menu.clock.8external=8 MHz (external)
これでクリック一発で行けるはず。
留意点
AT90S2313キメ打ちなんで他の石を焼く時は戻さないとダメね。メーカーも新しいプロジェクトにはATTiny2313を選べとなってるから今更AT90S2313を焼く人は(焼き方を)分かってて焼くだろうからな。一つだけ出てきたAT90S2313なんで僕にはこれで十分です。サビだらけのジャンクが思い通りに動くと単純に楽しいってだけの情報でした。m(_ _)m