« MITOU JTAG対応デバイス一覧を更新 | トップページ | 78KマイコンUSBプログラマをリリース »

2008.07.16

78Kマイコンのフラッシュ書き換えプログラム

トラ技の78K付録基板は16kバイトのフラッシュROMを内蔵していますが、そのうち半分の8kバイトをUSBファームウェアとトラ技BIOSで使ってしまっています。
トラ技BIOSからは、この前半の領域は書き換えられません。
しかし、大きなアプリケーションを作りたい場合には、トラ技BIOSを外してフラッシュROM全部を使いたい場合もあると思います。
そういうわけで、付録基板のフラッシュROM全域を書き換えられるようなシステムを作ろうと思います。

ところで、これまで78Kマイコンをまっさらな状態から書き込むには、パソコンとターゲットCPUをUARTで接続して、WriteEZ3やFPL3などのソフトウェア使って書き換えることが多かったと思います。
ところが、USB-RS232Cケーブルを使うと完全な脱レガシーとはいえないので、下の写真のように、2台の付録基板をつないで、片方をマスター、片方をスレーブにして、フラッシュROMの全域を書き換えられるようにしたいという強い思いがありました。
同じマイコン同士なので、レベル変換もいりません。線でつなぐだけです。

78kwriter1

つまり、付録基板が2台あれば、片方をUSB-78Kプログラマにすることができるというわけです。

2台の78K基板は、CSIというシリアル通信のプロトコルの信号で通信します。スレーブ側のNRESET、FLMD、SCI、SI、SOの5本の線を、マスターのP00、P01、P10、P11、P12にそれぞれつなぎます。

どうしてもすぐにこのプログラムを作ってみたくなって、今日、家に帰ってからずっと作業をしていました。
とりあえず、マスターの78KマイコンのフラッシュROMの内容をダビングするところまでできました。
ターゲットのフラッシュROMを完全に消去して、マスターのフラッシュROMのイメージをそのままコピーするという感じのプログラムです。

78kwriter2

書き換えプログラムも78K用のプログラムにしたので、Windowsには特別なソフトをインストールする必要はありません。78kが勝手に書き込みをしてくれます。

このプログラムは近々(今週末には)ダウンロードできるようにする予定です。
ベリファイもチェックサムも無視しているのでまさに一発勝負の動作です。
現在の実行コードのサイズは、まだ1420バイト程度です。
あとはベリファイや、HEXファイルをダウンロードする機能をつけたいのですが、残り600バイトに収まるでしょうか。
2048バイト以内に収まればRAMアプリケーションにできるので、嬉しいところです。

|

« MITOU JTAG対応デバイス一覧を更新 | トップページ | 78KマイコンUSBプログラマをリリース »

コメント

こんにちわ、arms22といいます。

トラ技8月号の付録基板をMacOSXで使いたいと思い、libusbを使ってデバイスと直接通信しようと試みています。
まずはデバイスからのスタートアップメッセージを読み込もうとしていますが、うまくいっていません。。
何か少しでもヒントを頂けたらと思い、書き込みしました。

現状、libusb経由でデバイスをオープンし、改行コードを送るところまでできているのですが、デバイスからの応答(スタートアップメッセージ)がない状態です。デバイスオープンの後に、コントロール転送による何らかのコマンドが必要でしょうか?

現在の処理は次のようになっています。

1.デバイスオープン
2.改行コード(0xd)送信(バルク転送)
3.受信待ち(バルク転送)
4.2から3を繰り返す

※送信はEP2(0x02)、受信はEP1(0x81)に対して行っています。

よろしくお願い致します。

投稿: arms22 | 2008.07.16 10:05

こんにちは

トラ技BIOSが認識する改行コードは'¥r'(=CR, =0x0d)ですがこれは大丈夫ですね。
また、USBなのですが、フロー制御の設定が必要だったような気がします。

Windowsのアプリの場合、それをやっているのが、
EscapeCommFunction(hCom,SETDTR);
だったと思います。
詳しくは119ページのAppendixをご覧ください。

また、USBファームウェアとの相性の問題も考えられます。
USBのファームウェアはNEC様のWebサイトから閲覧できるようになっていますので、参考までに下記のURLもご覧ください。
http://www.necel.com/micro/ja/designsupports/
sampleprogram/78k0/78f0730/index.html

投稿: なひたふ | 2008.07.16 10:26

なひたふ様

早速のご回答ありがとうございます!

NECのサンプルソース(仮想COM)のほうを確認してみました。
vendor requestはすべて非サポート、standard requestはGetDescriptor以外非サポート、class requestも非サポートとなっていました。トラ技BIOSがこのサンプルをベースに作られているとしたら、コントロール転送によるコマンドは必要なさそうですね。

一応、フロー制御の設定が必要とのことですので、サンプルソースを参考にSET_DTR_RTS(ベンダリクエスト)を送ってみることにします。

うまくいきましたらまたご報告させて頂きます。
ありがとうございます。

投稿: arms22 | 2008.07.16 13:08

なひたふ様こんばんは。

#不躾な質問ご容赦ください。

トラ技BIOSでは、VUARTに「特別な」ドライバが必要となりますよね。レガシが排除されつつあるのは Windows に限った話ではないので, そこを何とか CDC 仕様に合わせて usbser.sys を使うような実装にしようと勉強中です。

が, 色々と調べているうちに,
・CDC は 2 つのインタフェースを必要とする
・Interface0;コントロール用,Interrupt IN EP
・Interface1;データ用, Bulk IN/OUT EP
で, (EP0以外に)合計3個のEPが必要(らしい)という辺りまで見えてきました。

78F0730 は EP 1/2 しかないので, このデバイスだと CDC は実現不可能, という事なのでしょうか?

USB に関しては勉強し始めたばかりなので分からないとこばかりなのですが, Shared Endpoint とか, Alternative Settings とか(字面からそれらしきものを適当に拾ってみただけですが), を使って実現する方法等ないものでしょうか。

よろしくご教示ください。

投稿: elcaminoreal | 2008.07.17 22:06

elcaminoreal様
はじめまして

おっしゃるとおりCDCは4つのエンドポイントを必要としますが、78F0730には3つかないので、仮想COMポートに見せるには独自クラスを作らなければならないと思います。

USBドライバの作り方について詳しくは下記のURLを参照してください。
今回のUSBファームウェアのソース等が公開されていますので、参考になるかと思います。

http://www.necel.com/micro/ja/designsupports/
sampleprogram/78k0/78f0730/index.html

ドライバ周りは私はあまり良く分かっていないため、あまりお力になれず申し訳ございませんが、よろしくお願いします。

投稿: なひたふ | 2008.07.18 16:31

なひたふ様

arms22です。
necのサンプルコードを参考にコントロール転送でOPEN_CLOSEコマンド(ベンダリクエスト)を送ることでトラ技BIOSと通信することができました。
ありがとうございます。

投稿: arms22 | 2008.07.20 12:11

78kの残りのフラッシュ部分に
AVRライタを書込む記事をみつけ、早速試してみました。

Tyne45で試してみましたが、
読込みも書込もうま~くいきました。

RAM部分は、78kのC言語の勉強にそのまま使えるので、
鴨ネギで・・・ この際、両方覚えてやるぞで・・・
奮闘中です (~へ~)p

投稿: ヒデ | 2009.02.19 21:34

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 78Kマイコンのフラッシュ書き換えプログラム:

« MITOU JTAG対応デバイス一覧を更新 | トップページ | 78KマイコンUSBプログラマをリリース »