USB シリアル (mbed)


20140311usb_mbed

Android から USB シリアルで通信します。
USB シリアル機器には、 mbed を使います。

ソースコードは Google Code に置いています。

mbed の USB インタフェースは下記のとおりです。

VendorId : 3368
ProductId : 516

Interface 0
	Class : Mass Storage Devices Class
	Subclass : SCSI transparent command set
	Protocol : BBB Bulk-Only
Endpoint 130
	Direction : IN - device to host
	Transfer Type : Bulk
Endpoint 2
	Direction : OUT - host to device
	Transfer Type : Bulk

Interface 1
	Class : CDC (Communications Device Class)
	Subclass : ACM (Abstract Control Model)
	Protocol : AT Commands: V.250 etc
Endpoint 129
	Direction : IN - device to host
	Transfer Type : Interrupt

Interface 2
	Class : CDC (Communications Device Class) Data
	Subclass : Data Interface
Endpoint 133
	Direction : IN - device to host
	Transfer Type : Bulk
Endpoint 5
	Direction : OUT - host to device
	Transfer Type : Bulk

Arduino Uno と 同じコード では、うまくいかなった。
controlTransfer が失敗して、ボーレートの変更ができませんでした。
原因は、controlTransfer の index が 0 固定だったためです。
参考にしたコードは、どれもそうなっていたので。

Arduino Uno では、CDC ACM は、Interface 0 ですが。
mbed では、Interface 1 です。
そこで、CDC ACM の Interface 番号を取得して、controlTransfer の index に使用しました。

注記
index = Interface 番号というは、いまひとつ確信がないのですが。
USB の仕様には Interface を特定するものという記述があります。

参考
USB Control Transfers


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です