趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • EPM570T100C5Nを動かしてみた

    投稿日 2012年 6月 18日 コメントはありません

    MAX7000Aはどうしようもないので、ITプラザへ行ってオプティマイズのMAX2 CPLDボードを買ってきました。

    さくさくっと組み立てます。QFPがハンダ付け済みなので楽ちんです。

    今回はブレッドボードとの組み合わせで使うので、ピンソケットを部品面に載せて、ブレッドボード上に置きます。

    スイッチの入力に応じてLEDがチカチカするところまで行きました。

    しかしながら、やはりCPLDは同期回路を動かしてなんぼです。

    3.3Vで動くオシレータがなかったので、余っていたPIC12F675をコンフィギュレーションビットで「内部オシレータ・CLKOUTイネーブル」に設定して1MHzクロックを出力させるようにして接続し、CPLDのクロック入力としてLEDをチカチカさせました。

    参考になるかわかりませんが、ソースを置いておきます。BLINKLED.vhd.zip
    (端子の指定は別途行ってください)
    F/Fのリセットもやってない(そもそもリセット信号を入れてない)とか、スイッチの入力を直接カウンタのイネーブルにつないでる(本来ならF/Fを2回通して同期化すべき)とかありますが、動作確認レベルなので端折っています。


  • USB Blasterもどきを作ってみた(2)

    投稿日 2012年 6月 17日 コメントはありません

    次に、環境を整えます。

    CPLD基板はブレッドボードで扱えるよう、ピンソケットを部品面側に載せることにして、半田面側にはパスコンと電源の配線をしました。

    しかしこの基板、せっかく両面なんだから電源とGNDくらい配線しておいてくれても良さそうなもんなんですけど・・・。

    これをブレッドボード上に取り付けて、製作したUSB BLASTERもどきと接続します。ついでに、CPLDでLEDチカチカをさせるために、LEDとSWを配線しておきます。

    これでQUARTUSIIのプログラマーを起動してJTAGチェーンを認識させると・・・

    無事に認識しました。(キャプチャはもっと後のものです)

    で、LEDチカチカのためのVHDLコードを書いて、合成すると無事に合成できました・・・・が、書き込みでエラーになります。よくみると、EPM7256Aではなく、7256AEとしてコンパイルされています。

    ・・・・で、調べてみたら、MAX7000AEシリーズはサポートされているのですが、MAX7000AはQUARTUSIIではサポートされていないとのこと・・・。がっくりです。

    まあ、それでもUSB BLASTERもどきの動作が確認できたのでよしとします。

    <おまけ>

    最近、またデジカメを入手してしまいました。こんどはIXY 210Fです。PC DEPOで中古で4980円だったのを拾ってきました。

    コンパクトなくせに、しっかり写ります。

    もともとはCHDKを入れて、簡単な三脚とコンパクトデジカメだけでTimeLapse撮影ができるようにして、「いつでもどこでもTimeLapse撮影」とか言いたかったんですが、CHDKはうまく入らないし・・・・で、こういう用途用に重宝しはじめてしまいました。


  • USB Blasterもどきを作ってみた(1)

    投稿日 2012年 6月 16日 コメントはありません

    いずれカメレオンUSB FX2を使うとしてもEZUSB-FX2のGPIFの使い方は調べなければならないのですが、調べて実験することを考えるといきなりカメレオンUSB FX2を使うよりも、EZ-USB FX2となんらかのCPLDの方が便利そうです。

    ジャンク箱を漁っていたら、昔のデザインウェーブマガジン誌についていたMAX7256ATCが載った基板がでてきました。

    これを使う前提で考えることにしました。

    そうなるとライターが必要なのですが、さすがにパラレルポートのあるPCはもうほとんどありませんし、使い勝手もよくありません。Webで調べてみるとPIC18F14K50を使ってUSB Blaster互換のものを作っている方がいらっしゃいまして、手持ちの部品でできそうだったので、早速組み立ててみました。

    ファームウェアを書き込むと、USB Blasterとして認識しました。

    <おまけ>

    USB Blasterのコンフィグレーション端子の表はよく使いそうなのでユーザーガイドから抜き出しておくことにしました。


  • EZ-USB FX2LPをLinuxで動かしてみる(2)

    投稿日 2012年 6月 14日 コメントはありません

    引き続き EZ-USB FX2LP です。

    こんどは、IN方向のベンチマークを行う bench_inを試してみました。(単に記載されている通りにやっただけです)

    1.Examplesを試してみる

    usb-fx2-io-examples-0.4.tar.gzをダウンロードしてきて、展開します。

    slave FIFOを動作させるため、以下の通り結線します。

    • PA2/SLOE, PA5/FIFOADR1, RDY0/SLRDを3.3Vへ
    • PA4/FIFOADR0, RDY1/SLWRをGNDへ

    接続するとこんな感じです。

    接続したらPCに接続して、「make run」でテストが実行されます。

    ~/EZUSB-FX2/usb-fx2-io-examples-0.4/bench_in $ make run
    cycfx2prog prg:bench_in.ihx run bench_bulk:6,16777216
    Using ID 04b4:8613 on 001.007.
    Putting 8051 into reset.
    Programming 8051 using "bench_in.ihx".
    Putting 8051 out of reset.
    Read 16777216 bytes in 513 msec (chunk size 65536): 31.194 Mb/sec ( 256 calls, 65536 bytes/call)

    ということで、16Mバイトの転送が513msで実行され、31.194Mb/secの速度が出ていたことがわかります。

    ちなみに環境は、

    • CPU : Celeron G530
    • Mother : ASRock H61M-ITX (Intel H61 Chipset)
    • Memory : 8GB
    • OS : LinuxMint11 64bit

    です。EZUSB-FX2とマザーの前面USBポートの間にUSB2.0のHUBが入っています。

    2.FX2Pipeを試してみる

    前回インストールしておいた、FX2pipeも試してみました。FX2pipeではEZUSB側のF/Wを指定しなければならないのですが、これに今回のbench_inのF/Wを使ってみます。

    さっきと同じディレクトリで、「fx2pipe -fw=bench_in.ihx -i -0」として動作させて、適当なところで CTRL-cで中止させます。

    ~/EZUSB-FX2/usb-fx2-io-examples-0.4/bench_in $ fx2pipe -fw=bench_in.ihx -i -0
    Firmware config: 0x12 0xc3 0xe0 0x0d 0x12
    IO loop running...
    Downloading firmware "bench_in.ihx"...
    Submitting max. 16 URBs to fill pipeline... 16 submitted
    fx2pipe: 45063323648 bytes in 1100.455s (avg 39990 kb/s, curr 39777 kb/s)^Creap_rv=-1, errno=Interrupted system call
    OOPS: ProcessEvents: ec=4
    IO loop exited
    Cancelled 16 pending URBs (npending=16), reaping... done reaping (16): npending=0
    fx2pipe: 45069058048 bytes in 1100.596s (avg 39990 kb/s)

    ということで、1100秒間で45069058048バイト=45Gバイトの転送を行って、平均はほぼ40MB/sということになりました。

    <追伸>fwにbench_inを指定しなくても動作は一緒でした。あとはGPIFの使い方を調べないといけないですね。

     


  • EZ-USB FX2LPをLinuxで動かしてみる

    投稿日 2012年 6月 12日 コメントはありません

    またまた突然ですが、仕事絡みで高速に大量のデータをお手軽にPCに引き取る必要が出てきました。

    この手の話は

    • ロジックアナライザでステートモードでキャプチャして、テキストでPCに取り込んで、テキスト処理でデータを抽出する
    • 適当な高速パラレルI/Oボードで受ける

    というあたりが手軽な定番だったりするわけですが、今回はその後素人さんにも使わせないといけなくなるようです。しかも金もないときたもんです。

    そこで適当な方法ででっち上げようと思うと、手軽そうなのは、

    • FT245R(これはFSですが・・・)やFT2232H、FT232HのHiSpeedのUSBデバイスで受ける
    • EZ-USB FX2LP などのHiSpeedのUSBデバイスで受ける

    ということになります。
    本当は手軽さから前者にしたかったのですが、FT2232HやFT232HがつながるCPLDボードがあいにく手元にありませんので、今回はカメレオンUSB FX2をターゲットにすることにしました。

    ・・・・っと、その前に、EZ-USB FX2LPを動かしてみよう、というわけです。

    で、CycFX2Progを参考にEZ-USB FX2LPを動かしてみます。(基本的に書いてあることを踏襲しているだけです)

    1.必要なもの

    • CycFX2Progのソース
      作者さんのサイトからダウンロードできるようです。 ちなみにライセンスはGPLとのことなので、これをベースにしたらソース提供してやらにゃいけませんが、きっとそんなことは気にしない人たちでしょう。(提供しない、といってるんではなくて、GPLってなんぞや、って人たちだろうな・・・と)
    • libusb
      すでにインストール済みのようでした
    • SDCC
      インストールされていなかったようなので、パッケージマネージャからインストールします。
      ・・・と思ったら、CycFX2Progとは直接関係ないようです。・・・が、サンプルをコンパイルするのには必要です。

     2.コンパイル

    CycFX2Progは適当なフォルダに展開してMake一発みたいです。
    後のことを考えると、cycfx2progはパスが通っているところに置くのが良さそうです。そうすると、EZ-USB FX2LP側のアプリケーションのMakefileが「make run」で実行(テスト)までもっていけるようです。 自分はホームディレクトリに bin フォルダを掘って、そこに .bashrc でPATHを通しました。

    3.ホストシステムの準備

    /etc/udev/rules.d/z70_usbfx2.rules というファイル名で以下の内容のファイルを作ります。

    # USBFX2 development board udev rules which do the following:
    # * allow access for users in group "plugdev"
    # * unbind the FX2 peripheral from usbtest driver
    # 10-2010 by Vesa Solonen. Tested on plain CY7C68013A on Ubuntu 10.04.
    # Device properties can be found via dmesg (driver and device number) and udevadm info:
    # udevadm info -a -p /sys/bus/usb/drivers/usbtest/1-3\:1.0
    # Reference: http://www.reactivated.net/writing_udev_rules.html
    SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="04b4", ATTR{idProduct}=="8613", GROUP="plugdev", MODE="0660"
    SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="8613", DRIVER=="usbtest", RUN+="/bin/sh -c 'echo -n %k> %S%p/driver/unbind'"

    次に、ユーザの設定で、自分のアカウントが「plugdev」というグループに属しているかを確認します。

    その後、udevを再起動します。

    $ sudo restart udev

    さらに、EZ-USB FX2LPを取り付け直して、認識させ直します。

    4.USBの折り返しテスト

    こちらに記載の折り返しテストを実施してみます。

    単純にソースファイル(usb-fx2-local-examples-0.5.tar.gz)をダウンロードして展開すると、

    • hello_world_ram
    • hello_world_usb
    • convert_string

    という3つのテストプログラムのフォルダができます。各フォルダの中で、「make run」するとテストが完了します。

    5.その他メモ

    ただひたすらデータ転送するのであれば、CY7C68013A(すなわちFX2LPが必要ですが、FX2Pipeというプログラムも公開されています。ひょっとしたら、これを使うとFX2LP側のプログラムは不要になるような気がします。とりあえずインストールは、

    $ ./configure
    $ make
    $ sudo make install

    でできました。

    #こんな簡単にLinuxでEZ-USB FX2LPを動かすノウハウを公開している作者さんに感謝です。