« 2011年11月 | トップページ | 2012年1月 »

2011.12.28

基板年賀状が出来てきた!

今日、基板年賀状が出来上がってきました。

こんな感じの年賀状です。
Kiban_nenga1
Kiban_nenga2

※まだ正月になっていないので、画像にはモザイクをかけさせていただいています。

詳細は、届いた方だけのお楽しみとさせていただきます。
Spartan-6ボード、MITOUJTAG、究極のRX62Nボードをお買い上げのお客様に送らせていただきます。
想を裏切らない仕上がりです。

部品を実装すると、ちゃんと龍の目と炎が光りました。

Kiban_nenga

部品は実装せずに基板だけで発送させていただきます。
10kΩとか100μFとか2SC1815とか、どこにでもある部品だけで作れます。

これを郵便局にもっていったら、郵便局の職員さんが「わーすごい」と驚いた後、何円で送れるかを上司に相談しにいって、その上司も困って本局に電話して、翌日に回答するということになりました。
はがきでもないし、封筒でもないし、と悩んでいらっしゃいました。
「切手代は50円か、80円か、90円」とのことでした。

特電の製品をお買い上げいただくと、奇抜なアイデアの面白いプレゼントをいろいろと送らせていただきます。
来年早々にはバレンタイン企画の基板チョコレートを予定しています。来年も皆様に楽しんでいただけるような企画をいろいろと考えていますので、これからも特電の評価ボードやMITOUJTAGをよろしくお願いします。

| | コメント (0)

RX62Nの仮想COMポートでFatFSを操作

RX62NのUSBファンクションを使って仮想COMポートを実現し、FatFSを操作してみました。

Com_fatfs

概ねちゃんと動いていますが、バイナリファイルを表示しようとすると、固まります。
USB CDC(いわゆるUSBシリアルのこと)は、ASCII文字でないものを流してはいけないのかもしれません。

また、TCP/IPのサンプルプログラムを動かしてみたところ、頻繁に固まります。
USBの割り込み処理は即座に返答しなければならないようなのですが、イーサネットの割り込み処理に時間がかかっているからなのかもしれません。割り込みの応答時間とかややこしそうです。USBでイーサネットをいじるのは、ちょっと保留。

このUSB仮想COMポートのRX62N側のプログラムは、SCI0、SCI1、USBを自動判別するようになっています。
だから、RXduinoのプログラムでは、Serial.write("hogehoge");とやれば、状況に応じてSCI0でもSCI1でもUSBでも好きなポートから出すことができるようになります。


| | コメント (0)

2011.12.27

RaXinoボードができてきた

RXマイコンによるArduino互換ボード、「RaXino」が実装屋さんから上がってきました。
これからテストを行うので、明日か明後日には出荷できると思います。

Raxinofirst

| | コメント (0)

2011.12.25

RXマイコンのUSB開発(3)

送信側、受信側ともにうまく動きました。

RX62NがUSB⇔シリアル変換器として動作しています。

片方のCOMポートから送ったデータが、もう片方から出てきます。
Rxusb8

どんなサイズのデータを送っても大丈夫です。SCIよりもUSBのほうが高速なので、USBの仮想COMポートからたくさんデータを送ると、SCIのほうが追いつかないことになりますが、ちゃんとフロー制御がかかります。

あとは、使用メモリ量をどれだけ減らせるかが努力のしがいがあるところですが、ブートローダとしての完成を急ぐことにしましょう。

目指すところは、プログラムを簡単にRAMにロードして実行できる環境です。

| | コメント (0)

RXマイコンのUSB開発(2)

ルネサスのWebサイトにある、RX62NのUSBでXMODEM
ソースを参考にしながらに、オリジナルのブートローダを開発する続きです。

「64バイトの整数倍のデータを受信すると固まる」問題に対処したいと思います。

まず、ソースコードをじっくり眺めてみると、RX62NのUSBはほとんど割り込みで動いているのがわかります。usb_hal.cの中のUSBHALInterruptHandler()という関数がそれで、この関数がやっていることを理解すれば、RX62NのUSBの全容が理解できます。

USBHALInterruptHandler()では5種類の割り込みを処理しています。それはVBus、DVST、CTRT、BEMP、BRDYです。
VBusはバスの電源状態が変化したときに発生します。DVSTはバスの状態が変化したとき、CTRTはコントロールパケットの受信時に、BEMPはバッファ(この場合は送信バッファ)が空になったとき、BRDYはバッファがレディ(この場合は受信バッファにデータが来た)になった場合に発生します。

これらのイベントの発生状況がわかるよう、発生したイベントを記録して、SCI0から出力させてみました。すると・・

Rxusb6

最初にVBUS割り込みが発生して、その後、Suspend State→Default State→Suspend State→Default State→と遷移し、セットアップコマンドが送られてきているのがわかります。
bRequest=06となっているので、セットアップコマンドの大半はGET_Descriptorです。ホストは最初にいろいろなディスクリプタを読み出しています。最後にbRequest=09のSet Interfaceを設定して、初期化は終了します。

その次に来ているbRequest=21というのはクラスリクエスト(ここではCDC ACMクラス、つまり仮想COMポート)のSET_LINE_CODINGを示します。ボーレートやストップビットの有無を設定してきています。bRequest=22はSET_CONTROL_LINE_STATEといって、DSRなどの制御線の設定です。
こうして、デバイスドライバとRX62Nとの間で初期化のやりとりが行われています。

TeraTermでオープンすると、SET_LINE_CODINGなどのクラスリクエストが多発しますが、結局のところボーレートの設定くらいしかやっていません。オープンしたという情報は送られません。

TeraTermから文字を打つと、BRDY割り込みが発生します。1文字打つと1バイト長のパケットが生成されます。

では、本題に入りましょう。クリップボードに64文字をコピーしておいて張り付けると、64バイトのパケットに次いで0バイトのパケットが発生します。こうすると、このUSBプログラムはいとも簡単にフリーズします。
その理由がわかるまでかなり苦労しましたが、上のようなデバッグ用の出力を作ったことで問題解決できました。

Rxusb7

この0バイト長パケットを受け取ったあとで、PIPE1CTRというレジスタの上位2ビットが"11"になっていました。INBUFMとBSTSというビットです。BSTSが鍵となりました。ハードウェアマニュアルでBSTSを検索してつぶさに調べていったら、1296ページに「ただし、Zero-Lengthパケット受信時は読み出し不可のためバッファクリアが必要」という記述がありました。USB XMODEMのサンプルソースではこの処理をやっていなかったため、0バイトのパケットを受信したときに固まってしまうのでした。

そこで、ReadBulkOUTPacket()関数の最後に

if(USBIO.D1FIFOCTR.BIT.DTLN == 0)
{
USBIO.D1FIFOCTR.BIT.BCLR = 1;
}

と付け加えてやることで、すべてうまくいきました。もう、何バイトのパケットを送ってもフリーズしません。
1048576バイトのパケットを送信してみたら約2秒かかっていたので、524kバイト/秒程度の速度で送れていることになります。

これでRX62N用のUSBブートローダを作成する下地ができました。

| | コメント (2)

2011.12.21

RXマイコンのUSB開発(1)

来週、RaXino基板が出来上がってきます。
RaXino基板にはUSB-JTAGや、USB仮想シリアル変換のためのICがのっていません。

RX62Nにプログラムを転送するには、FDT(Flash Development Tool)を使って内蔵ROMに書き込むしかありませんでした。
これでは不便なので、RX62Nの内蔵USBファンクションを仮想COMポートにして、RX62N単体で動くUSBブートローダ兼モニタを作ろうと思います。

まず、ルネサスのWebサイトからUSBのサンプルプログラムをダウンロードしてきます。USBでXMODEM転送を行うサンプルがあったので、それを参考にします。このサンプルプログラムはRX62Nの内蔵USBファンクションをCDCというものに設定します。

CDCというのは、いわゆる仮想COMポートです。標準的な仮想COMポートなので、デバイスドライバはWindowsにあらかじめ組み込まれているusbser.sysが使えます。開発者としてはinfファイルだけを書き換えれば動くので、楽です。

ただし、ルネサスのWebサイトにあるUSBのサンプルは、HEW用に作られているので、GCCでコンパイルするためにはいくつか修正しなければなりません。

ここでは開発用に特電の究極のRX62Nボードという評価ボードを使います。このボードはレガシーのRS232Cのポートもついているので、レガシーCOMポートに直につなぐことができます。こうすると、これから開発するUSB関係の内蔵ペリフェラルレジスタの内容を、sprintfとsci_putsでダンプしながら進められるので、開発がとても楽になります。
Rxusb

で、HEW→GCCへ移行してみたら、割り込み関係の#pragma文が関係するところを若干の修正しただけで見事に動きました。

パソコンにつないだら、新しいデバイスとして認識されました。この時点ではまだドライバがないので?がついています。
Rxusb1

INFファイルを書いて、Windows標準のusbser.sysがロードされるようにしました。
Rxusb2

ドライバのインストールは成功です。
Rxusb3

デバイスマネージャにも正しく登録されるようになりました。
Rxusb4

そして、TeraTermから仮想COMポート(このPCでは26番に割り当てられた)として開くことができ、ちょっとしたサンプルプログラムを作って、通信できることも確かめました。
Rxusb5

1MByteのデータを送ってRX62N→PC方向への転送速度(つまり、IN方向)を測ったところ、約174kB/secでていました。約1.3Mbpsなのでまずまずといえるでしょう。仮想シリアルではなく生で使ったらもっと速くなるかもしれません。
もともとのルネサスのサンプルプログラムにはいろいろ問題があるので、まだ実用的ではありませんが、今後、これをベースにいろいろ作って生きたいと思います。

目標としては、RX62Nのプログラムで、物理的なUART(SCI0,SCI1・・・)への入出力と、USB経由の仮想シリアルポートへの入出力に、同じ関数を使うことができるようにしたいと考えています。

RX62NのUSB開発(1)

| | コメント (0)

2011.12.20

RaXino♪(ラクシーノ)基板ができてきた!!

今日、ArduinoコンパチのRX62N評価ボード「RaXino♪(ラクシーノ)」のプリント基板が出来上がってきました。
Raxino_12pcs

12面付けで作っています。
基板の色は青色で、金フラッシュ仕上げです。

表面はこんな感じ。
Raxino_top

裏面はこんな感じです。
Raxino_bot

基板の表面には「楽」の文字がシルクで入っています。
Raxino_top2

裏面には日本地図がシルクで入っています。レジストの青が海の色を連想させていい感じです。
日本海に浮かぶ「RaXino」の文字は、レジストを抜くことで表現しています。こうすると金色になります。これはプリント基板を作る際のちょっとしたテクニックです。
Raxino_bot2

この基板は本日、実装屋さんに送りました。来週には出来上がってくると思います。
それまでに私はソフト面を少し進めようと思います。

| | コメント (1)

2011.12.19

プリント基板で年賀状?いや、年賀基板?

かねてから(10年くらい?)暖めていたアイデアである「プリント基板で年賀状」を、ついに決行するときがきました。

例のツールを使って年賀状データを基板CADに取り込み、ガーバ化しました。
こんな感じで出力されるはずです。
Nenga

基板は緑色のレジスト色で、龍の絵は銅箔の上のレジストなので少し薄い緑色。恭賀新年の文字は銅箔の上をレジストを抜いて、金フラッシュ仕上げにします。「昨年は~」の文字はシルクなので白色となります。

龍の絵は点描画で描かれています。
Picture

年賀状の裏、つまり住所や郵便番号を書くところは全面シルクのベタで真っ白になっていて、郵便番号の枠だけがシルクが抜かれています。反転パターンです。
Ura

あとは、龍の目が光るように、LEDをどうやって仕込もうかと悩んでいます。

この年賀状は数百枚作って、今年一年間に特電の特電製品(※)を買っていただいた方にお送りしようと思っています。
※Spartan-6ボード、EXPARTAN、MITOUJTAG、究極のRX62Nボードのいずれか

元日に届くように特急コースで作りますので、お楽しみに。


◆追記
設計完了!龍の目と炎が光ります。
Nenga2

| | コメント (4)

2011.12.15

Spartan-6評価ボードのサンプルデザインを更新

特電Spartan-6評価ボードのサンプルデザインを更新しました。

http://www.tokudenkairo.co.jp/sp6/

主な更新点は、DDR2メモリコントローラを、MCB(Memory Controler Block)に対応したことです。
これによって、ついにメモリアクセス時のビットエラーが根絶できました。

MCBを作ったXILINXの中の人は凄いので、電流やタイミングのキャリブレーションとかを自動的にしてくれるそうです。とにかく安定しています。いままでは私が作ったオリジナルなDDR2メモリコントローラを使うデザインだったのですが、IODELAY2の調整が難しかったのも事実です。やっぱりハードマクロの安心感は桁違いです。

私が作ったのは、MCBをラッパして使いやすくするための回路です。この回路はddr2mcb.vhdというソースコードで与えられます。どのアドレスから、何バイト読み出したいか、という指令を与えると、自動的にMCBを叩いてアクセスしてくれます。1回の指令で64Mバイト全域のアクセスも可能です。
また、MCB自体がマルチチャネルなので、このラッパもマルチポート(2ポート)になっています。USBからアクセスしている間にも、GPIOから受信したデータをDDR2メモリに書き込むということが簡単にできるようになりました。

これで、Spartan-6を汎用のデータキャプチャ装置や、データ出力装置として使うための準備が整いました。
次はUSBとDDR2メモリまわりのロジックをカプセル化して、ユーザアプリケーションをもっと作りやすくするためにソースコードを整理しようかと思います。

Spartan-6のIOは実はすごい能力を持っています。ISERDESを使えば1GHzの速度でI/Oをサンプリングできますし、IODELAY2をつかって数十ps単位でタイミングをずらすことができます。等価サンプリングでI/Oを動かせば、特電Spartan-6ボードを使って、数十GHz相当のロジアナが作れるのではないかと考えています。

そのデータを溜め込むためにも、信頼のおけるDDR2メモリアクセスが必要だったわけです。

| | コメント (0)

2011.12.14

EXPARTAN-6Tのリファレンスデザインを更新

Exp6t_070

Spartan-6のPCI Express評価ボード「EXPARTAN-6T」のリファレンスデザインを更新しました。今回の更新では、PCI Expressのデザインと、USBのデザインの両方をアップグレードしました。

今回の更新では、MCBを使ったDDR2メモリコントローラを開発し、
DDR2メモリに、PCIeのDMA転送できるようになりました。

従来のバージョンではDDR2メモリのアクセスは当社製のソフトコアを使っていたのですが、
IODELAY2のパラメータ調整が難しく、ビットエラーを起こしてしまうことがありました。
MCB(Memory Contoler Block)を使うことで、DDR2メモリにエラーなくアクセスできるようになりました。

そのほかにも、PCI Expressのコアの不具合がいろいろ修正されており、
Memory Writeトランザクション時に、ユーザ回路からWAITを
かけることができるようにも改良されています。

各種のリファレンスデザインのダウンロードは下記のURLから行えます。
http://www.tokudenkairo.co.jp/exp6t/download.html


P.S. EXPARATN-6Tの、ワケあり品も大特価で放出します。
基板の一部に傷があったり、レビジョンが古い基板なので、通常価格では出せない品です。
なんと、1万2千円引きで大特価奉仕中です!!
いずれも、未使用の完動品です。機能にはまったく問題ありません。

現品限りのご提供ですので、品切れの際はご容赦ください。
https://shop.tokudenkairo.co.jp/shopping/detail.php?shpdi=PDTDA00001

| | コメント (0)

2011.12.12

Arduino互換RXマイコン評価ボード「RaXino」予約受付開始

かねてから開発していたArduino互換のRXマイコン評価ボードですが、
Raxino
名前は「RaXino♪(ラクシーノ)」に決まりました。

いろいろな名前を考えてご応募いただいた皆様、本当にありがとうございました。
RaXino(ラクシーノ)は今月の下旬に発売開始予定です。

名前が決まったので、シルクを作り直するために、基板を設計しなおしています。

次のリビジョンの基板では、
・Arduinoと同じくレジスト色を青にする
・端子を金フラッシュ仕上げにする
・加速度センサを実装する
・シルクで日本地図を入れる
・EMLEやMDE端子に抵抗を追加する
という改良を行います。

出来上がった基板のデザインは、こうなりました。
Raxinotop

ここで作ったツールによって、シルクで漢字や図柄が入れています。


ところで、本家のArduinoにはシルクでイタリアの地図が描かれていたので、RaXinoには日本地図を入れました。
Raxinobot

地図の右にある広い領域は太平洋の広さを現しています。地図には北方領土や竹島、尖閣もちゃんと入れました。結構苦労しました。
日本海上にある「RaXino Made in Japan」の文字は、レジストを抜くようにして描いているので金色になります。ゴールデンです。
Raxinojapan

加速度センサは基板のちょうど真ん中に入っています。
基板を振ったりして遊べるものが作れるといいなと思っています。

Raxinoaccel

この基板は、明日、発注するので、12月20日ごろにできあがってくる見込みです。即座に実装に出すので、おそらく12月の末ごろには発送できるようになるでしょう。皆様のお正月休みには間に合うよう頑張ります。

ボードの詳しい情報は、こちらのページ↓に随時書いてきます。
http://www.tokudenkairo.co.jp/raxino/index.html

定価は9800円(税込)です。
最初のロットはあまりたくさんは作らないので、もし、品切れになってしまったらごめんなさい。
この基板は12月下旬の出荷開始予定です。

ですが、
・・・
・・・
・・・
本日から、先行予約の受付を行います。

Yoyaku

先行予約していただくと、なんと!10%割引の8,820円でお求めいただけます。
また、確実に入手できます。
先行予約は、20名様限定で12月18日まで受付を行います。

とてもお得なキャンペーンなので、RaXinoボードを希望される方は、ぜひともご予約ください。
それでは、皆様のご注文・ご予約をお待ちしております。

| | コメント (0)

2011.12.09

Spartan-6 MCBを使ったPCI ExpressのDMAができた

長ったらしいタイトルですが、要するに、Spartan-6のMCBを使ってDDR2 SDRAMにアクセスし、PCI ExpressのDMA経由でデータを出し入れすることができるようになったということです。

今はまだDDR2メモリのアクセスの効率が良くないので、転送速度は100MB/sくらいしか出ていません。DDR2メモリから読み出したデータはBlock RAMに蓄えてからPCI Expressに送っているためです。Block RAMへの書き込みと読み出しを平行して行うように工夫すれば、速度は2倍になるでしょう。
Pciedma1

乱数をひたすら書いて読んで・・してデータの整合性をチェックしています。
Pciedma2

MCBというのはすばらしいもので、パラメータの調整などを特にしなくても、自動的にキャリブレーションをしてくれます。Spartan-6のIODELAY2には個体差があるようなので、この機能はありがたいです。

近日中にデザインを公開します。
お楽しみに。

| | コメント (0)

« 2011年11月 | トップページ | 2012年1月 »