ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

MSP430 from TIコミュのきむらの開発日記

  • mixiチェック
  • このエントリーをはてなブックマークに追加
年末年始の休暇以来 MSP430 にハマってるホビィストです。

ソースを公開出来る FET430UIF のファームウェアを開発中

と宣言してからはや四年。。。完全にほったらかしていたのですが、
最近発売された RF2500 とか Chronos とかで遊ぶため、今年に入って
ようやく重い腰をあげて作り始めました。

http://homepage.mac.com/skimu/msp430/dfw/index-jp.html

トピックにするほどの事も無いメモ等をつらつら書いてゆくつもりです。

突っ込み歓迎。

コメント(57)

やはり、まぁ、ちょろっと試してみるってわけにはいかないですよね。FET430UIF はハードの改造がいらないけど、そうそう余ってるもんじゃないし、eZ430はハンダ付けの作業が必要で面倒ってのがありますね。
# で、出来る事が人の書いたプログラムのデバックじゃぁねぇ。。

FET430UIF も R48 と R52 が実装されていればもう少し気軽に試せる方法を提供出来たのですが。。。

ちなみに、eZ430-F2013 の方はぱっと回路図見た限りでは RST_3410 ののポートの位置が違うだけなようなのでコンパイル時のオプションで対応してあります。(dfw-0.2/dfw/Makefile の -DEZ430U1P1 を有効にして、make dist じゃなく単に make として出来上がった dfw を使います。)

gdb に関してはいまのところ、

1) FLASH にプログラムを書き込んで
2) c でプログラムを走らせて、
3) ^c で中断して、
4) x/30s 'uif_ez.c'::msgbuf とかやってファイルスコープのスタティック変数を表示したり、 P1OUT などのシンボルをつかってI/O ポートにアクセスしたり
4') bt でスタックのバックトレースをしたり、
4'') info r でレジスタの値を見たり

する事が出来ます。

-g -O でコンパイルされたものなら、ローカル変数もレジスタにのってる限りは正しいものが表示されています。(レジスタにのらなったものに関しては現時点では不明、-O0 同様に多分駄目だと思う)

これだけでも、 dfw をデバックする分には結構便利です。 LED に比べてですが。

ま、ぼちぼちといきましょう。
t2 さん、
ども、こちらこそよろしくお願いします。
ところで、F2013 を試すときの dmwt コマンドに与えるオプションですが、
F2274sbw のものと同じでいいと思います。

http://homepage.mac.com/skimu/msp430/dfw/examples.f2013.tgz

にこれでいいハズというものを於いておきました。
tak はスタックが足りないかも。
半田は面倒ではないし、FET430UIF, eZ430U (eZ430-F2013) もあるのですが、ファーム書き換えると元には戻らないから CCE とか使えなくなるんだよなというのが躊躇する理由です。

> FET430UIF も R48 と R52 が実装されていれば
BSL で書き込んじゃおうという魂胆ですね(たしか UART で書けるし)。
現状の方法ではファームを書き換えるにはターゲットが F16X なので SBW 使えないから、最初の書き換えには eZ430U 同士というのは無理ということですね。もう少し簡単に手が出せるといいんですけどね。
えぇ、無改造で BSL が起動出来れば、親 FET もいらないし、バックアップとって dfw 書き込んで飽きたらもとに戻すなんてのが全部こちらで用意できるので、もっと気軽に試してもらうことの出来るものが出来たのですが。。。

でも、Flash 全体バックアップを IHEX か TI TXT 形式で保存してあれば dfw のファームウェアアップデートの機能で元に戻りますよ。

と書いて投稿の前に一応の確認のつもりで試してみたら、、、、

戻らない。

(EEPROM に入っている) USB ディスクリプタが DFW のもののまま TI のものに戻りません。そういえば以前試した時はまだ EEPROM の内容を書き換える前でした。

FET430UIF をバックアップするにはF1612 のFlash以外にTUSB3410の Vendor Specific USB requests なるものを使ってEEPROMの内容を吸い出さなくてはならなそうです。SLAA276同様に F1612 側で書き込んでるものと信じ込んでました。まずいぁ。。。

という訳で、 もうしばらく様子を見ていただくほかないようです。
きむらさんの所持している FET430UIF は相変わらず v1.3 ですか?自分のは v1.3 です。

というわけで v1.3 の人は、UDTR, URTS つないじゃいましょう(自己責任で)。普通に DTR, RTS がコントロールされる分には BSL 起動しないだろうから、多分害はないですよね?そんな難易度も高くなさそうな改造だし。一旦改造すれば、それこそあとはお気楽に。ファームさえ簡単に戻せるなら良いわけで。ただし eZ430U ではこの改造は無理そうですが。

それよりオリジナルのファームって JTAG の fuse 切られたり、BSL がパスワードで保護されてたりしないんですか?てっきり吸い出せないもんだと思ってましたが。そっちの方が心配です。
eZ430U も改造できなくはないかな。今日は手元に無いのでなんとも言えないけど。
た2るさん、

はい Rev1.3 を親機にしてます。

Rev1.3 の BSL 改造は僕にはかなり厳しく、これが前回(2006年)の開発停滞の大きな要因になりました。その後、 Rev1.4 を買い足して、こいつの上で D/FW が動いてます。(Rev1.4 を BSL 対応するつもりだったのだけど、FET が二つあれば無改造で JTAG 経由でプログラム出来るのに買ってから気がついた :-)

簡単にもとに戻せる状態で D/FW を試してもらうには以下のようにして EEPROM(24LC128)を書き換えないバージョンの DFW を作って、 USB ID に 0x451/0xf430 を使うように dfw/libdfw.c を書き換えます。

1) dfw/eeprom.c 冒頭の eeprom_firmware_check の中身をコメントアウト。
2) dfw/libdfw.c 冒頭の TUSB3410FIRM の定義を tusb3410-beef.bin から(tusb3410.bin)に書き換えて、product を 0xbeef から 0xf430 に変更。

tusb3410.bin は 2006 年にお渡ししたもの(firm.flat) が使えます。
念のためココに置いておきます。

http://homepage.mac.com/skimu/msp430/tusb3410.bin

このファームは TI の VCP が入ってる環境では使えないと思います。(未確認)
あ、それから、FET430UIF も eZ430U ともにヒューズもプロテクトもかかってないので、BSL からフラッシュの内容を吸い出せるハズです。(JTAG からは問題なくプログラム出来た。)

eZ430U の改造もパターンカットはいらなそうですね。
ふと思ったのですが、た2るさんの場合、eZ430U の Rev 1.1(F2013) に JTAG ポートをつけて、FET430UIF の動く環境で dfw を eZ430U に書き込んでしまうのが一番簡単だとおもいます。(Rev 1.1 は動作実績ありませんが十中八九大丈夫)

ひとたび dfw が動いてしまえばそれを使って EEPROM の内容を吸い出すことが出来ます。まぁいこの場合はわざわざそんな事してしなくても MacOSX の USB Prober で全部見れます。(EEPROM にはUSBディスクリプタしか入っていない)

eZ430U Rev 2.0 の方は自前で TUSB3410 のファームを持っているのでこれを潰さないと現状では D/FW で使えません。しかし、たかおかさんの開発日記によると、どうやら Rev 1.1 は FET430UIF 同様に TUSB3410 用のファームをホスト側から送ってやる方式っぽいので、それなら EEPROM を書き換えなくても MacOSX で FET430UIF 同様に MacOSX 上で(libusbcomを経由して)使う事ができるハズです。

eZ430U Rev 2.0 の EEPROM を MacOSX だけを使って吸い出すのは、結構な作業になりそうです。(なにかうまい方法ないか考え中)
そうそう、以前もらったデータ一式は、ありましたよ。

>eZ430U の Rev 1.1(F2013) に JTAG ポートをつけて、FET430UIF の動く環境..
もちろん、そう思います。僕にとってはそれが簡単です。ただ、多くのデベロッパを巻き込むには FET430UIF または eZ430U のいずれか一つでこの世界にやって来れればいいなと思うのでどうにかならないかなーと。

ところで eZ430U2.0 は厄介そうですね。ファームを読ませないよう単純に TUSB3410 の I2C を殺してもダメそうだし。。
あ、いや失礼。EEPROM 無い場合は TUSB3410 はホストからファームをダウンロードして動くんですね。それなら eZ430U v2.0 は、

予め UDTR, URTS をつないでおいく。
初回のみ SCL/SDA は GND にショートし(どうにかして。START condition が発行出来なければいいと思うので、片側だけショートでもいいかも)、TUSB3410 のファームをホストから転送、ホストから BSL で F1612 のファームを D/FW で書き換え。
その後 SCL/SDA GND ショートを止めて電源投入。D/FW は F1612 が初回のみ、EEPROM の中身を読み出してバックアップ後(自分自身の Flash に余裕があればそこに保存)、F1612 から EEPROM を消去して、VID/PID のみを書きだしておしまい。
EEPROM のバックアップ先は自分の空きが足りなければ、JTAG でつなぐべき 430 の代りに別な EEPROM つけてその時のみ I2C などで書いちゃうとか。

TUSB3410 のファームの動作について理解していないので、口ばっかりで失礼。
> 多くのデベロッパを巻き込むには
あぁ了解しました。なるほど、そこまで考えててくださったんですね。
FET430UIF Rev1.4 に関しては改造も比較的易しいし、近いうちに挑戦してみますね。
Rev 1.3 は改造のレベルが高過ぎて僕にはかなり厳しいです。

eZ430U R2.0 に関しては、そのやり方で多分できます。
SCL/SDA を GND にショートしなくても SDA に繋がってる R18 を一時的に外せば TUSB3410 のファームが 0x0451/0x3410で立ち上がるハズで、ご指摘のように Flash にバックアップをとるように D/FW を改造するのはわけないです。(いまのところまだ Flashには余裕があります)

> 口ばっかりで失礼。
いえいえ、こうしてディスカッションにつきあっていただいてるだけでも感謝です。

しかし、ブートストラップの問題は難しいですねぇ。ホント。
先日も mspgcc ML で eZ430 使えないか?という質問もありましたよね。需要はあるし、Mac でのノウハウは他の OS でも役に立つでしょう。
なにしろ、僕にとっても敷居が低くなるじゃないですか ww

あと eZ430U R2.0 の R18 を一時的に外すのもいいんですが、あの小さなパターンか(slau292 参照)ら外してまたつけるのいかがなもんかと思うので、R23 の SDA 側をワニ口で USB のコネクタにでも一時的にショートしてみるのもいいかと思います。確実性に乏しいけど、何度もチャレンジするにはお手軽かなと。
Chronos のUSB dongle が Mac で /dev/cu.usbmodem として認識されたので、2.4GHz 版の CC2511 Dongle も同様だろうと期待して買ってみた。

http://focus.ti.com/lit/ug/swru082b/swru082b.pdf
http://focus.ti.com/lit/ug/swru222/swru222.pdf

付属のサンプルファームウェアを書き込んだら期待通り /dev/cu.usbmodem として認識されてひと安心。ファームの仕様は詳しくソースを読んでみないと分からないので、まだ RF2500T と通信は出来てない。これは来週のお楽しみ。

というわけで、今日は D/FW を CC111x/CC225x に対応させた。 書き方の仕様(swra124)は msp430 もものと比べてだいぶ分かりやすくて助かった。
RF2500T はなにかと使えそうなので五つ追加注文して全部で七つになった。(いわゆる大人買い?)

CC2511 Dongle は、サンプルファームウェアは Simpliciti ではなくてその下層の mrfi というのを使っていた。という訳で今日は mrfi を使って Mac から RF2500T の LED を制御したり、RF2500T のボタンの状態や、温度センサの情報を Mac に送ったりしてあそんだ。

CC2511 Dongle と RF2500T を組み合わせて D/FW を移植すれば Wireless JTAG プログラマになってギャグとして面白いかなとおもったけど、本気でやった人がいた。

http://www.olimex.com/dev/msp-jtag-rf.html

というわけで、本日のデモ。



USB Dongle のファームは期待していたよりも汎用性がなく書き直したい気分。
sdcc 使えるかなぁ。
今週は http://www.windmeadow.com/node/42 に従って Wii の Nunchuk を取り付けてあそんだ。



swrc088c の simple_hid.hex も MacOSX で認識され Nunchuk がワイアレスマウスとして機能したのだけど、(多分) simple_hid.hex の制限のためドラッグが出来ない。

やはり、 USB と 8051の勉強もしなきゃ駄目かなぁとWeb を眺めてたら、

http://www.obdev.at/developers/articles/00003.html

こんなもの発見。これはスゴイ。 Bitbanging で USB やるだけでなく、 水晶発振器を使わずに USB からの信号で自らクロックを同期させてるらしい。神業。

F2013 辺りに移植出来たら面白いかも。
Nunchuk と bitbanging i2c のコードは需要があるかもしれないとともったので、
いままでの分も含めて

http://homepage.mac.com/skimu/msp430/rf2500-0.2.tgz

に置いておきました。
今週は D/FW を CPUXv2 (5xxx/CC430) に対応させた。
フラッシュの読み書きは比較的すんなり動いたけど、CPUXv2 は命令のプリフェッチ
とかしてて、レジスタの読み書きはなかなか手強かった。

gdb のデモをいくつも作ってもしょうがないので今週はビデオ無し。充電だけ。
CPUXv2 でハマったお陰でだいぶ JTAG デバッグインターフェースのノリが分かって来た。MSP430 用のコードも含めてクリーンアップ。 ついでに host/debug if 間の通信もちょこっと見直して、dmwt を起動する度に USB ケーブルを抜き差ししなくても良くなった。

二日連続でリリース。
えぇ、かなりガチガチですね。でも MSP430 はレジスタが16bit なので少しは楽が出来るのではないかと踏んでます。 D/FW をまともにしようとおもったら USB は避けて通れないので、 いずれ勉強もかねて読むだけは読んでみようと思ってます。
コードをクリーンアップしたお陰でいろんな事が見えて来て、今週はステップ実行に挑戦した。 CPUXv2 はパイプラインを持ってるのでその振る舞いを把握するのにひと苦労。お陰で寝不足。ステップ実行が実際にデバッグの役に立った試しは無いけれど、命令を一個ずつ実行してレジスタがアップデートされる様子を眺めるのは楽しい。
この土日は他に用事があったので MSP430 はお休みするハズだったのだけど、今日は雪が降って用事がキャンセルになったので、F5529 で USB CDCv1.19(SLAC285) の例題に挑戦。

MacOSX で /dev/cu.usbmodem として認識されるのを期待してたのだけど、どうもそのままでは駄目っぽい。 libusbcom を使ったら通信できたのでとりあえず一安心。

F5xx のマニュアルで USB の使い方を勉強してたらチンプンカンプンだった TUSB3410 のマニュアルも読めるようになって、 こちらもどうにかなるような気がして来た。(D/FW で使ってる物はオリジナルの作者の怨念じみたコメントにビビって中身はちゃんと読んでない。)
TUSB3410 のブートローダー と MSP430 の USB CDC stack ライブラリはそっくりで、 見よう見まねで TUSB3410 のファームを書き換えたら MacOSX で usbmodem として認識されるようになった。(CDC ACM) かなりうれしい。linux でどうなるか週明けに会社の機械で試してみようと思う。

Version 1.0 までに何をすればいいか何となく見えてきた。
今日は他の用事で忙しい筈だったのだけど、思いの外早く片付いたので、(移植性を高める為の)コードの化粧直しをした。基本的にな動作に影響のないはずの書き換えだけをしたつもりだったのに、ある時点でフラッシュの書き込みが出来なくなってかなり焦る。-O2 でコンパイルすると問題ない。変更点で関係のありそうなところを一個ずつ戻しながらチェックして、

static const int HEXWRITE_MAX = 32;
static const int HEXREAD_MAX = 64;

となっているところを

enum {
HEXWRITE_MAX = 32,
HEXREAD_MAX = 64,
};

と書き換えたところで問題が発生していた。
とりあえずもとに戻して -O と-O2 両方で動作確認。
Linux では /dev/ttyACM0 として認識されたようだ。でもパーミッションの関係でアクセス出来ず。。。
CPUX V1 の載った F2618 は手持ちの 64pin ターゲットボードでも使えることに気づいたので日曜日に注文しておいた。ついでに eZ430-T2012 も。
で、今日届いたので早速動作チェック。 これでひとおりの対応が終わった。

通信が /dev/tty で出来るようになったお陰でハングアップの原因がつかみやすくなり、残りるは JTAG/SBW エントリーシーケンスで時々ハングするという物だけとなった。
これに関しては SLAU265 に倣ってリトライをするようにして解決。

かなりいい感じになってきた。
D/FW のブートストラップ/オリジナルファームのバックアップに関しては、F2274(RF2500T) と F5529(MSP-TS430PN80) をサポートする事で解決することにした。

両方とも MSP430 で遊ぶなら持ってて損は無いし、D/FW で eZ430U の RAM に EEPROM 吸い出しプログラムを送り込むのは簡単に実装出来る。吸い出しには Nunchuk で使ったポートピコピコの i2c ルーチンを RAM 化して使う予定。(スピードは遅くても構わないし、割り込みは使えないので。)

とりあえずのRF2500T を想定した F2274 への移植は終了。(dfw-0.15.tgz)

これの動作確認の為(とネイティブサポートの準備もかねて)に F5529 の USB<->Serial のプログラムを今日から書き始めた。 TI のサンプルをほぼそのまま流用つもりだったけど、ちょっと無理っぽいので大改造になりそう。今週末(Good Friday の三連休)にちゃちゃっと仕上げるつもりだったけど、どうもそういう訳にはいかないっぽい。

というわけで、 RF2500T と 3V の USB<-> Serial をお持ちの方で、F2274 の移植を仕上げてくれる人募集中です。

そろそろいかがですか? > た2るさん、たかおかさん 
RF2500 は持ってませんよー。会社なら F2275 ならいくつか転がってますし、他もその気になれば入手できるかもしれないけど。。私物じゃないので。

うちにあるのは千石で入手出来るやつばかりです。
うーん、残念。でもまぁ仕方ないですね。

ところで iPad 買いました。
寝転びながらUSBのスペックやらMSP430のデータシートが読めてかなりいい感じです。
予想してたよりずっとキビキビ動いてくれてます。A4 恐るべし。
今週は iPad で遊んでたのと、天気もよかったので、 D/FW の開発はほとんど進まず。

かろうじて EEPROM の吸い出しプログラム作った。問題なく出来ると思っていたのだけど、 D/FW は CPUOFF = 1 の CPU からのメモリの読み書きに問題がある事を発見。発見までかなり手間取った。吸い出しプログラムの方にとりあえずのワークアラウンドを入れたけど、D/FW の方で直さなくちゃ行けない。今週はここで時間切れ。
今週は平日夜の細々とした時間をつかって CPUOFF の問題を取り除いて吸い出しブログラムを仕上げた。ついでにホームページにコマンドの紹介を追加。

http://homepage.mac.com/skimu/msp430/dfw/index-jp.html

バージョン 0.16.
5429 サポートは遅々として進まず。しかしながら Linux で試してくれた人がいて、ホスト側のプログラムに互換性の問題が発覚。 Linux では err_set_exit() が無いのと, /dev/ttyACM0 がデフォルトで cooked mode になってるらしい。
それらを直したのを 0.17 としてリリースしました。
Linux で試してくれた人がシリアルポートを使いたいというので、中継専用デバッグ機能なしでいいならすぐ出来るよと返事したら、それでいいというので作った。(PTFW)。
すぐ出来ると思ってたのだけど、送信バッファが空になったときに来るハズの割り込みがこなくてハマった。とりあえず送信はポーリングで済ました。理由はわからないまま。

RF2500T 用 dfw の動作確認は F5529 をどうにかしてからと思ってたけど、シリアルインターフェースが出来てしまったのでついでに確認。やっぱりバグがあったけど、比較的すぐ動いた。

ファームウェアアップデートの機能だけもってる minidfw とそれを eZ430U に書き込む writemini も動いたので、eZ430-RF2500 のキットだけで D/FW を使う事が可能になった。失敗したらどうにもならなくなるので他の書き込み手段がない状態で試すのはおすすめしませんが。

PTFW は 0.18 でリリース済み。 RF2500T の完全版は週末あたりにリリース予定。
というわけで、dfw-0.19 をリリース。ひさびさに動画も作った。



writemini が載った RF2550T で eZ430U に minidfw を書き込んでる様子。

このページ
http://processors.wiki.ti.com/index.php/EZ430_Emulator_Upgrade
に載ってるやり方で eZ430U と FET をつなげてみたけど、安定した接続を得るのが思ったより大変。どうしても手を付けたくない人以外は素直にハンダ付したほうが無難。
基板を押さえるのを手伝ってくれる人いれば少しは楽かも。

秘蔵してた eZ430U のバックアップをとって PTFW を書き込んだ。

ログインすると、残り19件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

MSP430 from TI 更新情報

MSP430 from TIのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング