« 2011年12月 | トップページ | 2012年2月 »

2012.01.31

RX62Nでファンクションジェネレータを作る

RX62Nで2chのファンクションジェネレータを作ることができました。
のこぎり波やサインカーブだけではなく、任意の波形を発生させることができます。

Rx62n_fg

どういう原理かというと、次の図をご覧下さい。
Rx62n_dds_2

タイマを使ってDMAコントローラを駆動し、内蔵RAMに書かれた波形データをDAコンバータに転送するというわけです。

この構成では、コンペア・マッチ・タイマCMT2を使って1MHzの割り込み信号を作ります。1MHzの割り込みというと尋常じゃない感じがしますが、CPUが受け取るのではなくDMAコントローラのトリガとして動くように設定するのです。この辺がRX62Nのアーキテクチャのすごいところです。

DMAC0をリピートモードに設定して、メインメモリから波形データの1ワードを読み出してきて、それをDAコンバータの出力値設定レジスタに書き込むようにします。このときに使われるデータバスは「内部メインバス2」というのが使われる(はず)なので、CPUの動作を介さずにハードウェアだけで上記の処理を1MHzのタイミングで行うことができるわけです。

CPUがどんな処理を実行していようとも、それの影響を受けずにハードウェアが粛々と波形を出力してくれることでしょう。

さて、DMAコントローラはノーマルモード、リピートモード、ブロックモードと3つのモードがありますが、ここではリピートモードを使います。リピートモードというのは、メモリの決まった範囲を順繰り順繰り読んで、内蔵ペリフェラルの決まったレジスタに書き込むといったような場合に使えます。

さて、技術的な課題がいくつかあります。
・出力チャネル数を2chにしたいかどうか
・DDSみたいにしたいか、FGでよいか
・出力周波数をきっちりとした値にしたいかどうか

【波形出力を2chにする方法】
まず、出力チャネル数を2チャネルにしたいかどうかです。2チャネルにするには、DA.DADR0とDA.DADR1という2つのレジスタに書き込まなければなりません。しかし、これらのレジスタに同時に値を書き込むには、DMACが1つでは足りません。2つのDMACを動かせばよいのですが、後述のDDSモードではDMACを「拡張リピートモード」と「オフセット加算」で使うので、2つ同時には使えません。

そこで、禁じ手を使いました。DA.DADR0とDA.DADR1は本来は16bitサイズのレジスタだが、アドレスが隣り合っているので、32bitサイズでアクセスすれば一括でアクセスできないだろうか?ということです。ルネサスのCPUの内蔵ペリフェラルはレジスタにアクセスするときのサイズが厳しく決められていて、本来はこういうことはできないはずなのですが、それを承知でやってみたところ、なんとなくうまくいきました。「なんとなく」というのはDA1とDA0の値がなぜか逆になっているためです。エンディアンの関係かもしれません。動いているように見えるけどやっぱり何かあるのでしょう。
Rx62n_da


【DDSみたいなものの実現方法】
次にDDSみたいなものにしたいかどうかです。DDSにするには、メモリから読み出していく値を、例えば5とか、決まった値だけ加算していく必要があります。それを実現するには、DMACのオフセット加算モードというのを使います。
しかし、オフセット加算モードだけでは、用意した波形バッファの範囲をオーバーしてしまう可能性があります。波形データを1024ポイント分作っておいて、次のデータが1022+5の場所だというときには、&1023してやって4番目のデータを見てやらねばなりませんが、ソフトウェアでやるわけにはいきません。
そこで、DMACの拡張リピートモードというのを使います。拡張リピートモードでは、アドレスの下何ビットかだけを有効にして、上のビットをマスクして順繰り順繰りしてくれるモードです。今回のようなDDSの機能を実現するにはうってつけです。
Rx62n_offadd

【周波数を正確な値にする方法】
最後に出力周波数を正確に1.000kHzのようなきっちりした値にしたいかどうかです。1.000kHzにするには、リピートモードの周期(データ数)を1000とか500とかにしてやらねばなりません。しかし、そうすると拡張リピートモードが使えなくなります。976Hz、1.953kHz、2.928kHzと、ちょっとずつ遅い周波数になってしまいますが、仕方がありません。
他のアプローチとしては、メインクロックの水晶の周波数を12MHzではなく、12.288Hzにしてやるという方法も考えられます。クロックの水晶を12.288MHzにしても、CPUの動作クロックは98MHzなので動作範囲内です。

それから、SDRAM上に大容量の4Mバイトくらいの大きな波形データを用意してやるという方法も考えられます。1周期が1MHz/1048576になるので、999.59Hzのようにより近い値が出せます。

DMACは高機能なので、まだ理解していない使い方があるかもしれません。DDSモードとFGモードの切り替えは簡単なので、両方に対応させておいてもいいかもしれません。今後にご期待ください。


今回のファンクションジェネレータの動作を動画にしたので、ぜひご覧下さい。
チップ単体でここまでできます。

音声帯域なら十分に実用的になるのではないかと思います。

このプログラムは下記のリンクから無償でダウンロードできるようにしたので、ぜひ、お試しください。
「fg.mot」をダウンロード

究極のRX62Nボード、RX-MEGA、RaXino♪など、RX62Nボードであれば何でも動作すると思います。
また、USB(RX62Nの仮想COMポート)を通じて周波数を操作することができます。'0'~'9'までの数字を打つと、約1~10kHzで周波数が変わります。's'を打つと、周波数のスウィープが楽しめます。

追記。
ひとつ間違えていたことがありました。拡張リピートエリアを設定するときには、ノーマルモードにしたほうがよい??のかもしれません。

ノーマルモード+拡張リピートエリア設定にしたら、SDRAM上の巨大な波形バッファから上手く転送することができて、周波数を滑らかに変化させることができるようになりました。

カクカクではなく、うにょうにょと変わります。

つまり、メモリをたくさん積んだ究極のRX62Nボードなら約0.数Hz単位で周波数を変えられる。チップ単体で外付けメモリを持たないRaXino♪でも約1kHz刻みのステップで周波数を変えられるというわけです。

| | コメント (0)

2012.01.27

RX-MEGAでMARY-GB(GPSモジュール)を使う

RX-MEGAでMARY-GB(GPSモジュール)を動かしてみました。

MARY-GBは、9600bpsのシリアル通信でGPSのデータを出力してきます。
RX-MEGAにはMARYの拡張基板をのせるコネクタが2つ用意されています。右側のコネクタにMARY-GBを乗せた場合はRXのSCI6Aに、左側に乗せた場合はRXのSCI2Bに接続されます。

どちらがいいかというと、断然、右側のSCI6Aです。
なぜならば、RXマイコンのSCI2Bは、ポートP50と共有されています。RX62NのP50、P51、P52あたりは鬼門中の鬼門で、外部バス(SDRAMなど)を有効にすると、有無を言わさずに外部バス用のポートになってしまうのです。

つまり、SCI2BとSDRAMは同時には使えません。

そういうわけで、MARYコネクタの右側にMARY-GBモジュールを乗せます。
Mega_marygb

プログラムは簡単なものを作ります。MARY-GBから受信したGPSの文字列を、USB仮想COMポート経由でホストPCに投げるだけの簡単なものです。
このプログラムをROMに書き込んで、装置全体を空が見える窓際に置いて、GPSの受信をしてみます。
Marygb

GPSモジュール自体は動いていて1秒ごとにデータを送ってくるのですが、困ったことに肝心の電波が受信できていないようです。

Gps_recv

同じオフィスの中で携帯電話のGPSは動いているので、MARY-GBが壊れてしまったのかもしれません。もしくは、MARY-GBに向かって何かコマンドを送らないと動作を開始してくれないのかもしれません。

作ったプログラムは次のようなものです。


int main() {
sci_init(SCI_SCI6A,9600); // SCI6-Aを使う
TKUSB_Init(); // USBを使う
 
while(1) {
while(sci_rxcount()) {
char c = sci_getc(); // GPSから1文字受信
TKUSB_SendByte(c); // それをUSBに投げる
}
}
}

機会があれば追実験をしてみたいと思います。

| | コメント (2)

RXduino環境でのUSBの使い方

前回のブログでは特電HALライブラリを使ってUSBの通信を行いましたが、RXduinoライブラリでUSBを使うのはもっと簡単です。

RXduinoは起動する際に、グローバルなクラスのインスタンスSerialという物を作ります。
このSerialインスタンスは、中で

sci_init(SCI_AUTO,38400)を実行しているので、最初に接続されたSCIやUSBの仮想シリアルを通じて通信するようになります。※この動作を変更するにはRXduinoライブラリのソースSerial.cppを修正する。

RXduino環境でUSBを使うには、次のようなプログラムを組みます。


#include
 
void setup() {
Serial.begin(38400);
Serial.println("Serial sample program (RXduino version)");
Serial.println("CRとLFのコード変換も行っています");
pinMode(PIN_LED3,OUTPUT);
int count = 0;
}
 
void loop() {
while(1) {
if(Serial.available()) { // 何か受信した文字がある
char tmp[10];
char c = Serial.read(); // 1文字受信
tmp[0] = c;
tmp[1] = '\0';
Serial.print(tmp); // エコーバック
if(c == 0x0d) {
Serial.print("[\\r]");
}
else if(c == 0x0a) {
Serial.print("[\\n]");
}
else {
Serial.print("[");
Serial.print(c); // 文字コードを10進で表示
Serial.print("]");
}
digitalWrite(PIN_LED3 , count++ & 1);
}
}
}

このサンプルプログラムは、ホストPCから送られた文字をエコーバックするとともに、文字コードを数字にして表示します。
Rxduino_usb


| | コメント (0)

RXマイコンでのUSB(ライブラリ)の使い方

RaXino♪や、究極のRX62NボードRX-MEGAで使われる特電ライブラリでのUSBの使い方をまとめておきます。あと、特電のボードだけではなく、Interface誌の付録基板でも使えます。

Raxino_usb

特電のライブラリには「RXduino」というC++でArduino互換のものと、「特電HAL」というC言語のライブラリがあります。これらのライブラリでUSBを使う方法を説明します。(特電HALとRXduinoのコアは一緒で、RXduinoは特電HALを呼び出しているにすぎません。)

これらのライブラリにはUSBファンクションで実現したCDC(いわゆるUSB-UARTのこと)が組み込まれているので、RXマイコンとホストPCをつないで、TeraTermなどを通じて簡単に通信できるようになります。

まず、特電HALのほうから説明します。
このライブラリはUSBは仮想UARTを実現しているので、COMポートをオープンする要領でUSBが使えるようになります。

USBを使えるようにするには、プログラム中で、


sci_init(SCI_USB0,38400);

というコードを実行します。
※38400は速度ですが、USBの場合は何を設定しても構いません。実際には毎秒数百キロバイトでます。

ここで


sci_init(SCI_SCI0P2x,38400);

にすると、RXマイコンのSCI0のTxD,RxDを使って、レガシーなUARTを通じて通信が行われます。SCI0P2xというのは、RXマイコンのSCI0はP20,P21番端子と共有されているのでこのような命名をしました。

つまり、RXマイコンからみて、USB仮想COMポートでも、SCIを使ったレガシーなUARTでも、プログラム上は同じコードが使われます。


sci_init(SCI_AUTO,38400);

とすると、システムの起動時にUSBとSCI0とSCI1のうち、一番先に何らかのデータを送ってきたCOMポートが開かれるようになります。

ポートがオープンされると、TeraTermなどから開けるようになります。
Rx_usb

これでUSBを使う準備ができました。

ところで、組み込みマイコンの中で動くC言語での改行コードと、Windows上でTeraTermなどを使って通信する際の改行コードは異なります。これが異なると改行が反映されなかったり、2回改行されたりします。
そこで、


sci_convert_crlf(CRLF_CRLF,CRLF_CRLF); // \nを\r\nに変換

とやって、ライブラリの中で改行コードを自動的に変換できるようにします。

あとは、RXのプログラムの中からホストPCに文字列を送信したいならば、


sci_puts("hogehoge");

とやります。
ホストPCからRXマイコンに文字を送ったら、マイコンの内蔵RAMの中のバッファに格納されます。そのたまったデータ量(バイト数)を調べるには、

sci_rxcount()

関数を呼び出します。この関数が0でない値を返したならば、何か受信データがあります。
その場合は、

 char c = sci_getc(); // 1文字受信

とやって、1文字受信します。

USBまたはSCIのポートを開いて、エコーバックするプログラムの例を次に示します。


sci_init(SCI_AUTO,38400); // 自動的にCOMポートを判別してオープンする
sci_convert_crlf(CRLF_CRLF,CRLF_CRLF); // \nを\r\nに変換
sci_puts("Hello I'm RX62N\n");
while(1) {
if(sci_rxcount()) { // 何か受信した文字があるか調べる
char c = sci_getc(); // 1文字受信
sci_putc(c); // エコーバック
}
}

こんな簡単なコードで、RXマイコンとホストPCとの間で通信ができるようになります。

手軽に試してみたい場合は、Webコンパイラを使ってみてください。

http://www.tokudenkairo.co.jp/rxmega/webcomp/

上のURLからWebコンパイラを開いて、「シリアル通信(HAL版)」のサンプルコードをクリックし、「コンパイル実行」ボタンを押してみてください。ターゲットボードを「RX-MEGA」にしておけば、Interface誌付録の基板単体でも動きますので、すぐに試せます。

Frk_rx_usb

MOTファイルが生成されてサーバから送られてくるので、これをRXマイコンに書き込めば、すぐにUSB通信のプログラムが試せます。
Frk_rx_usb_teraterm

Webコンパイラは、シリアル番号の入力などは必要ないので、気軽に試してみてください。

http://www.tokudenkairo.co.jp/rxmega/webcomp/

| | コメント (3)

2012.01.26

ルネサスE1エミュレータを使ってみた

ルネサスE1エミュレータというのを入手したので、使ってみました。
Renesas_e1

ターゲットボードは、特電究極のRX62NボードではCN5に、RaXino♪ではCN6につなぎます。
特に基板の改造とかは必要なく、そのままつながりました。

E1_ult62nE1_raxino_2

E1は200mAまでなら電源供給ができるようなのですが、安全のためUSBから給電しました。

E1を使うには、HEW(High-performance Embedded Workshop)を使います。

ただし、E1の中に入っているデバイスドライバソフトと古いHEWは相性が悪くて認識してくれないようなので、ルネサスエレクトロニクスのWebサイトから、最新版の「e1e20rxfullv102r00.exe」というのをダウンロードしてインストールしたほうがいいと思います。アップデートが行われ、HEWのバージョンはVersion 4.09.00.007になりました。

E1を使うには、HEWで新規プロジェクトを作成する際に、E1エミュレータを使う設定をします。
まず、HEWで普通に新規プロジェクトワークスペースを作成します。
E1_1

普通にプロジェクトを設定していって、8/10-デバッガの設定の部分で「RX E1/E20 SYSTEM」をチェックします。
E1_2
※HEWやドライバのバージョンが古いとこの表示が出ません

9/10-デバッガオプションの画面は次のようになるはずです。
E1_3

プロジェクトが作成され、HEWの見慣れた画面になりました。
E1_4

HEWの画面の右上にあるDefaultSessionというところをSessionRX_E1_E20_SYSTEMに変更すると、E1エミュレータと接続されます。
E1_5

そして「デバイス」と書かれたダイアログが開くので、CPUのグループと型番を設定します。
E1_6

E1_7

次の画面が開いたら、EXTALのところに12と入力します。
E1_8_2

ホットプラグインをチェックした場合は、JTAGケーブルを抜いた状態で上の手順を行ってください。そして、次の画面が出たところでケーブルを挿してください。(先にケーブルを挿しているとうまくいきません)
E1_9

IDコードが要求されたら、(プログラム中で特に設定していなければ)、FFFF…と32回入力します。
E1_10

あとは、HEWのこの辺のツールボタンを押せば、プログラムを止めたりメモリの内容を見たり、逆アセンブラしてステップ実行などができます。
E1_11

現状のRaXinoのプログラムはGCCで作っているので、HEWではC/C++のソースコードレベルでのデバッグができません。この問題を解決するには次のようにします。

上の手順は、HEWでプロジェクトを作成する際にE1を使うという設定を一緒に行うものでした。HEWでプロジェクトを作成する際に、Debugger Onlyというタイプのプロジェクトを作成することもできます。

E1_12

普通に「次へ」「次へ」と押して行ってプロジェクトを作り、HEWのいつもの画面になったら、プロジェクトツリーのDownload Moduleで右クリックして、「ダウンロードモジュールの追加」を行います。

このようにすると、ELFファイルを読み込むことができますので、GCCで作成したELFファイルも読み込めます。
E1_14

GNUのライブラリの中にあるファイルが見つからないといってきますが、ここは重要ではないので、そのままOKを押します。
E1_15

プロジェクトツリーの中から目的のソースファイルをクリックすれば、それが開きます。
ブレークポイントも仕掛けられますし、ソースコードレベルでのデバッグもできます。
E1_16

変数のウォッチもできます。完全なフル機能のJTAGデバッガとして動作します。
E1_17

ざっと試してみたところ、RaXino♪も究極のRX62Nも、E1エミュレータを接続することができました。

そういうわけで、E1エミュレータは便利なので、特殊電子回路でも小規模ながら販売することにしました。正規ルートで若干量仕入れています。価格は12,500円(税込・送料込)なので、業界最安値であることは間違いなしです。当社の利益は全くありません。

特電究極のRX62NボードやRaXinoとセットでお買い上げいただくと、さらに割引をいたします。
RaXino♪とセットでお買い上げいただくと、E1エミュレータを11,000円(税込)に値引きします。
究極のRX62Nボードとセットでお買い上げいただくと、E1エミュレータを11,500円(税込)に値引きします。

当社のRXマイコン基板と、便利なE1エミュレータをぜひともお使いください。

| | コメント (0)

2012.01.24

特電の商品発送方法に「なひたふ直送便」を追加!【1月限定】

特電オンラインショップの配送方法に「なひたふ直送便」が追加されました。
これは、私(なひたふ)が、自転車で貴方の会社まで直接配達するプランです。

当社の神田オフィスから概ね2kmの範囲(と墨田区の一部)のお客様は、この配達方法をお選びいただくことができます。

もちろん、当日配達も可能です。

 「今日、すぐにFPGAボードやCPUボードがほしい」
 「銀行振込の手間と費用が惜しい」
 「直接持ってきてほしい」
 「操作方法を教えてほしい」
 「なひたふに直接聞きたいことがある」
 「小一時間問い詰めたい」
 「お茶でもどうぞ」

などなど、どんな理由でも構いません。
サービス料金は無料です。

ぜひ、貴方のオフィスに「なひたふ」をお呼びください!!
「顔が見えるサービス」とはこういうことだと思います。

※ご希望時間や配達先にによっては、承ることができないこともありますので、あらかじめご了承ください。
(深夜配達希望とか、ライバル会社や怖い事務所に持っていくとかはダメです)

代金の支払い方法は、銀行振り込みの他、配達員(なひたふ)に直接手渡していただいても構いません。その際には領収書の発行もいたします。いろいろなオプションやご要望があると思いますが、ご希望がございましたら備考欄にお書きください。ご希望は可能な限り承ります。

ただ、注文が殺到するといけないので、1回のご注文で15,000円以上の商品をご注文の方に限定させていただきます。何卒ご了承ください。

とりあえず、1月末までこの直送便のサービスを提供します。2月からどうするかはまた検討します。

では、なひたふをお呼びください。お待ちしています。

■なひたふ直送便についての詳しくはこちら

| | コメント (3)

世界一使いやすいRXマイコンの書き込みツール

世界一使いやすいRXマイコンの書き込みツールを作りました。
このツールは、FDTの代わりに使うことができて、RX62NのUSBブートモードで内蔵フラッシュROMに書き込みができます。

Rxprog

特徴は、
 ・RX62Nの接続を待ちうけることができる
 ・ファイルが更新されるまで待つ
 ・最近使ったファイルのリストを保持している
ということなのですが、実際の動作を動画で見て見ましょう。

「書き込みボタン」を押しておけば、MOTファイルが更新されるまで待ったり、RX62Nが接続されるまで待ったりというのをツールがやってくれるのです。

今までのFDTだと、①MOTファイル生成→②RX62NをUSBで接続→③MD0をジャンパしてリセット→④書き込みボタンを押す、という手順どおりにやらねばなりませんでしたが、このツールではどんな手順でやってもOKです。

組み込み開発では、なんどもなんどもプログラムを修正して書き込んでいると、上の手順を律儀に守るのが面倒になってきますが、このツールならば好きな順番でできるので、とても楽になります。

こちらからダウンロードできます。もちろん無償です。
どうぞお使いください!

| | コメント (0)

2012.01.22

SATA IPコアをリリースします。無償評価版もあるよ

特電SATA互換IPコアをリリースします。
このコアは、EXPARTAN-6Tで動作するように設計されています。付録のサンプルデザインを使うと、WindowsのMS-DOSプロンプトからUSBを通じてFPGAを操作して、FPGAの先にあるSATAのSSDやHDDにアクセスできるという代物です。

EXPARTAN-6Tの横にあるSATAコネクタに、HDDやSSDをつないで電源を入れ、
Satassd

MS-DOSプロンプトからサンプルアプリを起動すると、まず最初にドライブの「デバイスID」が取得されます。このデバイスIDの中には最大セクタサイズや、HDDがサポートするコマンドセットなどの情報が格納されています。

Sata_dos

その後はdmardや、dmawrといったコマンドを打って、任意のセクタに読み書きできます。
Cmd_dmard

まだまだ完璧とはいえないコアですが、一応、様々なHDDで動作確認ができています。(詳しくはお問い合わせください。)
このコアが従来他社の製品と比べて何が良いかというと、やはり価格ではないかと思います。

このコアは、EXPARTAN-6Tで動くことを前提として作られていて、Spartan-6LXTの中にあるDeviceDNAというしくみを使って特定のFPGAだけで動作するようにもできます(限定版)。そのため、プロジェクトごととか会社ごとといったライセンス形式ではなく、ボードごとにライセンスができるため、IPコアのライセンス費用が安くできるのです。
1台や2台といった小数の試作機器や研究開発にとって、いままではSATAは高値の花でしたが、このIPコアなら目の前にある1台のHDDだけに書き込めればよい、という状況で威力を発揮するものと考えています。

速度は約130~140MB/s出ていて、SATA(1.0)の限界まで無駄なく使えています。

SATAサンプルデザインについての詳しい使い方はこちらのページに書きました。

無償評価版も用意いたしましたので、EXPARTAN-6Tをお持ちの方は、ぜひとも試してみてください!
※なお、操作を誤るとSSDやHDDに格納されたデータを消してしまうので、実験の際は不要なHDDをお使いください。

| | コメント (1)

2012.01.18

RXのモニタプログラム

RXマイコン用のモニタプログラムを開発しています。
どんなものかというと、メモリ(ROM,RAM,内蔵ペリフェラル)空間の任意のアドレスをダンプできたり、内容を書き換えることができたりするほか、SDカードの中身をdirやcd、typeしたりすることができるというものです。

Rxmon2

SPIメモリのダンプや、RTCの操作もできます。

なぜ、このようなモニタプログラムを作っているかというと、RXマイコンに如何にして楽に書き込むかという方法を模索した結果です。

JTAGを使わずに内蔵フラッシュROMに書き込むには、MD0のジャンパを変更してリセットボタンをおさなければなりません。この操作がすごく煩わしいのです。JTAGを使えば内蔵フラッシュROMの中身は書き換えて、リセットもJTAG越しに行えますが、RaXinoにはUSB-JTAGがオンボードでついていない・・

パソコンの画面の中、つまり、マウスとキーボードの操作だけでアプリケーションのダウンロードと実行開始の指示ができるようにしたいのです。

それに、やっぱり、小さなプログラムを書いて実験するだけならば、ROMアプリではなく、RAM上に軽くロードして実行したいと思いませんか?

そういうわけで、RX用のモニタプログラムを作りました。
起動するとピポと鳴って、シリアルポートや、USB仮想COMポートからの接続を待ち受けます。
その後、loadというコマンドを打つと、Sレコードファイル(モトローラ形式HEXファイル)を待ち受ける状態になります。

RXのプログラムをビルドする際に、開始番地をRAM上にセットしておけば、RAMアプリが作れます。そうして作ったSレコードファイルを流し込みます。通常は0番地から開始するプログラムとして作ります。

そして、rebootコマンドを送ると、CPUにリセットがかかって、先ほどロードしたRAMアプリが起動するというわけです。これなら、パソコンの画面の中だけで操作できます。

Rxmon1

ここで問題が3つあって、
① ロードしたRAMのプログラムが、RXモニタのワーキングエリアと重ならないか?
② リブートはどうやるのか?
③ リセットがかかると、USBの仮想COMポートはどうなるのか?

まず、①の問題ですが、RXモニタはROM上で動くアプリとしてつくり、ワーキングエリアは0x10000~0x17fffまでを使うようにします。ロードするRAMアプリは64kBのサイズ制限を設けることで、エリアがぶつからないようにします。ユーザプログラムエリアは64KBでもかなりのものが作れます。

②のリブートですが、ウォッチドッグタイマを使います。ウォッチドッグタイマがオーバーフローすると、内蔵ペリフェラルも含めてリセットされます。ただし、「ウォッチドッグタイマが溢れた」ということを示すフラグ(WDT.RSTCSR.WOVF)はリセットされません。メモリの安全な場所にRAMアプリの開始番地とキーワードを書いておいて、スタートアップルーチンが「RAMアプリ起動のためのリブートだな」と判断したら、RAMアプリの実行開始番地へジャンプするようにします。

③のUSB仮想COMポートは悩ましい問題です。USBがリセットされてしまう(つまり、抜き差しと同じ状態)ので、新しいプログラムでRXが起動する前にTeraTermを閉じて、新しいプログラムが起動したらTeraTermを再度開かなければなりません。
そこで、もし仮想COMポート経由で操作されている場合には、リセットまでに5秒間の猶予が行われるようにしました。

Rxmon3

これで、USB仮想COMポートだけでも十分に遊べるようになるはずです。
今はまだSDRAMは使っていません。今後はSDカードからのプログラムのロードなどができるようにしたいと思っています。

RaXino用と、究極のRX62Nボード基板用のRXモニタプログラムは、こちらからダウンロードできます。
「RaXino♪用 RXモニタプログラム」をダウンロード
「究極RX62N(初期版)用 RXモニタプログラム」をダウンロード
「究極RX62N(RevA)用 RXモニタプログラム」をダウンロード
※動作は一切無保証です。

ダウンロードしたMOTファイルを、RXPROGやFDTを使って内臓フラッシュに書き込んでください。

| | コメント (2)

2012.01.17

RX62N関係のページをいろいろ更新

究極のRX62Nボードと、RaXinoのページを更新しました。
Ultim62n_1Raxino_1

また、RXduino&特電HALのライブラリも更新して、version 0.62となりました。
主な更新点は、
・(ボードごとにSPIのポートが異なるけど)#ifdefのマクロを使って、どのボードでもMMC/SDカードがきちんと動くようにした
・マイクロSD/MMCカードの検出スイッチに対応
・そのほか、SPIやGPIOがちゃんと動くようにした
・RaXinoの加速度センサのデモを追加

今回の更新したライブラリをダウンロードしてインストールするのが面倒だという方は、Webコンパイラをご利用ください。WebコンパイラもRaXino♪に対応しました。

Webcomp

上の画像をクリックすると、Webコンパイラへ移動します。Webコンパイラというのは、クラウド環境の中でRX用のGCCが動いていて、Web上に書いたコードをコンパイルしてELFファイルやMOTファイルにして返してくれるものです。

「Webコンパイラで生成したMOTファイルをRXPROGを使って内蔵フラッシュに焼きこむ」という今までの常識を覆すような開発スタイルが可能になってきました。

これで、MacでもLinuxでもスマホでもいつでもどこでもRXマイコンの開発ができるようになってきました。

| | コメント (0)

2012.01.16

LinuxからRXマイコンの内蔵フラッシュへ書き込み

LinuxからルネサスRXマイコンの内蔵フラッシュへ書き込みがなんとなくできるようになりました。
Linuxrxprog

libusbというモジュールを使っているのですが、オープンした後でusb_set_configurationという関数を呼ばないといけないはずなのですが、呼ぶとその後のusb_bulk_writeで失敗してしまいます。
なので、usb_set_configurationなどを行わずに読み書きしています。これでいいのかどうかは何ともわからないです。

そのうち公開します。

| | コメント (2)

2012.01.14

究極のRX62Nボードの情報を充実させようと思います

昨年の4月に発売開始して、地震の影響でCPUが入手できなくなって、生産は元にもどったけど、なんとなくほったらかしになっていた「究極のRX62Nボード」ですが、これから頑張って情報を充実させていこうと思います。

今思えば、結構すごいボードなんです。

ちょっくら気合を入れて、ハードウェアマニュアルを書きました。まだPRELIMINARYですが、JTAGひろばのほうにアップしておきました。
Rxman

RaXinoの開発とかをしていたら、USBのプログラムとか、SDカードとか動くようになってきて、それを究極ボードに持っていったら同じように動いたわけです(当然といえば当然)。

昨年末はRaXinoとか小型のものを頑張ってきたけど、やはり、大容量のSDRAMが使えるとなると、いろいろ夢が広がります。
「基板単体で動くJTAGバウンダリスキャンコントローラ」
なんていうのを作ってみたいと思っています。以前、MITOUJTAGのライブラリをSH-4に移植して、SH-4のシリアルポートにコマンドを送ると、そのとおりにターゲットデバイスをバウンダリスキャンで操作してくれるという装置を作ったことがあります。それが究極のRXボードなら動きそうなので・・

あと、
「基板単体で動くFPGA JTAG書き込み器」
なんかも魅力的です。SDカードやオンボードのSPI ROMにFPGAのコンフィギュレーションデータを入れておいて、ボタン1発で書き込んでくれるとか。SDRAMが乗っていればそういうこともできそうです。

夢はいっぱいありますが、まずは、Webサイトの情報充実と、RXduinoライブラリのリリースに注力することにします。

| | コメント (0)

2012.01.12

RaXinoの加速度センサを動かしてみる

RaXinoにはSPIバスに加速度センサとSPI ROMがつながっています。
今日はこのSPIバスの動作テストを行ってみました。

加速度センサは、こちら。
Raxinoaccelsensor

ST社のLIS331DLTRというものです。8bitの分解能で±2gを測ってくれます。
プログラムを書いて、USBケーブルで吊って、ぶらぶらさせます。

じつは、このUSBケーブルは電源と、USB仮想COMポートを兼ねているんです。


Raxinoaccelfurifuri

だから、USB経由で加速度データを取得できました。
Raxinoaccel

ちなみに、作ったプログラムはこのような感じです。

Arduinoのスケッチ風に、RXマイコンのプログラムがかけるようになりました。我ながらちょっと面白いと思ってきました。

このSPI操作に対応したライブラリとサンプルコードは明日アップロード予定です。お楽しみに。

Arduino互換のRXマイコン評価ボード『RaXino♪(ラクシーノ)』 はこちら

| | コメント (0)

2012.01.09

RX62N用のUSBブートモードプログラマをリリース!

RX62N用のUSBブートモードプログラマをリリースします!

こちらからダウンロードしていただくことができます。

このプログラムを使うと、RX62NのUSBブートモードと通信し、内蔵ROMにプログラムを書き込んだり、消去したり、ベリファイを行うことができます。実行ファイルは、rxprog.exeで、MS-DOSプロンプトから使用します。

使い方はとても簡単です。
 ①MD0をジャンパしてLレベルにする。
 ②RX62Nをリセット
 ③rxprog.exeを起動
 ④MD0のジャンパを外し、リセットで新しいプログラムが起動
です。
Usb62nprog_9

Usb62nprog_7_2

USBのデバイスドライバにはlibusbを使用しましたが、問題なく動いているようです。
Usb62nprog_8

Windowsでは、USBのデバイスドライバは、1つのデバイスに対し1個しか登録できないので、このデバイスドライバをインストールしてしまうとFDTからRX62Nに書き込みができなります。そうなったらアンインストールしていただく必要があります。その点はご了承ください。

では皆様、快適なRX62Nライフをご堪能ください!

| | コメント (0)

RX62NのUSBプログラマができた

RX62NのUSBプログラマができました。

DOSプロンプトで動くプログラムとして作りました。
何ができるかというと、
Usb62nprog_4
・書き込み
・ブランクチェック
・全消去(ユーザマット)
・ベリファイ
・RX62Nの書き込み情報を得ること
です。

MD0のジャンパをショートして、このプログラムを起動すると、RX62Nと通信して書き込み情報というのを取得します。これを表示させてみると、
Usb62nprog_5
このように、可能なクロック逓倍比の設定や、消去ブロックの構造などが得られます。FDTで設定する12.5MHz x8 x4とかいうパラメータと関係しています。

このツールでは、クロック源発振12MHz、システムクロック96MHz、周辺クロック48MHzに固定しています。

そして、書き込みは、
 rxprog -p ファイル名.mot
で一発でいけます。

つまり、
① MD0をLにする
② RX62Nをリセット
③ rxprog -p ファイル名.mot とコマンド入力
④ MD0をHにする
⑤ RX62Nをリセット
これだけで、RXマイコンが新しいプログラムに書き換わって動きます。
512Kバイトをフルに書き換えても、10秒もかかりません。
開発がとても楽になることでしょう。

DOSプロンプトで動くアプリなので、上キーを押せば前のコマンドが再実行できますから、GUIでマウス操作するよりもずっと楽です。コンソールアプリとして作っているので、LinuxやMACなどに移植するのも容易でしょう。

操作性敵には、書き換えのたびにMD0のジャンパを切り替えなければならないので、MITOUJTAGのICEより面倒ではありますが、しかしICEよりずっと高速です。ROMの書き込みが圧倒的に速いのでストレスが溜まりません。

便利なものができたので、いざ公開しよう!!と思ったのですが、本プログラムに使用している汎用USBドライバのライセンスを読んでみたところ、本目的での再配布はできなさそうだったので、ちょっとだけ公開を延期します。

◆追記
libusb-win32でも動きました。

Usb62nprog_7

libusb-win32のライセンスはLGPLなので、万事OK。

| | コメント (1)

2012.01.07

RX62NのUSBプログラマを作る

究極のRX62Nボードや、RaXinoのRXマイコンの内蔵ROMにプログラムをしていただくために「FDTを使用してください」と書いてきました。ただ、FDTは登録してダウンロードしなければなりませんし、高機能すぎて、使うのはちょっと大変です。

そこで、RX62N用に簡易なUSBプログラマを作ることにしました。

RX62Nは、MD0をLに落とした状態でリセットすると、USB ブートモードというのになります。この状態でプログラムを行うためのツールです。

USBブートモードでは、RX62Nは、Generic Boot Deviceとして認識されます。
デバイスドライバが要求されるので、柏野さんの汎用USBデバイスドライバ(UUSBD)を使うことにしました。
(以前、Interface誌の記事を参考にしてlibusbを使おうとしたけど、だめだった。柏野さんドライバなら動いた。)

VID=045B、PID=0025で、このRX62NのGeneric Boot Deviceに結び付けられます。
hWrite = Uusbd_OpenPipe(husb, 0, 0); // パイプ0?
hRead = Uusbd_OpenPipe(husb, 0, 1); // パイプ1?
とやると、書き込みパイプと読み出しパイプのハンドルが取れます。

RX62Nのハードウェアマニュアルの第37章を参考にプログラムを作ってみました。
Usb62nprog_1

まず、0x55というコマンドを送ると、0xE6というレスポンスが返ってきます。
ここからすべてがはじまります。

そして、ハードウェアマニュアルを参考にして、サポートデバイス問い合わせ等のコマンドを発行します。
Usb62nprog_2

最初に0x55を送ることと、チェックサムの読み出しにもう1つのReadFileを行ってやることを除いて、どうやら、RS232C版の書き込みシーケンスとUSB版の書き込みシーケンスは同じようです。

作ったプログラムを動作させてみました。
Usb62nprog_3

とりあえず各種の情報は取得できました。
それほど難しくはなさそうなので、1~2日で作れると思います。
書き込みができるようになったら無償公開する予定です。

どうやってRX62Nに書き込みをしようかとお悩みの方はご期待ください。
FDTを使うのは大変だという方や、MACで書き込みしたいという方はどうぞご期待ください。

| | コメント (3)

2012.01.03

あけましておめでとうございます

あけましておめでとうございます
今年もよろしくお願いします。

今年も、Spartan-6のリファレンスデザインの更新とSpartan-6ベースボードの開発、MITOUJTAG BASICのバージョンアップと、MITOUJTAG Proの新バージョンリリース、PCI Expressの更新、RXマイコンをいっそうの開発、SerialATA IPコアのリリースなどを予定しています。

今年はイチゴが食べ放題になるよう、LEDを使った植物の栽培なんかにも手を出していけたらいいなと思っています。

さて、正月用に作成したプリント基板年賀状ですが、多くの方には昨年12月30日に発送しました。
早い方は1月2日に届いたようです。

どんな基板かというと、こんなふうに仕上がりました。
Nengakiban2

基板裏面の恭賀新年の文字は、金フラッシュで出来ているので、本物のゴールドです。
龍の絵がパターンで作られていて、シルクで文章が入っています。なお、鉛フリーです。

表面はベタシルクになっています。
Nengakiban3
表面の下半分には任意の図柄が入れられますので、メッセージが入っています。この図柄は全部で4パターンあります。

郵便番号の枠は、ベタシルクを枠線の形に抜いているので、凹んだラインで描いています。
Nengakiban4

基板のパターンは無安定マルチバイブレータになっていて、龍の目と炎が光るようになっています。
Nengakiban5

100Ωや2SC1815など、どこにでもあるありふれた部品だけで作れるようになっていますので、届いた方は、ぜひとも組み立ててみてください。

部品を実装して組み立てると、こうなります。
Nengakiban6

3V~9Vくらいの電源をつなぐと、龍の目と炎が交互に点滅するでしょう。なお、抵抗やコンデンサの値はかなりアバウトでもOKです。

なひたふは、今年も奇抜な作品を作り続けてまいります。
2月11日ごろには建国記念の日を祝って、今年も基板チョコレートの発送を予定しています。

では、皆様今年も一年間よろしくお願いします。

| | コメント (6)

« 2011年12月 | トップページ | 2012年2月 »