2012/12/14

FT311Dの設定

 引き続き、チップ単体そのままでADKが実現するFT311Dについてです。

 ADKは機器をAndroidに接続した時に機器を区別して立ち上げるアプリを別々にできるように文字列を送る仕組みになっています。
FT311Dのデフォルトは以下のようになっているそうです。
  • Manufacture : FTDI
  • Model (FT311Dのモードに以下のいずれか)
    • FTDIGPIODemo
    • FTDIUARTDemo
    • FTDIPWMDeomo
    • FTDISPISlaveDemo
    • FTDISPIMasterDemo
  • Version : 1.0
  • Serial : VinculumAccessory1
  • Description : Vinculum Accessory Test
  • URL : http://www.ftdichip.com
データシートによれば、これらは設定ユーティリティを使ってWindowsPCから書き換えられるそうです。
確かに設定ユーティリティがダウンロードできます。
こんな画面です。

 ですが、Development ModuleとどうやってPCと接続するのか分かりません。基板はUSB Type-Aコネクタですから、USBケーブルでは繋がりませんし…。
ユーティリティのドキュメントは「AN212 User Guide for FT311 Configuration Utility V1.0」らしいのですが、FTDIのウェブサイトにはまだ上がっていないようです。

 もしかして「VNC2 Debugger/Programmer Module」が必要なのかも?
ひとまずは、デフォルトのままでも困らなさそうなので、このまま使おうと思います。

FT311D Development Moduleを動かしてみました(その2)

 前回に引き続きFT311DのDevelopment Moduleを動かしてみました。
今回は簡易ロジアナを接続してどんな波形が出てるか見てみました。

GPIOモード

 まずはGPIOモードを見てみました。
モードは基板の3つのジャンパプラグで選べるようになっています。
下図の丸で囲んだ部分です。基板のシルク印字に従ってOpen/Closeを設定してから電源入れるとOKです。


 GPIO0とGPIO6を出力にして波形を見てみました。
まったく同タイミングで立ち上がっているようです。

 どうせ後で簡易ロジアナを使うならGPIO0~GPIO6全部を観測すれば良かったのですが、この時点ではオシロで測ってました。
おそらくですが、GPIO0~GPIO6は全て同一タイミングで変化するんじゃないかと想像してます。

 力業で何かのプロトコルを実現するのもできそうですね。

 GPIOの状態ですが、Androidのアプリが終了しても維持されるみたいです。
AndroidとのUSB接続が切れた時にFT311D側がリセットされるようで、出力に指定していたピンもハイインピーダンスになるみたいです。

PWMモード

 次はPWMモードで動かしてみました。
簡易ロジアナでPWM0, PWM1, PWM2を見てみました。設定は
  • 周期1ms
  • PWM0 デューティ 20%
  • PWM1 デューティ 40%
  • PWM2 デューティ 60%
としてます。
周期は1~250msを1ms単位で、デューティは5~95%を1%単位で指定できるみたいです。デモアプリの動きを見ると、デューティは0%も指定できるみたいです。

 波形はこんな風でした。
チャンネル間で立ち下がりが一致する形で動いているのが分かります。

 PWMモードもAndroidのアプリが終了しても信号出力は維持されるようです。
AndroidとのUSB接続が切れた時点で全チャネルLowになるみたいです。

SPI Masterモード

 最後にSPI Masterモード (FT311Dがマスターになる) を試してみました。

 デモアプリから何バイトかWriteしてみてSS0, CLK, MOSIを観測してみました。
上から3Byte, 4Byte 8Byteを送出した場合です。
3Byteの時は時間分解能が異なります。


 SSをかなりがっつりアサートしているようです。まぁ、きわどいのよりはいいです。
若干不思議なのは、送出バイト数によってSSの立ち上がりタイミングが遅くなったり早くなったりするみたいです。細かいことですが…。

 1Byteを送出した時のCLKとMOSIはこんな感じでした。
SPIはモードが4つありますが、FT311Dでは Androidのアプリ側から設定して切り替えられるようです。

 アプリの準備などができたら、どのくらいのレートが出るか測ってみたいな、と考えています。

2012/12/13

FT311D Development Moduleを動かしてみました

 ZedBoardも触ってはいるのですが、
FTDI社のFT311D Development Moduleが届いたので、とりあえずAndroidに接続してみました。

 FT311DはそのままでAndroidに接続するだけでADKが使えるというチップです。
FT311D側がUSB Hostになって、Androidに給電しながら動く形です。
コンフィグピン(3bit)の設定で
  • GPIO (7bit)
  • UART (1ch)
  • PWM (4ch)
  • I2C (1ch)
  • SPI (1ch, FT311Dがスレーブ)
  • SPI (1ch, FT311Dがマスター)
のどれかで動作させられます。(追記:PWMが抜けてたので直しました2012/12/13)

 これまでAndroidに何か繋ぐとなると、Arduino, PIC, mbedなんかでMicroBridgeかADKという感じでしたが、
簡単なGPIOや、ともかくUARTでいいって場合には、もうこれでいいんじゃない、というお手軽なモノです。

 FTDIサイトでデモアプリのソース、APKを配っています。
ひとまず、GPIODemoを試してみました。

 Nexus7 (Android4.2.1) で動かすとこんな感じで、すんなり動きました。
  • OUT BITMAPで0, 1をチェック
  • CONFIGをクリック
  • OUTDATAを操作して、WRITEをクリック
とすると、LEDが反応しています。

 次はNexus S (Android 4.1.1) に接続してみると…、動きません。というか画面が変です。
こんな感じです。

 どうもレイアウトがダメっぽいです。これでは右にあるはずのCONFIGやWRITEがクリックできません。

 ソースも配布されているので、手っ取り早くレイアウトをいじってみました。
手抜きですがこんな感じになりました。基本的にWidthとかMarginとかを小さい値にした感じです。
 これでなんとかCONFIGやWRITEがクリックできます。

 実際、接続してみると、操作しにくいですが動きました。

 このままGPIOなんかで使ってもいいのですが、
今後はFPGAとAndroidの接続に使ってみようかと考え中です。
Twitterで情報が流れてて、「あ、それがいいな」と。

 今までは

  • Android --(USB)-- PIC --(SPI)-- FPGA (PICでMicroBridgeを実装)
  • Android --(USB)-- MAX3421E --(SPI)-- FPGA (FPGA上のNiosIIにMicroBridge or ADKを実装)

とかやっていたのですが、FT311Dを間に挟むのがトラブらなさそうで良いかなと期待しています。