« 2011年4月 | トップページ | 2011年6月 »

2011.05.31

MITOUJTAGのICEにソースコードデバッグを乗せたい

MITOUJTAGのICEにソースコードデバッグ機能を乗せる作業を開始しました。

Mjice_srcdbg

これをやるには、C言語ソースの何行目がどのアドレスに配置されるかという情報が必要なのですが、その情報はELFファイルの.debug_lineというセクションに格納されています。
どのソースの何行目がどのアドレスか、という情報はとても巨大なサイズになるので、ELFファイルの中ではdwarfという奇怪な言語を使って略記しているようです。行番号とアドレスの対応は、.debug_lineの中身にあるのですが、これを解読するのは大変なので、とりあえずはrx-elf-objdumpにデコード結果を吐かせて、取り込むことにしました。

上の図はそのようにして得られた、アドレスと元のソースの行番号の組から、ステップ実行で止まった際に、元のソースでどの行かを表示するようにしたものです。

ここから先は、結構大変です。
DWARFの解析も大変ですが、本格的にやるなら多機能なテキストビューワから作らなければなりません。

| | コメント (3)

2011.05.28

MITOUJTAG/ICEに内蔵フラッシュROM書き込み機能

RX62Nの内蔵フラッシュROMへ、MITOUJTAG上のJTAG-ICEから書き込みができるようにしました。

Mjice_romprog3

MITOUJTAG 2.0以降をご利用のお客様と特電RX62Nボードをご利用のお客様は無償でダウンロードできます。
下記のURLからICEの修正パッチをダウンロードしてください。
http://www.tokudenkairo.co.jp/login/login.php?url=mjice_smart_update.lzh

これを解凍すると、smartupdate.exeという実行ファイルがあるので、実行してください。
MITOUJTAGのEXEやDLLを置き換えて、ICEが実行できるようになります。

以前から無償で公開してきたSuper Multi ICE(Nahice)と比べても、格段に使い勝手や安定性が向上しています。

あと、GUI操作でのリセットボタンが完璧に効くようになったので、プログラムをダウンロードした後や、何か困ったときに、パソコンの画面上の操作で気軽にRXマイコンをリセットできるようになりました。

それから、FDTを使わなくても良くなったことがメリットとして挙げられます。通常のシングルチップモード動作から、ROM書き込みモードに切り替えるたびに、「MD0,MD1のDIPスイッチ切り替えてリセットを押して、FDTのボタンを押す・・」という面倒な手順をふまなくてもよくなったのです。

JTAG ICE上のフラッシュライタを使うと、MD1とかMD0の設定を切り替えなくてもいい(シングルチップモードの設定でOK)ので、開発効率がUPすること間違いなしです。

Pocket JTAG Cableを使えば、かなりサクサク動きます。

ただ、このフラッシュライタの問題点としては、
・ロックというもの(?)に対応していない
・最初のブロックで稀に消去に失敗します。1回目で失敗しても、2回目でうまくいきます。(いずれ原因を究明します。)
というのが残っています。他にも何かあるかもしれませんので、製品レベルのプログラム書き込みには使わないでください。

何はともあれ、MITOUJTAGにJTAG ICE機能を取り込んで、格段に進化できたのは間違いありません。

次はソースコードデバッグに取り組みたいと思います。

| | コメント (0)

2011.05.27

Interface付録RX62N用拡張基板のプランについてアンケートのお願い

だいぶん仕様が固まってきました。

現在のところ、基板の形状はこんな感じです。

Rxmega_plan5

Rxmega_plan6

さて、今回は皆様にお願いがあります。
どうか、この拡張基板のプランについて、皆様が考える適正な価格をお教えください。

具体的にいうと、アンケートを頂戴したいと思います。

あなた様のご意見は極めて重要です。
なぜならば、あなた様をふくめた40名様の評価によって、
このプロジェクトを継続するか、それとも中止するかを決定するからです。

お忙しいところ誠に恐縮ですが、貴重なお時間を数分間お分け頂き、
このプロジェクトの評価にご協力いただけないでしょうか?

アンケートの質問は5問で、すべて一言でお答えいただく簡単なものです。

このアンケートは、Webフォームからの記入か、もしくは、メールまたはFAXでご回答いただくことができます。匿名で回答することもできますし、もちろん記名していただいても結構です。

「アンケートに協力してもいいよ」とおっしゃってくださる方は、下記のURLを開き、フォームにメールアドレスをご記入の上、送信ボタンを押してください。

ご協力いただける方には、アンケートの詳細をメールにて折り返しお送りします。

どうか、よろしくお願いします。

| | コメント (7)

2011.05.26

MITOUJTAGとICEの統合(4)

今日もMITOUJTAGにICEを統合する作業を進めています。
とりあえずターゲットはRX62Nのみですが、MITOUJTAG上のJTAG-ICEから、内蔵フラッシュROMへの書き込みができるようになりました。

Mjice_romprog

RX62Nの内蔵フラッシュROMに書き込む方法は、ユーザマニュアルの第37章に書かれているのですが、理解するまでが意外としんどいです。

RX62NにはFCUというフラッシュコントローラが入っています。こいつを動作させるにはファームウェアが必要とのことなので、おそらく小さなCPUなのではないかと推測されます。実際にファームウェアを見てみると複雑なマシン語のように見えます。
CPUからはROMのアドレスにE8 80 ・・・・ D0などのコマンドやデータを書き込んでいけばROMに書き込まれるというわけなのですが、実際にはFCUがこのコマンドを解釈して動いているのでしょう。マニアにはたまらない仕様です。

RX62Nの中の内蔵ROMのある領域(FEFFE000h~)にFCU用のファームウェアが書かれていて、これをFCU RAMという隠れたRAM(007F8000h~)に転送します。FCU RAMは2kBのサイズがあるのですが、通常はこれは見えなくなっていて、ROM書き込みモードに移行してはじめて見えるようになります。

内蔵ROMを書き換えるモードにすると、CPUからは内蔵ROMが参照できなくなってしまいます。そのため、内蔵ROMを書き換えるプログラムはRAM上で実行しなければなりません。

書き込みや消去といった動作はソフトウェアで動作させたほうがいいので、JTAG ICE上で実行する場合は小さなサブルーチン集をあらかじめRAM上に転送しておいて、JTAG ICEからそのサブルーチンを呼び出して操作することになります。

内蔵フラッシュROMは256バイト単位で書き込む仕様になっていますが、実際には256バイト単位でJTAG ICEからサブルーチンを呼び出していると、CPUリスタート→停止のオーバーヘッドが大きすぎるので、消去ブロック単位(4KBまたは16KB)で書き込むとちょうどよくなります。
FFFF8000~FFFFFFFFの32kBの消去と書き換えに要した時間は、2~3秒でした。

RAMに転送する場合とROMに書き込む場合とで、だいぶん動作が違ってくるので、MITOUJTAGでは書き込みの際にダイアログを1つ入れることにしました。

Mjice_romprog2

このダイアログで、ROMに書き込むか、RAMに書き込むかを選択して、アルゴリズムを切り替えるようにしました。

今日の夜か明日の朝くらいにはリリースできるようになると思います。
これが出来れば、もうFDT(Flash Development Toolkit)はいらなくなりますし、MD0やMD1を操作しなくても良くなるでしょう。
開発はGCCで行い、ROMへの書き込みは、MITOUJTAG/ICEとなるわけです。

| | コメント (0)

2011.05.25

Interface誌のRX62N用拡張基板(3)

いろいろなご意見を反映して、少しグレードアップしました。

① MARYボードを2個載せられるようにしました。(現時点のサイズ 約193mm×約74mm)
② 基板の左側から通常運用時に使用するケーブル(DC、Ether、USB等)を、下側からデバッグ用(RS232C、USB-JTAG)を出すようにまとめました。

Rxmega_plan4

だいぶん豪華になってきました。
最初は諭吉サイズだったのですが、羽子板のような形になってきました。振り回したくなりますね。

このボードは、バイト君(即戦力系新人)が設計してくれているのですが、CADを覚えて1週間でなかなかの出来栄えになってきています。今日はオーディオ系のアナログ回路を設計してくれていました。

あと、液晶をどうするかなどは悩みの種です。
 ・2行のキャラクタ液晶でいいのか
 ・秋月の1000~2000円台のグラフィック液晶がいいのか
 ・過去のSH2A付録基板のベースボードで紹介されたタッチパネル液晶が良いのか
 ・そのぜんぶに対応するのが良いのか
ニーズがどこにあるのかわからず、悩んでいます。

私としては、.NETとかで遊んでみたいので、タッチパネルカラー液晶かな。

それと、パソコン等でよく使われる緑と赤の2階建てのステレオジャックがDigikeyでは5000個~となっていて、なかなか入手困難です。これってどこかで売っていないものでしょうか。

まだまだご意見などを募集していますので、こんな機能も欲しいといったコメントでも何でも構いませんので、どしどしお寄せください。

あなた様のご意見で、どんどんグレードアップします。
今週の金曜日には仕様をFIXして、土日にパターンを考えて月曜日には出図したいと思っています。

| | コメント (5)

Interface誌のRX62N用拡張基板(2)

CQさんとは関係なく勝手に企画しているInterface誌のRX62N用拡張基板ですが、こんな感じのボードになりそうです。

Rxmega_plan2

Arduinoみたく基板の端を複雑な形状にしました。
また、Arduinoのシールドのおおきいやつをのせても大丈夫なように、少し、横を伸ばしました。サイズは、いまのところ諭吉くらいです。

なんか握って振り回したくなりそうな形です。

どんなコンポーネントが乗っているかというと、
Rxmega_plan3

ひきつづきご意見を賜れれば幸いです。

| | コメント (2)

2011.05.24

Interface誌のRX62N用拡張基板を考えています

ルネサスのデバイスが入手困難な状況が続いているので、既に市中に何万個と出回っているデバイスを活用できないかと・・
そう、つまり、Interface誌のRX62N用拡張基板を考えています。

こんなベースボードを考えてみました。

Rxmega_plan1

主なスペックは、


  • Interface誌付録のFRK-RX62Nを搭載
  • SDRAM(64~256Mbitのどれか)を搭載
  • イーサネットコントローラとRJ-45コネクタ搭載
  • レガシーなシリアルポート(D-SUB9ピン)搭載
  • 上記シリアルポート用ラインドライバ搭載
  • オンボードでUSB-JTAG機能を搭載
  • SPI ROM(16Mbit)をオンボードで搭載
  • 外付16bit D/Aコンバータ & オペアンプで高音質なサウンド出力
  • DC5Vアダプタ入力 & スイッチングレギュレータ
  • MMC Micro (SDカードも可) ※普通のSD/MMCのほうがいいかも
  • USBホスト用コネクタ(ESD保護、電流制限ドライバ付)
  • ブザー/スイッチ/LED
  • 150mm×75mm程度のお札サイズ
  • ネジ穴6個
  • Arduinoシールド搭載可
  • Maryボード用拡張基板搭載可

です。

「Arduinoシールド搭載可」というのは、その名の通り、Arduinoのシールド(拡張基板)を搭載できるということです。すでにArduinoシールドをお持ちであれば、それを活用していただけます。

Maryボード用拡張基板搭載可というのは、トラ技別冊のMARYボード(超小型ARMマイコン基板)の拡張基板を挿すことができるというものです。
MARYの拡張基板には、OLEDモジュールや、XBeeモジュール、GPSモジュールなど様々な拡張モジュールがあります。それらをお持ちであれば、活用していただけます。

つまり、RX付録基板でイーサネットやSDカードが使えるようになるだけではなく、ArduinoやMARYの拡張ボードも使えるようになってしまうわけです。しかも、ルネサスRXという国産マイコンで。
ちなみに、この企画はCQ出版さんとは全く関係なく独自に行っています。

このようなボードがあったら欲しいという方はいらっしゃいますか?
ご意見・コメント大歓迎です!
もしよろしかったら「こんな機能も欲しい」というご要望や、「これはいらない」というご意見をいただければ、幸いです。

よろしくお願いします。

| | コメント (8)

2011.05.23

MITOUJTAGとICEの統合(3)

今夜もMITOUJTAGにICEを統合する作業をすすめています。

今日は、実行ファイル(ELF)のダウンロードと、ブレークポイントの設定、GDBスタブの接続等ができるようになりました。また、ICEの画面上からリセットも効くようになりました。
現在は、RX62Nのみ対応しています。

Mjice_0522_1

今回、MITOUJTAGに統合したことにより、次のような点が改善されました。
 ・大きなファイルを書き込もうとした場合に固まったように見えてしまう状況を改善
 ・大きなサイズのメモリダンプをしようとした場合に固まったように見えてしまう状況を改善

大きな読み書きを小分けにすることで、固まることを防いでいるわけです。

これで、MITOUJTAGの画面上で、ターゲットマイコンのプログラムをRAM上にダウンロードして実行することができるようになりました。だんだん使えるレベルになってきたので、配布を開始したいと思います。

MITOUJTAG 2.0以降をご利用のお客様と特電RX62Nボードをご利用のお客様は無償でダウンロードできます。
下記のURLからICEの修正パッチをダウンロードしてください。
http://www.tokudenkairo.co.jp/login/login.php?url=mjice_smart_update.lzh
これを解凍すると、smartupdate.exeという実行ファイルがあるので、実行してください。
MITOUJTAGのEXEやDLLを置き換えて、ICEが実行できるようになります。

なお、このICEはまだ開発途上のβ版という扱いなので、バグ等あるかもしれませんので、お気をつけ下さい。

Pocket JTAG Cableを使う場合は、かなりサクサク動きます。
RX62Nボード上のオンボードUSB-JTAGではモッサリです。いずれ改善します。

Interface誌付録のRX62Nボードもデバッグできますよ。

次は、ELFの解析を強化してシンボルを読めるようにするか、もしくは、ICE上からROMに書き込めるようにしたいと思います。

| | コメント (0)

2011.05.20

MITOUJTAGとICEの統合(2)

MITOUJTAGにICEを統合する作業を進めています。

どんな様子かざっと紹介します。
なお、絵をクリックすると拡大表示されます。

① まず、JTAGケーブルとターゲットボード(ここでは特電RX62Nボード)をつなぎ、MITOUJTAGを起動します。
ここではPocket JTAG Cableのアイコンが表示されています。
Mjice_1

② ケーブルのINIT端子(RX62NのEMLE端子につながっている)をLにして、デバイスの自動認識を行います。RX62Nが検出されたので、「はい」を押します。
Mjice_2

③ パッケージの形状等を指定します。ここではBGA176ピンです。
Mjice_3

④ BGA176ピンのRX62Nが表示されました。バウンダリスキャンで端子の状態も見えます。
Mjice_4_2

ここまでの手順は今までのMITOUJTAGでも同じです。
ここからが違います。

⑤ メインメニューの「ツール」の中から「JTAG ICE」を選びます。
Mjice_5_2

⑥ すると、JTAG ICEが起動し、CPUはリセット状態で停止します。
Mjice_6
画面には現在のPCの番地からの逆アセンブラコードが表示されています。

⑦ すると、次々と逆アセンブラが伸びていきます。
Mjice_7

⑧ まだまだ伸びていきます。
Mjice_8

これは新機能で、アイドル時間を使って裏でターゲットボードのメモリの内容を読み出すようにしたのです。メモリの読み出しは結構時間がかかるので、こうした仕組みを作りました。最初に読んだPCの位置から、最大8192バイト分を読み出し、ステップ実行時にPCがジャンプしても逆アセンブルが途切れないようにするためです。

⑨ メモリダンプを行う際には、小さなダイアログが開くようにしました。このダイアログには入力した番地が保存されます。簡単ではありますが、ヒストリが効きます。
Mjice_9

⑩ PCを任意のアドレスにジャンプさせたい場合も、小さなダイアログが開くようにしました。
先ほどのメモリダンプのダイアログとは別ですので、アドレスは別に登録されます。
Mjice_10

⑪ 0x08000000番地にジャンプしてみました。全部00になっています。
Mjice_11

⑫ ICEの子ウィンドウを閉じると、CPU内のエミュレーション回路が切断され、再びバウンダリスキャンができるようになります。
Mjice_12

こんな感じで、MITOUJTAGとICEが統合されつつあります。
次はELFファイルのダウンロード機能を作りたいと思います。


| | コメント (0)

2011.05.17

MITOUJTAGにICEを統合します!

いよいよ重い腰を上げて、MITOUJTAGにICEを統合する作業を開始しました。

いま、MITOUJTAGの中の子ウィンドウのひとつとして、JTAG-ICEが動くようになってきました。
最初のターゲットはRX62Nです。

Mitoujtagice2

CPUの命令をステップ実行させながら、そのときの端子の状態をバウンダリスキャンで取得して、画面に表示できるといいなと思っています。

ご期待ください。

| | コメント (0)

2011.05.14

rx-elf-gccの問題点

rx-elf-gccを使用していて、困った現象に遭遇しました。

一言で言うと、RX用のGCCにはバグ(仕様?)があって、プログラムをそのままではROM化できないということです。

これは、自前でビルドしたGCCでも、ルネサス推奨のKPITのGCCでも同じです。
具体的にはどういうことかというと、初期値を持ったグローバル変数の初期値が正しくセットされないという現象が起きています。

例えば、初期値を持ったグローバル変数を作ります。


char message[] = "hogehoge";
int g_state = 1;

すると、これらの変数は.dataというセクションに配置されます。

.dataというセクションはなかなか扱いが難しいセクションで、スタートアッププログラムでROM上からRAM上へと転送してやらねばなりません。具体的には下記のようなコードで行います。


mov #__datastart, r1
mov #__romdatastart, r2
mov #__romdatacopysize, r3
smovf

したがって、プログラムをROM化する場合、.dataセクションに配置されたシンボルは、実行時の仮想アドレス(VMA)と、ROM上の配置されるアドレス(LMA)は異なるのが普通です。

さて、GCCでは、このようなことを実現するためにはリンカスクリプトで、


.data 0x00000000 : AT (0xffff0000) {
. = ALIGN(4);
PROVIDE(__romdatastart = 0xffff0000);
PROVIDE (__datastart = .); /* IF_ROROM */
PROVIDE (__preinit_array_start = .);
 ・・・

と書くことによって、実行時に参照されるアドレスは0x00000000、ROM上では0xffff0000番地と、分けることができます。実際には前のセクションの開始アドレスと長さから計算するように書くのですが、ここではわかりやすいように直接値を書いています。

RX用のあるプログラムをコンパイルしたところ、GNUリンカが吐き出すMAPファイルでは、


名前 Origin 長さ 属性
.data 0x00000000 0x898 load address 0xffff0000

となっていたので、仮想アドレス0x0000000はで、0xffff0000番地に配置されたことがわかります。

しかし、rx-elf-objdump -f ファイル名とやってヘッダ情報を見てみると、


セクション:
索引名 サイズ VMA LMA File off Algn
0 .fvectors 00000030 ffffffd0 ffffffd0 00009628 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .rvectors 00000400 fff80000 fff80000 00000094 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .text 00007ed0 fff80400 fff80400 00000494 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
3 .rodata 00000a2c fff882d0 fff882d0 00008364 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .data 00000898 00000000 00000000 00008d90 2**2
CONTENTS, ALLOC, LOAD, DATA
5 .bss 0000026c 00000898 00000898 00009628 2**2
ALLOC

となっていて、VMA=LMAになってしまっています。このため、rx-elf-objcopyを使ってELFファイルをMOTファイルに変換したときに、.dataの中身がFFFF0000番地に配置されず、00000000番地に配置されてしまいます。

実際にMOTファイルでは、


S3250000000000000000686F6765686F67650000000001000000040B00001C0000000000000068
S325000000200803000070030000D8030000000000000000000000000000000000000000000061
S32500000040000000000000000000000000000000001484F8FF0000000000000000000000000B
S3250000006000000000000000000000000000000000000000000000000000000000000000007A
S3250000008000000000000000000000000000000000000000000000000000000000000000005A
S325000000A000000000000000000000000000000000000000000000000000000000000000003A
S325000000C001000000000000000E33CDAB34126DE6ECDE05000B0000000000000000000000ED

見事に0番地に配置されました。

こういう理由のため、.dataセクション、つまりグローバル変数の初期値が正しいアドレスに配置されないのでROM化したプログラムは正常に動作しないのです。

では、どうしたらいいかというと、MOTファイルを生成する段階、つまりrx-elf-objcopyにオプションをつけてLMAを手動で指定してやります。

具体的には次のようにします。
rx-elf-objcopy --srec-forceS3 --srec-len 32 -O srec --change-section-lma .data=0xffff0000 testapp.elf testapp.mot

このようにしてLMAのアドレスを手動で指定してやれば、うまくROM化できます。
ただし、全自動ではできません。全自動化する方法は只今検討中です。



■追記
SHの場合はどうかというと、リンカスクリプトを

.data 0x0c400000 : AT( 0x0000c520))
{

としておいて、あるプログラムをコンパイル&リンクしたところ、GNUリンカが吐き出すMAPファイルでは、


名前 Origin 長さ 属性
.data 0x000000000c400000 0xec load address 0x000000000000c520

となっていました。objdump -hで見てみると、

セクション:
索引名 サイズ VMA LMA File off Algn
・・
4 .data 000000ec 0c400000 0000c520 0000c5c0 2**2
CONTENTS, ALLOC, LOAD, DATA

となっていて、VMAとLMAが適切に設定されています。
つまり、RXのリンカだけ、なぜかLMA=VMAにされてしまうようです。

| | コメント (5)

2011.05.11

rx-elf-gccでprintf等のライブラリを使う

rx-elf-gccでprintf等のライブラリを使うことができるようになりました。

printfは内部でmallocを使っているので、mallocが使えるようにしなければなりません。
mallocを使えるようにするためには、sbrkという関数を作る必要があります。
また、printfは、writeなどの低レベルな関数を使ってstdoutに出力します。

作る必要があるのは、sbrk、open、read、write、lseek、isatty、fstat、closeの各関数です。そして、writeの中でSCIに向けて1文字ずつ出力するような処理をすれば、printfの結果をシリアルポートに出力することができるようになります。

また、リンカで-lc -lgcc -lmのオプションをつけ、-L/usr/local/tkdn-20110507/rx-elf/rx-elf/lib/ -L/usr/local/tkdn-20110507/rx-elf/lib/gcc/rx-elf/4.6.0/とパスを通せば、ひととおりのライブラリ関数が使えるようになります。

三角関数の計算と、unsigned long long型を実験してみました。printfのソースコードを見たらlong long型がサポートされていたので、試したくなりました。

実行結果はこんな感じです。
Rxgccprintf

このGCCとprintfのサンプルアプリケーションを、こちらのURLにおいておきます。
GCCを使う際の雛型にしていただければと思います。
http://www.tokudenkairo.co.jp/rx62n/#download

(※リンカスクリプトをちゃんと作っていないので、まだROMからの起動はできません。RAM上へロードして実行してください)
なお、printfを使うとサイズが20kBくらい増えます。

上のサンプルアプリ中のtkdn_sci.cは、iodefine.hを参照していないので、GCCでもルネサスCコンパイラでもどちらでもコンパイルできると思います。

| | コメント (3)

2011.05.09

rx-elf-gccでのアプリの作成方法

昨日のrx-elf-gccを使ってアプリケーションを作る方法を紹介します。

Cのプログラムはmainで始まるというのは常識ですが、組み込み用のプログラムをGCCでコンパイルしたとき、そう簡単にいくものではありません。mainがどこから呼び出されるのかという問題と、プログラムやデータをメモリのどこに配置するかという問題があるからです。
昨日のrx-elf-gccでは、newlibに付属のデフォルトのスタートアップコードとメモリマップを使っています。このメモリマップは、/usr/local/tkdn-20110507/rx-elf/rx-elf/lib/rx.ld にあるものが使われるようで、内蔵RAM128kB、内蔵ROM768kBというありえない構成のCPUに特化されています。

したがって、rx-elf-gccでそのままコンパイルしても、決して動かないでしょう。
動くプログラムを作成するには、スタートアップコードとリンカスクリプトを作らなければなりません。
作ってみたサンプルプログラムはこちらにアップロードしました↓
「rxsample.lzh」をダウンロード

作ったプログラムの概要を簡単に説明しますと、0.5秒周期で割り込みを発生させて、PORT8.4をカチカチ動かすというものです。特電RX62Nボードならば圧電素子が時計のようにカチカチ鳴ります。

上の圧縮ファイルに含まれているファイルは
・intprg.c
 割り込みハンドラが並んでいます。
・iodefine_renesas.h
 ルネサス提供のiodefine.hを修正(後述)したものです
・main.c
 プログラムのメインです
・rx62n_ram_standalone.ld
 RAM上にJTAG ICEを使ってロードして動くようなメモリマップにするための指令です
・start.asm
 スタートアップコードです
・vect.h
 割り込みハンドラのプロトタイプが並んでいます
・vecttbl.c
 固定ベクタテーブルおよび再配置可能ベクタテーブルが並ぶ配列を定義しています 
・testapp.elf
 出来あがった実行形式ファイルです。これをJTAG ICEでダウンロードします。
・makefile
 ビルドするための手順が書かれています。

上のmakefileでmakeすればGCCで動くミニマムなものが出来上がります。
Rxsample

これで めでたしめでたし だと面白くないので、簡単に説明します。

RX62Nで動くプログラムをGCCで作成する場合、リンクの際にGNUローダにオプションをいろいろ指定します。前述のスタートアップとメモリマップの問題を手動で解決するためです。

リンカに渡したコマンドは下記のようになります。
rx-elf-ld -Map testapp.map start.o main.o vecttbl.o intprg.o -T rx62n_ram_standalone.ld -L/usr/local/tkdn-20110507/rx-elf/rx-elf/lib/ -lc -nostartfiles -o testapp.elf

太字にしたところがミソです。-T rx62n_ram_standalone.ldで独自のリンカスクリプトを指定し、-nostartfilesでデフォルトのスタートアップを使わないことを指定し、かわりに独自のスタートアップであるstart.oを指定しています。

また、ルネサス提供のiodefine.hはそのままでは使えません。それには2つの理由があって、iodefine.h内で使われている__evenaccessという指令をGCCが解釈できないのと、構造体のビットフィールドが左詰か右詰かという順序が違うようだからです。
だから、
 PORT8.DDR.BIT.B4 |= 1;
ではなく、
 PORT8.DDR.BYTE |= 0x10;
と、面倒でも書いてやらねばなりません。これはすべての内蔵レジスタに当てはまります。だから、.BITとかいう方法で特定のビットを指定するのは避けなければなりません。
(※KPIT GCCではiodefine.hを右詰にして自前で作り直しているようですが、全部のレジスタが定義されているわけではく、完全ではないようです)

iodefine.hで定義されているマクロが使えないので、割り込み許可レジスタとか、割り込みプライオリティレジスタの設定が超面倒くさいですが、データシートを見れば手動で設定できないことはありません。

こうすることで、RX用GCCを使って動くプログラムが作成できます。

リンカスクリプトやスタートアップコードを変えれば、ROM上でスタンドアローンで動くものや、SDRAM上で動くバージョンなども作れるでしょう。なお、上のスタートアップコードは完璧ではなくて、BSSのクリアやROMからRAMへの転送などが行われていません。それは今後行います。

| | コメント (0)

2011.05.08

RX用GCCをビルド&公開しました

この連休中、ずーっとRX用GCCを作っていました。

ようやく出来上がったので、下記のURLで公開します。
gccは4.6.0、binutilsは2.21、newlibは1.18です。

今はパスワードとかかけていないので、誰でもダウンロードできます。
http://www.tokudenkairo.co.jp/rx62n/#download

上のページの「RX用GCC」を右クリックして保存します。
これをダウンロードしたらCygwinのフォルダへ持っていって、
> tar jxvf tkdn-20110507-gcc.tar.bz2
で解凍します。

そして、
> mv tkdn-20110507/ /usr/local/
とやって、フォルダ一式を/usr/local以下に移動します。

> export PATH=/usr/local/tkdn-20110507/rx-elf/bin:$PATH
でパスを通せば動きます。
CだけではなくC++も入っています。

Rxelfgcc_2

configureでどのようなオプションをつけたかとか、構築するためにどんなことをしたかというのは目茶目茶長くなるので、もうひとつの日記のほうに詳しく書きました。ご興味がおありでしたら、ご覧下さい。
http://www.tokudenkairo.co.jp/hiroba/?m=pc&a=page_fh_diary&target_c_diary_id=137

実際のボードで動かすには、リンカスクリプトやスタートアップファイルを作らなりません。
それは次回のお楽しみに。

| | コメント (0)

2011.05.04

RX62N用のJTAG ICEを更新し、リリースしました

KPIT-GCCでRX62Nのプログラムを作って、RAM上にダウンロードするということを行っていたら、今までのJTAG-ICEにはバグがあってうまく動かないことがわかってきました。

そこで、RX62N用のJTAG ICE自体をデバッグし、バージョンアップしました。

今回の更新でバージョンはV1.83になりました。
更新点は下記のとおりです。
 ① シングルステップ実行を行うと、R2レジスタの内容が書き換わってしまうこと
   がある問題を解決した。
 ② 拡張子.xのファイルをELFファイルとして取り扱うようにした。
 ③ ELFファイルの読み込みで、開始アドレスが0になっていると正常に読み込め
   ない問題を解決した。
 ④ ハードウェア・ブレークが効かないことがある問題を解決した。
 ⑤ 逆アセンブラで、PC相対アドレスのデコード結果のバグを修正した。

このJTAG-ICEは、RX62Nだけではなく、RX62TやRX621にも対応しています。
下記のページから無償でダウンロードできるようにいたしました。
http://www.tokudenkairo.co.jp/rx62n/#download

なお、このJTAG-ICEは、日ごろからのお客様への感謝の気持ちを込めて、特電RXボードのユーザ様以外でもダウンロードできるようになっています。
だから、気軽にダウンロードして使ってみてください。試用期限などはありません。
おそらく、Interface誌の付録基板にも使えるでしょう。

Nahice183※MITOUJTAG各種エディションか、Spartan-6関係をご購入のお客様


これで、KPIT-GCCで作ったプログラムをRAM上にロードして動作させるということが可能になります。

5月2日までに発送した特電RX62Nボードに同梱のCD-ROMの内容も古い(バグあり)ので、お手数ですが更新してくださいますようお願い申し上げます。ブレークポイントがしっかりとかけられるようになった点が大きいです。

シリアルモニタを作ってHEXファイルをロードする方法や、FDTでROMに書き込む方法などいろいろ試してみましたけれども、やはりJTAG ICEを使ってRAM上に直接書き込んでしまうのが一番楽かなと思いました。

| | コメント (3)

2011.05.02

究極のRX62Nボード出荷開始しました

大変お待たせいたしました!
今年の1月ごろから設計を進めていた究極のRX62Nボードですが、ようやく、出荷を開始することができました。

本ボードのスペックを簡単にまとめると、
 ・RX62NのBGA176ピン(内蔵RAM96kB、内蔵ROM512kB)
 ・SDRAM搭載 (32bit幅 16Mバイト)
 ・USBが2ポート(USBホストとUSBファンクションが同時に使える!)
 ・SPI フラッシュROM、MicroSDカード
 ・LAN対応
 ・手のひらサイズ(75mm×61mm)で、万能基板にも乗る
 ・サブプロセッサ(78Kマイコン)搭載で、USB-JTAG機能をオンボードで搭載
です。

ブロック図はこんな感じです。
Rx62nbrd_block

ピン配置図も描いてみました。
Rx62nbrd_pin1

今年の3月までは『よーし、大量に作ってRX62Nを普及させるぞ!』と意気込んでいたのですが、あの地震の影響でルネサスのマイコンが市場から消えてしまったのです。

代理店にRX62Nを注文しようとしても半導体工場が止まってしまっていて、どこからも「納期未定」という回答しか得られなかったのです。流通在庫を探してもどこも全部ダメ。怪しげな海外業者も全部ダメ。
もう、こうなったら、ルネサスの工場が復旧するのを待つしかありません。7月以降に生産再開という言葉を信じるしかありません。

たくさん量産して製造コストを引き下げようと思っていたのですが、この半導体不足が起きて、生産計画を見直すことになってしまいました。本来は2万円台で販売する予定だったのですが、15個しか生産することができなかったので、どうしても量産を行うことができませんでした。

当初の予定価格よりも高くなってしまって申し訳ございません。私どもとしても、この金額がギリギリのラインです。この金額でもほとんど利益が出ないのです。

でも、その代わりですが、いろいろとおまけをいたします。
 ① MITOUJTAG BASIC特別版 (本ボードでのみ使用できます)
 ② JTAG ICE評価版
 ③ 小冊子「RXマイコンハードウェア設計 7つの罠」 ※予定

最後のは何かというと、私自身がもう少し使いこんでみてRXマイコンに慣れてきたら、そういう小冊子を作ろうと思います。

ご存知のとおり、RX62Nマイコンは1つの端子でいろいろなペリフェラルの機能を兼用しているので、罠が盛りだくさんなのです。これからハードウェアを設計しようとしている方が地雷を踏まないように、設計上の注意点をまとめたいと思っています。私と同じ間違いを犯さないように、痛い思いをしたところをノウハウ集にして配布したいと思います。

そういうわけで大変申し訳ないのですが、今回のロットは15台しか作ることができませんでした。すでに9台のご注文をいただいておりますので、残り6台しかご提供できません。

もし、どうしても、もっともっと安い価格で欲しいという方がいらっしゃいましたら、どうか秋ごろまでお待ちください。そのころにはルネサス工場も復旧して、量産ができるようになってコストが下げられると思います。一刻も早くRX62Nを試してみたいという方はお急ぎください。

あと6台までなら、今すぐにご提供できます。

RXマイコンが世の中に普及する前に、貴方はいち早くRX使いになることができます。

| | コメント (7)

« 2011年4月 | トップページ | 2011年6月 »