2012年02月18日

AndroidからFTDI Bit-bangモードの制御

Android上で動作する、FTDIのUSBシリアル/パラレル変換チップFT232/245シリーズ用のデバイスドライバ FTDriver(@ksksue氏作)ってのがありまして、今話題です。
https://github.com/ksksue/FTDriver
Android 3.1以降で対応した、USB Host APIにより、FTDIチップから任意のシリアル入出力が出来ます。

今回、ksksue氏のgithubからのフォークに初挑戦し、そこにBit-bangモードに対応する改変を入れてみました。
上記本線からforkしたのはこちら⇨ https://github.com/yishii/FTDriver

Bit-bangモードとは、FTDIのFT232BM、FT245BMからサポートされたモードで、USBシリアル/USBパラレル変換ではなく、汎用入出力IOをUSBからの制御に基づいて行う、USB-IO的な動作するモードです。
FT232RLでは、5ビットのC-BUSピンのも追加され、UARTの機能を生かしたまま、Bit-bangモードを使用することもできます(要EEPROM書き換え)。

P1100979.JPG

Bit-bangモードの制御追加は、OSSのlibusb上の制御モジュールlibFTDIを参考に実装してみました。
使い方は簡単。こんなかんじです。

	FTDriver mSerial;
	final int MODE_SERIAL = FTDriver.BAUD115200;
	mSerial = new FTDriver((UsbManager)getSystemService(
		Context.USB_SERVICE));
	mSerial.begin(MODE_SERIAL);

	// 第二引数 1 => Output
	mSerial.setBitmode(true, 0xff,
		FTDriver.FTDI_MPSSE_BITMODE_BITBANG);

	for(i=0;i<=5;i++){
		data[0] = (byte)0xff;
		mSerial.write(data,1);
		Log.i("FTDriverTest","Output high");

		data[0] = (byte)0x00;
		mSerial.write(data,1);
		Log.i("FTDriverTest","Output low");

	}
	// exit from bit-bang mode
	mSerial.setBitmode(false, 0, 0);

	mSerial.end();
入力の場合、
	FTDriver mSerial;
	final int MODE_SERIAL = FTDriver.BAUD115200;
	byte data;

	mSerial = new FTDriver((UsbManager)getSystemService(
		Context.USB_SERVICE));
	mSerial.begin(MODE_SERIAL);

	mSerial.setBitmode(true, 0x00,
		FTDriver.FTDI_MPSSE_BITMODE_BITBANG);

	data = mSerial.getPinState();

	// exit from bit-bang mode
	mSerial.setBitmode(false, 0, 0);

	mSerial.end();

動画貼り付けました。実験としては、秋月のフルカラーLEDバーをFTDI FT232RLが搭載されたArduino duemilanoveのFTDIピンに接続し、Android側からIO制御するものです。
FTDI_BBdemo.png
FTDIボードとして、Arduino duemilanoveを使用していますが、AVR側は何もしない起動直後に無限ループするファームを焼いています。従って、Arduinoではなく、単なるFTDIボードとして使用しています。


以下のボードでAndroidから8ビットの汎用I/Oできるってことです。

FT232RL搭載小型USB-シリアルアダプタ 5V
スイッチサイエンス
売り上げランキング: 16984


Arduinoをはじめようキット
スイッチサイエンス
売り上げランキング: 510
タグ:FTDI android
posted by いしいっち at 15:09| Comment(0) | TrackBack(0) | Android開発関連 | このブログの読者になる | 更新情報をチェックする

2012年02月12日

Galaxy Nexus SC-04Dを海外版4.0.2にしてUSB Host APIを試す

★以下の手順を実施され、ご使用の端末の動作や、ドコモの保証等、期待されない状態になったとしても補償しません。実施は全て、自己責任にてお願いいたします★

2011年12月末に予定されていた、GalaxyNexusのアップデート、当初はどのような内容かわかってませんでしたが、結局その実施は先送りされ、先日再開される直前に、その内容が4.0.2の配信と聞いてかなり、ワクワクしてました。

理由は、USB Host APIの対応が期待されたからです。Android 3.1のユーザーさんにとって、当たり前のHost APIですが、僕はタブレット系の端末をもっていないので、それを使った各種お遊びはお預けだったんです。ADKやMicrobridgeの次はHost APIを試したいと思っていたのです。
2月になり、ドコモから4.0.2の配信が開始され、毎日更新の確認をしましたがなかなか降って来ません。まぁ、経験上、配信が開始されてから、実際に降ってくるのには時間がかかる事が多々あったのでそれは良しとして、その間に以下の記事を見つけてしまいました!

コムギドットネット 「GALAXY NEXUS SC-04D アップデート配信開始」
http://komugi.net/archives/2012/02/11004631
記事には、「テザリングや、USBホスト、マスストレージへの対応は今回含まれておりません。」とあります。えーーーーーーーっっ

もう、海外版の4.0.2正規ROMを焼いてしまうことにしました!手順は簡単です。


http://code.google.com/intl/ja/android/nexus/images.html#yakjuicl53f

上記から、「Factory Images "yakju" for Galaxy Nexus "maguro" (GSM/HSPA+)」の「4.0.2 (ICL53F)」をダウンロードします。
GoogleDL.png

展開すると、以下のようなファイルがあらわれます。


.
└── yakju-icl53f
├── bootloader-maguro-primekk15.img
├── flash-all.sh
├── image-yakju-icl53f.zip
└── radio-maguro-i9250xxkk6.img

で、flash-all.shの内容に従って丁寧にひとつずつ僕は実施しました。その後、端末は海外仕様に!

Screenshot_2012-02-11-16-22-05.png

そして、Host APIもちゃんと使えました!!!
13289768608940.jpg

Micro-BからUSB Aの変換ケーブルは以下を購入しました。
iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
バッファローコクヨサプライ (2011-11-01)
売り上げランキング: 558




@ksksue氏作のFTDI用Host APIデバドラと@titoi2氏作ハードウェア+Forth実行環境 on Microchip PIC24Fでの動作です。

ヤッター!

まぁ、ドコモの今後のアップデートでHost APIに対応したらバックアップROMを戻してそれに書き換えます^^;

もちろん、HIDデバイスも動作しましたよ!
IMG_20120212_012025.jpg


posted by いしいっち at 01:38| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする