« 2011年3月 | トップページ | 2011年5月 »

2011.04.30

RXでFDT(Flash Development Kit)を使うときにジャンパを切り替えたくない

RXでFDT(Flash Development Kit)を使ってROMに書き込むときと、通常動作時で、わざわざジャンパを切り替えたくないと思いました。

そこで、以下のような機能をつけてみました。

まず、特電RXボードのデバッグ用USBは、TeraTermなどからシリアルポートとして開けるコンソールを持っています。TeraTermでCOM##番へ接続してみると、RX Debug supportと表示されます。

① このコンソールからres と打つと、メインのRXマイコンにリセットがかかります。
FDTの画面ではデバイスがまだ検出されていません。
Fdt_none

② このコンソールからfdtと入力すると、RXマイコンのMD0端子を'0'に、MD1端子を'1'にして、リセットをかけ、USBブートが可能なモードにします。
すると、指を触れていなくてもFDTの画面でデバイスが検出されるようになります。
Fdt_detect

③ 再びノーマル動作モードに戻すためにresと入力すると、リセットがかかり、RXマイコンは通常起動します。

④ uartと打つと、78KマイコンはUSB-シリアルとして動作するようになり、同じコンソール画面の中で打った文字はRXマイコンのRXD1へ送られ、RXマイコンのTXD1は78Kを通じてコンソール画面に表示されるようになります。

Rx_78k_concole

⑤ 接続を閉じると、USB-シリアルモードは終了し、再びRX Debug supportに戻り、再びresfdtなどのコマンドを受け付けるようになっています。

いろいろ試行錯誤しながら作っていたのですが、ややこしくなってしまいました。使いやすいかどうかは、まだ未知数です。

これで、デバッグサポート用の78Kの機能は完成しました。少しずつ、少しずつ、機能を充実させていきます。


| | コメント (0)

2011.04.29

MITOUJTAG RX用特別版を作りました

MITOUJTAG BASICの、特電のRXマイコンで使えるボード限定版として、MITOUJTAG RX用特別版を作りました。

Rx62n_mitoujtag

パソコンとの接続には、オンボードのUSB-JTAG(78K0使用)や、Pocket JTAG Cable、XILINXやALTERAのパラレルJTAGケーブルが使えます。

オンボードのUSB-JTAGでは、毎秒80回くらいのスキャンが出来ます。SDRAMのポートなどが動いているかどうかを確認するには十分な使い心地です。
Rx62n_mitoujtag2

RXマイコンは、1つのI/O端子を非常に多数のペリフェラルが共用しています。設定をひとつ間違えると望みの機能になりません。本当に望みの機能に設定できたかどうかを確かめるには、バウンダリスキャンはとても便利です。

また、「#RES」と書かれたところをクリックすると、RXマイコンのリセットをON/OFF制御できます。ボードのハードウェアに手を触れなくても、パソコンの画面上の操作だけで、RXマイコンをリセットできます。

それから、シンプルなJTAG-ICEも、このオンボードのUSB-JTAGに対応させました。オンボードのUSB-JTAGでは、ダウンロード速度は毎秒1kByteほどです。大きなプログラムだと1分くらいかかるので、まだ改良の余地がありそうです。
Rx62n_jtag_ice

今回のRX62Nボードには、このMITOUJTAG特別版と、シンプルなJTAG-ICEを無償でお付けします。JTAG-ICEはまだまだこれからですが、MITOUJTAGのほうはご期待ください。

来月になったらMITOUJTAGとJTAG-ICEとの統合に着手します。MITOUJTAGの画面から、FPGAと同じような手順で、RX62Nに書き込みできるようにしたいと思います。

| | コメント (0)

RX62Nにファイルシステムを移植

TECH-Iの35号を参考に、FFSというファイルシステムと、MMCカードドライバをRX62Nに移植してみました。

SDやMMCカードを扱うには、毎回の送るコマンド列にCRCをいれなければならなかったりするので、自分でやろうとするとかなり面倒です。すぐに使えるサンプルが、過去に買ったTECH-Iにあっていてよかったです。

FFSというのはFATのファイルシステムで、TECH-Iの35号にはSH-4でMMCカード(SDカード)で使う方法が書かれています。この、mmc_io.cを、RSPI用に書き換えることで、簡単にRXマイコンでも動かすことができました。

手近なMicroSDを入れて、ディレクトリを表示させたところ・・
Rx62n_ffs

うっ、ロングファイル名に対応していない Σ(゚д゚;)

プログラムのサイズも大きくなってしまったので、RXマイコン内のRAM上で動かすにはちょっと実用的ではありませんが、SDカードの動作テストには十分でした。
Rx62n_sd

| | コメント (0)

RX62NのSDRAMパフォーマンス測定

CPUに内蔵のタイマカウンタを使って、関数の実行時間を測定できるようにしてみました。
6MHzのクロックでカウントアップさせているので、166nsの間隔で測定できます。
わかりやすいように、カウント値を6で割って、μ秒単位で測る事にしました。

このタイマカウンタで、SDRAMのメモリ操作に関する時間を計ったところ、
memset関数で16MBytesを埋めたときの時間は、0.44秒でした。
また、memcpy関数でSDRAMからSDRAM上へコピーしたときの時間は、約2倍かかっています。CPUのバスサイクルを考えると、この所要時間は至極妥当なものでした。

Rx62n_sdram_performance

何度やっても同じ数字がでるし、μ秒の単位まで全く同じ数字が出ることもありますので、正確に測れているのでしょう。
ためしに、リフレッシュの頻度や、CASレイテンシなどを変化させてみると、この時間が微妙に変化するので、可愛らしいです。

for文でSDRAMの16MB全域を書き換えても1秒以内なので、データ用メモリとして扱う分には、許容範囲といえるかと思います。

ところで、SDRAM上にプログラムをロードして実行してみると、実行速度はどうなるでしょうか? どんなコードを実行するかでも変わってきますが、答えをここに書くのは、差し控えます。SDRAM上での実行速度が気になる方は、メールでお問い合わせください。

このCPUが外部バスから命令をフェッチするときにどのように動作するのか、ということを突き詰めて考えていくと、興味深い結果なのだと思います。

| | コメント (0)

2011.04.27

作業服作りました

作業服買いました

じゃじゃーん
Sagyou1

なんと、「特殊電子回路㈱」の刺繍入りです。
Sagyou2

なんで、作業服を作ったかというと、じつはこれには深ーい訳があるのです。


8年前に脱サラして以来、普段から背広を着なくなったので、カジュアルシャツにジーパンとか、セーターとか、そんな格好で毎日過ごしています。すると近所の視線が痛いのです。ていうか、視線にすら気がつかなかったかもしれない。

「内藤さんいつも平服で、昼間っからいるけど、働いていないのかしら・・」

近所の奥様方やコンビニの従業員さんにそう思われていたかもしれません。
かといって、必要もないのに背広をいつも着ると堅苦しい。


ところで最近、私は自宅を、津田沼という町から、墨田区に引っ越しました。この墨田区の街は、町工場がいっぱいなのです。自宅の近所は鉄工所や金属加工、紙器、問屋、米屋などがいっぱい、まさに商工業の夢の街なのです。だから作業服を着ていれば全然浮かないのです。

この服なら、違和感なく地域に溶け込めます。
近所の人たちにも「この近くにお勤めなのね、職場が近くていいわね」程度に思われることでしょう。

逆に、津田沼で作業服を着ていたら浮いていたかもしれません。
墨田に引っ越してきてよかった

| | コメント (0)

2011.04.25

RX62NでWebサーバを作って公開してみた

RX62NでWebサーバが動くことが確かめられたので、ダイナミックDNSと組み合わせて全世界に公開することにしました。

ぜひ、↓のページへアクセスしてみてください。

http://rx62n.mydns.jp/

トップページのJPEG画像が崩れてしまう理由は分からないのですが、そこそこの速度でサクサク動いています。(HEWの設定を変えて、速度で最適化するようにしたら、めちゃくちゃ速くなったのです)
Rx62n_web_2

上のページは、ルネサスRXマイコンで動いています。おそらく、現在、世界で唯一のインターネットからアクセスできるRXマイコンWebサーバだと思います。このサーバにはアクセス制限も、鍵もパスワードもありませんので、ご自由にお入りください。そしていろいろいじってみてください。

ところで、いま、RX62Nマイコンは地震の影響で入手が大変難しくなっています。
ネットワーク機能の無いRX621ならなんとか入手はできるでしょうが、RX62N、しかもBGA176ピンとなると超入手困難デバイスになってしまったのです。今後、何個入手できるか全くわかりません。そこで、皆様に少しでもRXマイコンの雰囲気を味わっていただきたいと思い、このWebサーバにメモリダンプの機能を搭載しました。

メモリダンプのページへ移動し、お好きなアドレスを入力すると、もれなく256バイト分のメモリダンプを出力します。
Rx62n_dump

RX62Nマイコンには4Gバイトの広大なアドレス空間がありますが、このWebサーバはどこでも自由に見れます。お手元にRXマイコンがなくても、雰囲気は味わえます。

あんなレジスタやこんなレジスタ、そしてメモリの中身をとことんまでご鑑賞下さい。データシートには載っていない何かが見つかるかもしれません。

http://rx62n.mydns.jp/


| | コメント (4)

2011.04.24

RX62Nにおけるイーサネットコントローラの使い方(2)

では、核心部分であるボードごとのイーサネットコントローラのカスタマイズを行います。
RX62Nはイーサネットコントローラを内蔵していますが、実際にLANにつなぐには、PHYのチップが必要です。PHYのチップとRX62NはMIIまたはRMIIという規格の信号で接続します。
特電RX62Nボードでは、RMIIのLAN8720AIというチップを使っています。

RX62NとPHYのチップとの間は、MIIならば4bit(25MHz)、RMIIならば2bit(50MHz)で接続されています。またデータ系の信号とは別にMDC、MDIOという2本線のシリアルインタフェース(SMII:Serial Management Interface)でPHYチップ内のレジスタをコントロールするようになっています。

修正する対象ファイルは下記の3つです。r_either.cは変更不要です。
・phy.c
・r_either.h

順番に見ていきます。
① phy.h
このファイルは、PHYチップごとのレジスタ設定などが書かれています。変更が必要な箇所はMDC、MDIOの操作方法です。
まず、
#define PHY_ADDR 0x1F
という記述があるので、これを
#define PHY_ADDR 0x00
に変更します。これはLAN8720AIに定義されたSMIのアドレスです。PHYチップごとに異なります。
そのほかにもphy.hには、SMIのレジスタ定義や、WAITの設定などが書かれているので必要に応じて書き換えます。

なお、MDC_WAITをとても大きくすると、RX62NとPHYチップ間の信号がバウンダリスキャンで見えるくらいゆっくりになります。SMIから信号が帰ってくると緑の部分が変化するのでわかります。
Rx62n_mdio

② r_ether.h
このファイルの中にある
#define ETH_MODE_SEL ETH_MII_MODE

#define ETH_MODE_SEL ETH_RMII_MODE
に書き換えます。
これで、RX62NがMIIではなくRMIIを使用するようになります。

コードを解析してmりうと、このdefine文が影響しているのは、ECMR.BIT.RTM と IOPORT.PFENET の2つのレジスタだけなので、MIIとRMIIの切り替えは上記の2つのレジスタだけで行えるのだと思います。

そうして、コンパイルすると、見事にRXマイコンでイーサネットが動きました。
このプログラムはまずPHYを初期化して、DHCPでアドレスをとってきて、それからRX62N内にhttpd(Webサーバ)を立ち上げます。Webサーバのファイルはコンパイル時に一緒にコンパイルされているのでROM上に書かれています。

特電RX62NボードではUARTを持っているので、LCDに表示される内容とデバッグ用のメッセージをUARTにリダイレクトします。すると、
Rx62n_web_uart

どうやらDHCPで192.168.1.13というアドレスを得たようです。そして、ブラウザにこのアドレスを入れてみると・・
あっ!

Rx62n_web_1

何か見えるではないですか!

hwsetup.cとrskrx62n.hを書き換えたため、次の画面からブラウザ経由でLEDをコントロールできます。
Rx62n_web_2

なんとも気の遠くなるようなLEDチカチカです。

他にも、ネットワークの統計が見えるページがあったり、この手のひらサイズのマイコンボード内によくいろいろ入っているなと思わせます。
Rx62n_web_3

というわけで、ルネサスのWebサイトに用意されていたサンプルプログラムが非常によく出来ていて、ちょこっと書き換えるだけで他のボードに容易に移植できました。次は中身のWebページを自分で書き換えてみたいと思います。

なお、特電RX62Nボードは、現在、量産を開始しました。
製品紹介ページはこちらにご用意いたしました。
今週中には実装が上がってくる予定なので、連休前には皆様のお手元にお届けできると思います。

| | コメント (0)

RX62Nにおけるイーサネットコントローラの使い方(1)

ルネサスRX62Nにはイーサネットコントローラが内蔵されています。

この使い方がわかってきたので、備忘録に書いておきます。
検証に使うのは特電RX62N評価ボード。
基板上にイーサネットのパルストランス内蔵コネクタが乗っています。
Rx62n_lan_ok

イーサネットのサンプルプログラムは、ルネサスのWebサイトのRXマイコンのコーナーにある「アプリケーションノート サンプルコード」にあります。この中からEthernetで絞り込むと、「RX62Nグループ UIP TCP/IPプロトコルスタックデモンストレーション アプリケーションノート DEC.27.10 Rev.1.00 R01AN0169JU0100 source」というのが見つかりますので、ダウンロードします。
Renesas_web1

2段なって出てくるので、下の段の、sourceをクリックしてダウンロードします。
an_r01an0169ju_rx62n_ether.zipというファイルがダウンロードされるので、解凍します。
解凍したプロジェクトフォルダをC:\WorkSpaceに移動し、RX_uIP.hwsというプロジェクトファイルをHEWで開きます。
Hew_ethersample

ぱっと見て非常にたくさんのファイルがあり、どこからどう手をつけていいか分かりません。
src\bsp、src\driver、src\uip、src\user-appという4つのフォルダにソースコードが入っています。src\bspはボード特有の処理、src\driverはPHYチップを叩くための低レベルな階層、src\uipはオープンソースのTCP/IPプロトコルスタック、src\user-appはユーザアプリケーション(CGIからLEDをコントロールするためのプログラム)です。

何はともあれ、コンパイルしてみましょう。すると・・・
Hew_limit

なんと、HEWの評価版の128kB制限にひっかかってしまうではないですか!?
そんなに巨大なコードなのかと思いきや、どうやら、コード中に埋め込まれているWebページのデータが大きかったようです。具体的にいうと、an_r01an0169ju_rx62n_ether\workspace\src\uip\apps\webserver\httpd-fsdata.cというファイルの中にあるdata_RX62N_jpg[]という配列です。これを
static const unsigned char data_RX62N_jpg[] = {
  /* /RX62N.jpg */
  0x2f, 0x52, 0x58, 0x36, 0x32, 0x4e, 0x2e, 0x6a, 0x70, 0x67, 0,
/*
  0xff, 0xd8, 0xff, 0xe0, 00, 0x10, 0x4a, 0x46, 0x49, 0x46,
・・・
・・・(中略)
・・・
  0xf2, 0x9c, 0xd6, 0x9c, 0x27, 0x8c, 0xcb, 0x69, 0x54, 0x73,
#endif
  0x4a, 0x57, 0x71, 0x8b, 0x97, 0xfe, 0x5, 0xcb, 0x7f, 0xc8,
  0xff, 0xd9, 0};

として短くします。すると、コンパイルが通るようになります。

このサンプルコードはルネサスのスタータキット用に作られているので、ボードにあわせて修正すべきなのは、以下の7つのファイルです。

① src\bsp\hwsetup.c
汎用I/Oポートの設定が書かれています。LEDやスイッチとして使われるポートです。動作の核心となる部分ではありません。修正しなくても動きますが、変な端子から信号が出ないよう、ボードにあわせて変更したほうがいいでしょう。
Modify_1

② src\bsp\rskrx62n.h
前述のI/Oポートに関して書かれている部分を書き換えます。LEDはCGIの中から操作されたり、タイマで点滅させるためにあるようです。スイッチは使われていないようです。
Modify_2

③ src\bsp\lcd.c
ルネサススタータキット用のLCDに表示するためのプログラムですが、必要なければ中の関数をごっそり削除します。また、void DisplayString(unsigned char position, _far char * string)という関数が呼び出されたときに自分の関数を呼ぶようにすれば、LCDに表示されるメッセージをシリアルコンソールに出したりすることもできます。
Modify_3_2

あとは、src\bsp\intprgを書き換えて割り込みを使えるようにしたり、src\bsp\resetprg.cを書き換えてUARTの初期化をしたり、src\bsp\stacksct.hを書き換えてスタックサイズを増やしたりということを、お好みで行います。

次の記事では、核心部分であるイーサネットコントローラのコードの書き換えを行います。

| | コメント (1)

2011.04.23

RX62NでSDRAMにアクセスする方法

RX62NのSDRAMコントローラの設定方法は謎が多く、サンプルプログラムもなく、ペリフェラルジェネレータで生成したコードも意味不明なのでかなりてこずったのですが、レジスタの設定をちょこちょこ変えながら、オシロやバウンダリスキャンで波形を観察していくことで、完璧にアクセスできるようになりました。

前回、DQM2とDQM3が正しく動いていないと書きましたが、それはあるレジスタの設定に間違いがあったためです。「設定禁止」の値になっていたのです。正しく設定するとDQM2、DQM3はちゃんと動きました。

しかし、SDRAMが動くようになったものの、2つのバグに悩まされました。
1つめのバグは、SDRAMを初期化した後に2秒ほどアクセスできない現象が起きていたことです。初期化直後にいはメモリエラーが頻発し、なぜか2秒くらいすると、エラーが全くなくなるのです。

その原因はアドレス線の一部(BA0/1)が出力されていなかったことにありました。BA0とBA1が入力設定になっていたため、電気的に浮いてしまっていて、それが自然に充電されるまでに2秒くらいかかっていたのでしょう。
これも、バウンダリスキャンでBA0とBA1が入力になっていることを見て発見できました。

Rx62n_ba

PF4BUSレジスタを正しく設定することで、BA0とBA1が出力されるようになりました。

Rx62n_ba1

これでメモリの全域に正しくアクセスできます。

次のバグは、SDRAMのオートリフレッシュを有効にすると、データの読み書きでエラーが生じることです。原因はSDRFCRレジスタのREFW[3:0]の設定でした。REFW[3:0]が0000(デフォルト)だと、オートリフレッシュコマンドを発行した直後に次のバンクアクティブを発行可能になってしまいます。そのため、エラーが生じます。
このレジスタは1回のオートリフレッシュを何クロックかけて実行するかを示すためにあります。SDRAMのアクセス速度は60~70nsなので、4サイクルに設定します。

これでSDRAMに正しく、エラーなく、全域にアクセスできるようになります。
memset関数で16Mバイト全域をフィルすると、1秒くらいでした。

SDRAMコントローラの完全な初期化コードは下記のURLに置いておきます。
http://www.tokudenkairo.co.jp/hiroba/?m=pc&a=page_fh_diary&target_c_diary_id=130&comment_count=0

この情報が、皆様のご参考になれば幸いです。

| | コメント (1)

2011.04.20

RX62NのシリアルモニタとSDRAM

RX62N用にシンプルなモニタをつくり、シリアルのコンソールから、ROM上にHEXファイルをロードして、実行できるようにしました。そのほか、メモリダンプや、1~4バイトのメモリ書き込み、メモリフィルなどの機能もつけました。

Rx62n_monitor

JTAG ICEを使わなくてもプログラムのロードができるようになったので、JTAGはバウンダリスキャン専用に使えます。

そもそも、RX62NのSDRAMのデバッグをしたかったのですが、どうもうまく動いていません。
SDRAMの初期化ルーチンはこんな感じです。

void HardwareSetup(void)
{
 SYSTEM.SCKCR.LONG = 0x00010100; // ICLK=96MHz,BCLK=48MHz,PCLK=48MHz SDCLK出力,BCLK出力
 SYSTEM.SYSCR0.WORD = 0x5A03; // 外部バス有効

 IOPORT.PF6BUS.BYTE = 0xD0; // SDCLK出力,SDRAM有効
 IOPORT.PF4BUS.BYTE = 0x3F; // A15,14出力無効、A13-0出力有効
 IOPORT.PF5BUS.BYTE = 0x30; // P56,57はI/Oポート、P51はI/Oポート、D31~D8有効
// PC[7:0]を外部アドレスA23~A16として使う
 BSC.SDCCR.BYTE = 0; // SDRAM無効
 BSC.SDSELF.BIT.SFEN = 0; // セルフリフレッシュ無効
 BSC.SDRFEN.BIT.RFEN = 0; // オートリフレッシュ無効

 BSC.SDIR.WORD = 0x00FF; // 初期化オートリフレッシュ間隔3サイクル、
 BSC.SDICR.BIT.INIRQ = 1; // INIRQビットを1にして初期化開始
 while(BSC.SDSR.BIT.INIST) {}

 BSC.SDCCR.BYTE = 0x30; // バス幅を32bitに設定 SDRAM動作はまだ許可しない
 BSC.SDMOD.WORD = 0x0880; // モードレジスタ設定 CASレイテンシ2
 while(BSC.SDSR.BYTE != 0) {}
 BSC.SDTR.LONG = 0x00000003; // ライトリカバリ1 CASレイテンシ2
 BSC.SDADR.BYTE = 0; // 8ビットシフト MXC=00

 BSC.SDRFCR.WORD = 0xfff; // 4096サイクルごとに1サイクル ?
 BSC.SDRFEN.BIT.RFEN = 0; // オートリフレッシュ有効

 BSC.SDAMOD.BIT.BE = 1; // SDRAM 連続アクセス不許可
 BSC.SDSELF.BIT.SFEN = 0; // セルフリフレッシュ無効
//BSC.SDCMOD.BYTE = 0; // 動作モードのエンディアンと同じ

 BSC.SDCCR.BYTE = 0x31; // SDRAM動作許可
}


こうやって初期化した後に、こんなプログラムを実行すると、
while(1)
{
 p = (unsigned char *)0x08000000;
 or(i=0;i<1024;i++) *p++ = i;
}

バウンダリスキャンで見る限り、SDRAMのROWアドレスは出力されているのですが、同一ページ内のアクセスの際にカラムアドレスが出力されていないことがわかります。
また、SDRAMの接続を32bit幅に設定しているのに、DQM2とDQM3が正しく動いていないようにも見えます。

Rx62n_sdaddr

それから、シリアルモニタでSDRAMの領域をダンプしてみると、連続する0x400バイトで同じ値になってしまっています。やはり、カラムアドレスが動いていないのでしょう。
Rx62n_400

SDRAM関係のモードレジスタの設定が間違っているのでしょうけど、まだ解決できていません。

それにしても、組み込みの初期デバッグに、バウンダリスキャンは便利です。MITOUJTAGでバウンダリスキャンをしなければ、このバグに気付くのに軽く数日を要したと思います。

Rx62n_bscan
↑バウンダリスキャン可視化

| | コメント (0)

2011.04.18

RX62Nのシリアルモニタを作る

今日は、究極のRX62Nボード用にシリアルモニタを作っています。

RX62Nにはいろいろな内蔵ペリフェラルがあり、また、究極のRX62NボードにはメモリカードやSPI ROM、SDRAMなどいろんなコンポーネントが乗っています。これらの操作やテストを効率よく行うためには、やはり、コンソールからコマンドを叩けたほうがいいだろうと思ったからです。

究極のRX62Nボードには、2つのシリアルポートがあります。SCI1は78KマイコンのUSB-UARTにつながっています。SCI0はオンボードのRS232Cレベルドライバを通じてコネクタに出ています。

このSCI0にRS232Cの線をつなぎ、プログラムを書いて受信してみます。
しかし、一向に受信できない。SCIの使い方が間違っているのかと思ってRxD0(P21)をI/Oポートとして読み込んでみても、何も変化してない。ところがバウンダリスキャンでは何か信号が入ってくるのが見えているので、ピンに信号は来ている・・

どうやら、
 PORT2.ICR.BYTE |= 0x02;
という設定が必要だったようです。
RX62Nでは、これをやらないとポートからデータを読めないようです。これで1日以上無駄にしました。

そして、おもむろにSCI1にRS232Cをつなぎ、デバッグ用にJTAGをつなぎます。
Rx62n_jtaganduart

組み込み開発の初期では、プログラムを頻繁に書き換えるので、アプリケーションはRAM上に配置します。そうすれば書き換え時間は短くなり、内蔵フラッシュROMの劣化も防げます。
HEWで作成したRX62NのアプリケーションをRAM上に配置するには、HEWの設定で次のようにします。
Rx62n_ramapp

作ったプログラムは拙作のJTAG-ICEでダウンロードします。だいたい1秒くらいです。
実行すると、ちゃんと動きました。

Rx62n_monitor

こんな感じでコマンドの入力や実行ができるようになりました。
次はSDRAMを使えるようにしてみます。

| | コメント (0)

2011.04.15

究極のRX62N基板の動作テスト

昨日と今日で究極のRX62N基板の動作テストを行っています。

私はずっとRX62Nのデバッグ環境を作るための78Kマイコンのプログラムを行っていました。その結果、ボード上の78KマイコンにUSB-JTAGの機能を持たせることができ、MITOUJTAGやみえたジェイから使うことができるようにしました。

バウンダリスキャンすると、このとおり、BGAの端子の状態が見えました。
Rx62n_usbjtag_3

ところで、実は私はまだRX62Nのプログラムを書いていません。
けれど、MITOUJTAGを使えば、LEDチカチカの動作テストくらいならば、RX62Nのプログラムを1行も書かずにできてしまいます。

実際のようすは、次のビデオをご覧下さい。

このボードではM6、P7、P9、P10番ピンにLEDが接続されています。それをJTAGバウンダリスキャンのEXTESTモードを使って、操作しています。また、P13番ピンにはLANのPHYチップから50MHzのクロックが供給されてきています。その入力されるクロックのようすが、P13番ピンのチカチカとして見えています。

それから、うちのバイト君がSDカードからデータを読み込んでオーディオを鳴らすという回路とソフトウェアを作ってくれました。
Rx62n_audio

FatFSを動かしてSDカードに格納されたデータを読み出し、独自のアルゴリズムで圧縮されたオーディオデータをCPUで展開して、RX62Nに内蔵のDACで出力するそうです。某付録基板より電源がしっかしていいて音がいいそうです。

これを動作させて、同じくバウンダリスキャンで覗いてみました。

新しく基板を作った場合、本当に配線に間違いがなかったかを確認できるまでは不安で不安でしようがないのですが、バウンダリスキャンを使って、CPUのI/O端子が直接うごかせると、その不安がちょっとだけ和らぎます。

バウンダリスキャンを行うには、必ずしもCPUが動いている必要はありません。エンディアンが間違っていたり、モードピンの設定が間違っていても、場合によってはクロックが供給されていなくても、使えてしまうのです。ソフトウェアを走らせることなく、I/O端子だけが動かせるのです。そこが、JTAG-ICEと呼ばれているものとの大きな違いです。

次回は78KマイコンにUSB-UARTの機能を入れて、コンソールを作ったり、SDRAMを動かしたいと思います。

| | コメント (0)

2011.04.13

究極のRX62Nボードが実装完了

本日、究極のRX62Nボードの試作品3台の、実装が上がってきました。

手のひらサイズで、こんなにコンパクトに仕上がりました。
Ultimate_rx62n_1

基板の表面と裏面はこんな感じです。
Ultimate_rx62n_2Ultimate_rx62n_3

とりあえず電源を入れてみて問題のないことを確認し、USBブートができることを確認しました。
特電には昨日から新人がきてくれて、もうFatFSの移植などを行ってくれています。
何か面白いアプリが動くのではないかと楽しみにしています。

とりあえず、JTAGのコネクタにJTAGケーブルを外付けしたら、特殊電子回路製のRX用JTAG ICEが使えました。
Rx62n_jice


私はこれからオンボードのUSB-JTAGの開発を始めます。

| | コメント (0)

SATAの実験(3) ALIGNまで

COMINITとCOMWAKEがうまく出せるようになりました。COMINITを送って、COMRESETを受け取って、COMWAKEを送って受けて、というシーケンスを実行します。

マザーボードにつないで、FPGAをリセットすると・・・
Sata_init_1

おおっ、ちゃんと動いている。そして、ALIGN Primitiveまで見えている!

Sata_init_2

K28.5 D10.2 D10.2 D27.3という並びが見えたときには、ちょっと感動しました。

| | コメント (0)

2011.04.12

SATAの実験(2)

Spartan-6LXTのGTPが持つSATAの機能がわかってきました。

一言でいうと、すごい!

さずがXILINX。
SATAのOOB(Out Of Band)通信をトランシーバ内でサポートしているのです。

簡単に言うと、
・TILE0_TXCOMTYPE0_INという信号を'0'にして、TILE0_TXCOMSTART0_INを1クロックだけ'1'にすると、COMRESET/COMINITが送られる。
・TILE0_TXCOMTYPE0_INという信号を'1'にして、TILE0_TXCOMSTART0_INを1クロックだけ'1'にすると、COMWAKEが送られる。
・COMINITとCOMWAKEのバースト送信回数は、CoreGenで設定する。
・相手からCOMRESET/INITを受け取ると、RXSTATUS(2)が'1'になる
・相手からCOMWAKEを受け取ると、RXSTATUS(1)が'1'になる
・自分がCOMRESET/COMINIT/COMWAKEを送信し終わると、RXSTATUS(0)が'1'になる

というわけです。

電気的IDLEを送信したり検出したり、といった手間が一切不要です。
タイマーとかカウンタも一切不要なのです。
バーストが送られてきた時間や回数を計るのは全部GTP任せにしていいのです。

ちなみに、EXPARTAN-6Tで、2つのSATAコネクタを接続してループバックさせて、COMRESETやCOMWAKEを送受信してみました。

まず、COMRESETを送って、別のポートで受け取ったもの。
Rxcomreset
RXSTATUS(2)が立っているのがわかります。

次に、COMWAKEを送って、受け取ったもの。
Rxcomwake
RXSTATUS(1)が立っているのがわかります。

物理層の初期化までは簡単に作れそうです。
明日にはリンクアップさせてホストから何らかの信号を受信してみたいと思います。

| | コメント (0)

2011.04.11

SATAの実験(1)

最近、特殊電子回路のSpartan-6 PCI Express評価ボード「EXPARTAN-6T」で、SATAのドライブをつなぎたいというご要望をよくいただきます。

SATAを動かすにはIPコアが必要なのですが、そう簡単には入手できません。
ないなら自分で作ることができないだろうかと考え、思案中です。

まず、SATA用のギガビットトランシーバを動かしてみることにします。
簡単なGTPデザインをFPGAに入れ、EXPARTAN-6TのSATA1コネクタを手近なパソコンのSATAドライブ用のコネクタに接続し、電源をいれます。

すると、
Sata_comreset

おおっ! 電気的IDLEが6回下がっているのが観測されました。

これはCOMRESETというSATAのプロトコルで、(K28.5 D10.2 D10.2 D27.3)×4、を6回繰り返しているのです。
1回の送信で16シンボルという短い時間しか送ってこないので、PLLがロックしないので、どんな内容なのかは見ることができません。信号があるか/ないか、しかわからないのですが、それを利用してOOB(Out Of Band)というシーケンスを構築しています。
この信号が「あり」の時間と「なし」の時間を大雑把に測って、相手の有無とリセットを認識します。

拡大してみると、D10.2とか、K28,5とか、断片的に見えます。
Sata_comreset2

FPGAからPCに同じ信号を返してあげれば、初期化シーケンスは次のステップに進めるはずです。
ちょっと実験してみたくなりました。

| | コメント (0)

MITOUJTAGの最新版パッチをリリース

MITOUJTAGの最新版パッチをリリースしました。
下記のURLからダウンロードできます。
http://www.tokudenkairo.co.jp/jtag/sp.html

このパッチは、MITOUJTAG Pro、BASIC、Lightの各エディションに共通で使用できます。
主な改善点は、
 ①Pocket JTAG CableのWindows7 64bit版対応
 ②特電Spartan-6ボードと、Spartan-6ボードで作るUSB-JTAGへの対応
 ③Pocket JTAG CableとSpartan-6ボードの同時使用への対応
 ④パラレルケーブルの検出における不具合修正と、ポートアドレスの指定対応
です。

只今、MITOUJTAGを鋭意改良中です。今後のパッチは、新機能が出来次第、上のURLからダウンロードできるように更新していきます。

最新の機能は解凍したフォルダの中にあるsmartupdate.exeというのを実行することで、使用できるようになります。smartupdate.exeは、更新されたファイルをMITOUJTAGのディレクトリにコピーしていくだけの、単純なインストーラです。
Mjupdate



ここでは、今回の更新の目玉である64bit版ドライバについて説明します。
64bit版のドライバを使用するには、まずOSの起動時にF8を押して、ドライバの強制署名を無効にします。
それから、上のURLからダウンロードしたパッチを展開した中にある\pkdrvjinstというフォルダを開き、"インストール64bit.bat"を管理者権限で実行します。
Pkjdrv64_1

実行すると、各種のファイルがシステムフォルダにコピーされていきます。
(このしくみを作るのが大変だった!)
Pkjdrv64_2

その後、Pocket JTAG CableをUSBで接続したり、デバイスドライバの更新を行うと、「ドライバーソフトウェアの更新」というダイアログが表示されますので、自動検索を行います。
(自動検索でうまくいくようにするのが苦労した!)
Pkjdrv64_3

で、お約束の発行元が検証できない旨のダイアログが開きます。当然「インストールします」を選択します。
Pkjdrv64_4

あとは、ドライバの自動的にインストールが実行され、使用可能になります。
Pkjdrv64_5Pkjdrv64_6

うまくいかない場合、例えば、OS起動時に署名の無効を指定していないと「デジタル署名を正しく検証できません」と表示され、Pocket JTAG Cable(loader)で止まってしまいます。
Auth

こうなってしまった場合は、OSを再起動して、忘れずにF8を押してください。

うまくいくと、デバイスマネージャにPocket JTAG Cableが表示され、
Auth_ok
MITOUJTAGで使用できるようになります。
Mjl_x64

もうこれで、Windows7でも恐れることはありません。64bit環境でも、JTAGを使った快適なFPGA開発環境をご堪能ください。

| | コメント (2)

2011.04.10

64bit版ドライバのインストーラを作ってみたけど

Pocket JTAG Cableの64bit版ドライバ用のインストーラを作っていたのですが、Windows 7 x64環境でハマりました。

なにがやりたいかというと、ユーザがデバイスドライバのインストールを行う際に、フォルダの位置を指定するダイアログを出さずに自動でインストールできるようにすること

特に、USBのドライバでは、USBのポートを差し替えるたびに、ドライバのINFとSYSのファイルを要求するダイアログが開いたりするので、かねてからこの動作をなんとかしたいと思っていました。

つまり↓こういうダイアログを出したくない
Dialog

初回のインストール時には「自動」でできて、USBポートを差し替えたときにも下記のような場所指定ダイアログを出ないようにしたいわけです。

このようなことをするためには、目的のドライバのsysファイルをあらかじめWindows\system32\driversフォルダにコピーしておくという作業が必要になります。
※また、INFファイルに工夫が必要です。INFファイルの詳しい書き方はJTAGひろば内の日記に書きました。

インストーラ中でのファイルのコピーがうまくいかなかったので、こんなツールを作ってみたけど、
Pockjinstall
それでもだめでした。

プログラムから見れば、ちゃんとコピーできているはずなのに、エクスプローラで見るとC:\Windows\system32\driversフォルダには目的のファイルがありません。

マイコンピュータ中を探したら、なんとC:\Windows\SysWOW64 配下にありました。

なるほど、WOW64という仕掛けがあるらしいです。
32bitアプリがC:\Windows\system32配下のディレクトリにアクセスしようとすると、C:\Windows\SysWOW64にリダイレクトされてしまうようです。巧妙なしくみですね。このため、C:\Windows\system32\driversフォルダに目的のファイルをコピーすることができなかったようです。

原因がわかってしまえば、あとは簡単なはず。
あと少しで64bit版のPocket JTAG Cableドライバが配布できるようになると思います。

| | コメント (0)

2011.04.08

究極のRX62Nボードの基板が製造完了

本日、「究極のRX62Nボード」の基板が製造完了しました。

3面付けで作っています。
Paneled

表面と裏面はこんな感じ。
TopBottom

BGAのパッドも綺麗に出来ています。
Bgapad

この基板を運送会社に発送してもらって、基板屋さん→特電→実装屋さんとやると2日間ロスしてしまいます。今は一日でも早く欲しいので、都内某所にある倉庫に引き取りに行き、その足で南武線に乗って某基板屋さんまで手持ちで納めに行きました。電車の乗り換え回数8回。
なんだか一日中、ずっと電車に乗っていました。

実装の仕上がりは13日(水)の予定です。
待ち遠しいです。

| | コメント (0)

2011.04.07

Spartan-6サンプルデザインをVerilog化

全国1000万人のVerilogユーザの皆様、たいへんお待たせしました。
特電Spartan-6ボードのサンプルデザインをVerilog化しました。

いままでVHDLで書いていたものをVerilogに書きなおす作業をしたわけですが、NGCで書かれたVHDLの下位モジュールをどうやってVerilogで書いた上位モジュールにつなぐかという点でハマりました。

XILINXのデザインでは、普通、IPコアをネットリストで提供するときにはNGCで提供します。VHDLのデザインの場合は、上位のモジュールに
component xxx is port (
 ・・・
);
end component;
と書いておけば、コンパイラは下位のモジュールの入出力ポートの仕様を知ることができるので、下位モジュールがネットリストで提供されていても、うまくつなげることができました。

しかし、Verilogではそういう下位モジュールを定義する記述がなく、いきなり
 ddr2main inst_ddr2main(
  .reset_ip(1'b0),
  .clk_ip(dramclk),
  .clkn_ip(dramclkn),
  .ddr2_ras_op(DDR2_RAS),
 ・・・
のようにインスタンシエートするわけです。
プロジェクトに下位モジュールがVerilogのファイルとして登録されていればいいのですが、下位モジュールがNGCだったりVHDLだとすると、上位モジュールからは下位モジュールの仕様を知ることができないので、論理合成ツールが「そんなモジュールのポート知らないよ」とエラーを返すわけです。
そのため、簡単にはつながりませんでした。

これを解決するためのやりかたは、
① 入出力ポートのみを記述したmodule文を作り、別のファイルにして保存する。
② そのファイルをプロジェクトに追加する。

とやります。

つまり、下記のような記述をします。C言語でいえばヘッダファイルのようなものを作ります。
module submodule ( signal_A_ip, bus_B_ip, signal_C_op);
 input signal_A_ip;
 input [15:0] bus_B_ip;
 output signal_C_op;
end module;

これを、プロジェクトに何らかの形で追加すればよいのです。
Verilogproject

ezusbfx2_ctrlモジュールのVerilogの定義はこちらです。
「ezusbfx2_ctrl.v」をダウンロード

module文だけで中身がないファイルですが、これを追加しておけば、NGCは自動的に読み込まれます。
(注意しなければならないのは、入出力信号にバスを使う場合は、その幅を正しく合わせておかないとSynthesizeは通っても、Place and Routeでエラーとなることです。こうなると発見が難しい)

そのほか、Verilog化していていくつかハマった点があります。
① reg と witeの使い分け
 下位モジュールの出力を取り出す用途で使う場合は、regでもwireでもいけてしまう場合がある。

② <= と =の使い分け
・alwaysの中では <= を使う (=を使うとVHDLでのVariableと一緒でバグの温床になる)
 ・alwaysの外では assign ○○○ = △△△ ; とやる。

VerilogとVHDLを比べて見ると、信号の宣言がどこにでもおけて気軽だったり、(others => を書かなくてもよいので楽だったりするのですが、厳密でないのが気になって仕方がないので、やはり私はVHDLのほうが好きです。

Verilogデザインは、Spartan-6評価ボードのサンプルデザインの中に入れておきました。
http://www.tokudenkairo.co.jp/sp6/download.html

これからいろんなサンプルデザインをVerilogでも提供していきたいと思います。

| | コメント (0)

2011.04.06

GM計数管

秋葉原の某所でGM計数管が売られていたので、早速購入して、試してみました。
どうやら、型番はSI-3BG(CI-3BG)というもので、ウクライナ製です。

380~460Vをかけて使うようです。

高圧発生回路は、秋月の冷陰極管用インバータを使いました。

冷陰極管用インバータは交流出力で、出力にコンデンサが直列に入っているので、ダイオード2本とコンデンサ1個を外付けすれば、2倍の電圧が取り出せます。
入力電圧が2.13Vくらいのときに、出力が450Vくらいになりました。

その450Vを22MΩの抵抗に通して、GM管のアノードにつなぎ、コンデンサと抵抗で出力を取り出し、オシロで観察してみます。
Gmtube

常時何もおきません。
本当に、ごくたまに「何か」を検出します。1分間に1回もないくらい。
でも、たまにぶわーっと検出します。よくわからない。

Gmpulse

電圧を上げていくと、ものすごい勢いでカウントされるのですが、これは連続放電が始まっているので、きっと検出器としては動作していない。電圧を450Vくらいまで下げると、ほとんどカウントしない。

このSI-3BGはオークションなどでも良く出ているようで、感度が、
・Sensivity to Gamma Radiation: 188 - 235 Pulses/S/R/h
と書かれています。いったいどうやって解釈すればよいのか。hは時間、Rはレントゲンだとして、Sは何だろう。

全然検出しないのが悩みなのですが、考えられる原因としては、
・本当に感度が低い
・私の自宅の部屋が適度に遮蔽されていているから
・端子に半田付けしたから壊してしまった
・過電圧で壊してしまった
そのくらいでしょうか。

良く見ると、このガラス管の中に直径1mm×長さ5mmくらいの小さなガラス管があって、それがGM管の本体だと思われます。だとすると、検出器としてはかなり小さいように思われます。

今度、屋外で試してみます。

それより、冷陰極管用インバータの出力を増倍していって3kVくらいまで上げて、コーヒーの空き缶か何かでガスチェンバーを作ったほうが面白いかもしれません。

| | コメント (1)

2011.04.05

『MITOUJTAG Light』が春バージョンになって復活します!

新学期、新年度、桜の咲くこの季節。
今年は新しいスタイルでFPGAの開発をはじめてみませんか?

春バージョンの「MITOUJTAG Light(ライト)版」を発売します。

Mjlight2011spring

Mjl_banner

MITOUJTAGを使うと、BGAの裏側が見え、FPGAが論理合成しなくても動くデバッグができるようになります。オシロや埋め込みロジアナだけでは決してできなかった「見える・楽しいデバッグ」ができるようになります。

もちろん、Interface誌付録のRXマイコンボードや各社の最新FPGAボードにも対応していて、JTAGを使ってCPUやFPGAの端子の状態をパソコンの画面上にリアルタイムに可視化したり、操作することができるようになります。

Rx62n_addr

MITOUJTAG Light版は、非営利・非商用目的に限ってご利用いただけるMITOUJTAGの個人向けバージョンで、MITOUJTAG2.0 Proのプラットフォームをベースに構築されています。

ユーザインタフェースは、従来のMITOUJTAG BASIC1.5から格段に進化しており、ロジアナとバウンダリスキャン可視化の同時動作が可能となっています。
また、JTAG経由のBPI/SPIフラッシュROM書き込みや、印刷サポートが追加され、さらに便利になりました。それから、Sparatn-6ボードで作るUSB-JTAGにも対応しています。

Mjl_image

このバージョンは、仕事だけではなく個人でもFPGAの技術を身につけたいというパワフルな方や、先進の回路を趣味で研究する方、展示会や学園際のためにFPGAのデバッグに本腰を入れたいという方を対象にしています。
そのため、個人のお客様でもご購入いただけるよう3万円台の価格を目指しました。
具体的には、36,540円(消費税込、送料込)です。

Light版は、廉価なBASIC版というわけでは決してありません。MITOUJTAG BASICの中から必要な機能に的をしぼって抽出し、その機能を強化したものです。たとえば、Pocket JTAG Cableの動作速度が2~3倍速くなっていたり、J-WriterをJTAGケーブルとして使うことができたり、目的のデバイスのBSDLファイルを探してくる必要がなかったり、といった感じです。
最新のパッチやアルゴリズムもアップデートするのが容易になっています。


そして、この春限定のお得なキャンペーンを実施します!

① RX62N用のシンプルなJTAG-ICEも、あわせてご提供します!
もちろん、Interface誌の付録基板にも使えます。
今はMITOUJTAGから独立したアプリケーションですが、いずれMITOUJTAGの中に統合される予定です。

Yrdxrx62njtagice

② MITOUJTAG LightとPocket JTAG Cableのセットでお得!
Pocket JTAG Cableとのセットでお買い求めのお客様は、52,290円(消費税込、送料込)でご購入いただけます。約13000円ほどおトクなキャンペーンを実施します。
ただし、先着先着30名様限定とさせていただきます。

Campaign_2

③ みえたジェイプラスをご利用中の方

みえたジェイプラスをお買い上げいただいてから半年以内のお客様は、総額から5,250円(税込)引きでご購入いただけます。ご購入の際に備考欄にその旨をお書きください。

つまり、MITOUJTAG Light とPocket JTAG Cableのセットが、47,040円(税込)となります。MITOUJTAG Light単体なら31,290円(税込)でお求めいただけます。
(これは、みえたジェイプラスをMITOUJTAGの評価用にご利用いただいた方への特典です)

MITOUJTAG Lightについての詳細は下記のページをご覧ください。
http://www.tokudenkairo.co.jp/jtag/lightv.html

ご注文はオンラインショップから承ります。
http://www.tokudenkairo.co.jp/shop/shop.cgi

◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

そして、なんと、今年の春はMITOUJTAGの大幅な改良を予定しています。
・64bit版Windows 7に本格的に対応します!
・シンプルなJTAG-ICEを統合します!
・JTAGロジアナを印刷できるようにしたり、実行結果をVCDファイルに落とせるようにします!
・BLOGANAをALTERAに対応させます!
・MITOUJTAG Lightに、BLOGANAやフラッシュROMライタを追加できるようにします!

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

| | コメント (0)

2011.04.01

「究極のRX62Nボード」の出図完了

いろいろ回路構成で悩みに悩んで作った「究極のRX62Nボード」ですが、昨日、ようやく出図を行いました。最終的なレイアウトは次の図のようになりました。

Rx62n_board_final
(クリックするとPDFで高精細な図面が開きます)

最終的なスペックは、
・CPU ・・・ RX62NのBGA176ピン(R5F562N8BDBG) 96MHz動作
 (CPUの全端子をなんらかの形で取り出しており、基板上でアクセス可能。)
・SDRAM ・・・ 8MB~16MB 32bit接続 (BGAタイプ)
・LAN ・・・ 10/100BASE-T PHYはLAN8720AIを使用
・USB ・・・ USB0:ファンクション、USB1:ホスト (ESD保護あり)
・I/O ・・・ EXDMAC用コネクタ 16bit、EDREQ0~1、EDACK0~1、BCLK
 AN0~AN7、PC0~PC7、P00~P05、P20~P21、
 P32~P35、P10~P13、CS0、CS3、P51、P52の計36本のI/Oを取り出し。
・RS232C用ラインドライバを搭載
・E1エミュレータ用コネクタ搭載
・ユーザ用LED 4個、ユーザ用プッシュスイッチ 1個、圧電ブザー 1個
・MicroSDカードコネクタ搭載
・シリアルフラッシュROM(2M~4Mバイト)搭載
・78Kマイコンを使用したオンボードUSB-JTAG ICE搭載(予定) ※バウンダリスキャンにも対応
・78Kマイコンを使用したオンボードUSB-UART搭載(予定)
・ACアダプタで5V単一電源動作(USBバスパワーも可)
・基板サイズ 76mm×60mm

とりあえずは試作なので、3面付けで基板を作っています。
Rx62n_tiled

この基板には、サブCPUとして78Kマイコン(uPD78F0730)を乗せます。78KマイコンにはUSB-JTAGの機能を担わせ、シンプルなJTAG ICEを使ってプログラムの初期のデバッグができるようにする予定です。E1エミュレータ用の端子も一応用意していますが、E1エミュレータを別途用意しなくても最低限のデバッグはできるようにしたいと思います。

基板の仕上がりは4月8日(金)の予定です。4月15日までには実装も仕上がると思います。
大変お待たせして申し訳ございませんが、動作確認が順調に行ったとして、販売を開始できるのは4月の下旬になる見込みです。

| | コメント (0)

« 2011年3月 | トップページ | 2011年5月 »