SlideShare a Scribd company logo
1 of 22
GR-SAKURAのUSBホスト機能で遊ぼう
OSC 2012 Kansai@Kyoto
2012/8/4
2014/6/15改訂
SAKURAボードユーザ会
Yuuichi Akagawa
自己紹介
Yuuichi Akagawa (あかがわ ゆういち)
がじぇるねプロジェクトのベータテストに参画
仕組みを知ることが大好きなので、成果物が
ほとんどないのが特徴。
本職は某SI企業のインフラ担当。ツッコミ厳禁。
Copyright©2012 Yuuichi Akagawa
USBホストと私
Android ADKをハックしていたら、
USBホスト遊びが楽しくなってしまった。
STM32F4 DiscoveryでADK
USB MIDI to レガシーMIDI変換
Harpy nano(Arduino互換)利用
→ USBH_MIDIライブラリ
https://github.com/YuuichiAkagawa/USBH_MIDI
LM3S3748でADK
CQ出版「超入門!付属ARMマイコンで
始めるロボット製作」基板
★Arduino用ADKライブラリ Yaoadkも絶賛公開中。https://github.com/ADKstudyGroupTokyo/Yaoadk
Copyright©2012 Yuuichi Akagawa
GR-SAKURAのUSBホスト(ハード)
Functionと共用のため排他利用(RX63NのUSB0)
→ ホスト時は仮想COMポートが使えない。
GR-SAKURA-FULLを買ってもUSB-Aコネクタは
未接続。
GR-SAKURAでもUSB-Aコネクタを接続すれば
利用可能。
Copyright©2012 Yuuichi Akagawa
GR-SAKURAのUSBホスト(ハード)
USBホストを使うには、まずハンダ付けから。
1. 基板裏面にUSB-Aコネクタをハンダ付け
2. J13,J15(もしくはJ12,J14)をハンダでショート
※後述の「USBホスト有効時のIO2,IO5の取り扱い」参照
3. J1をショートすると保護ダイオードがバイパス
される。必要に応じて。
Copyright©2012 Yuuichi Akagawa
J1はお好みで。
J13,15を
ショート
GR-SAKURAのUSBホスト(ハード)
printfデバッグはXBee接続がオススメ
Copyright©2012 Yuuichi Akagawa
void setup()
{
Serial.begin(9600,SCI_SCI2B); //XBee
Serial.setDefault(); // printfをSerialに出力
if(tkusbh_init() != TKUSBH_OK){
printf("!!! USB Host Initialization ERROR !!!n");
while(1);
}
}
※写真は評価版基板
GRのUSBホストライブラリ
V1ベース(RXduino)での話しです。
厳密にはRXduinoの下にある特電HALの機能
ドキュメントは、関数リファレンスのみ
http://rx.tokudenkairo.co.jp/manual2/tkdnhal_desc.html#funclist_hal_usbhost
よくあるステートマシンを回すタイプではなく、
同期処理っぽい作り。
そのため、あんまり詳しくない人でも割と簡単
に使える(超お手軽)。
詳しい人には痒いところに手が届かない。
Copyright©2012 Yuuichi Akagawa
GRのUSBホストライブラリ(続)
USBホスト有効時のIO2,IO5の取り扱い
gUsbHostGpioPulldownで設定可能
ジャンパの設定も必要
デフォルトは0に設定されている
USBの仕様としては1の動作が正しい
実際には問題なく動作することが多いので0でもOK?
tkusbh_init()の前に設定しておく必要あり
Copyright©2012 Yuuichi Akagawa
gUsbHostGpioPulldown IO2 IO5 ジャンパ設定
0 GPIO GPIO J13,J15
1 USB0_DPRPD USB_DRPD J12,J14
GRのUSBホストライブラリ(続)
関数一覧
関数名 機能
tkusbh_init() USBホストモジュールを初期化する
tkusbh_is_connected() ターゲットが接続されているかどうかを調べる
tkusbh_connect() ターゲットに接続する
tkusbh_disconnect() ターゲットを切断する。切断されるまで待つ。
tkusbh_get_descriptor() 接続されているターゲットのディスクリプタを取得する
tkusbh_get_string() 接続されているターゲットのストリングディスクリプタを取得する
tkusbh_control_msg() コントロールトランザクションを発行する
tkusbh_set_configuration() SET CONFIGURATIONを実行する
tkusbh_bulk_write() バルクOUT転送を実行する
tkusbh_bulk_read() バルクIN転送を実行する
tkusbh_start_interrupt_trans() インタラプト転送を行う(開始する)
tkusbh_interrupt_write() インタラプトOUT転送で送信されるデータを登録する
tkusbh_interrupt_read() インタラプトIN転送で受信したデータを取得する
Copyright©2012 Yuuichi Akagawa
GRのUSBホストライブラリ(続)
サポート状況
大分類 中分類 サポート 備考
転送タイプ コントロール転送 ○
バルク転送 ○ エンドポイントはIN/OUT 1つずつ。
インタラプト転送 ○ エンドポイントはIN/OUT 1つずつ。
受信割り込み無し
アイソクロナス転送 × RX63Nには機能あり。
Speed - LS
FS
HSは未対応
クラスドライバ - × 何にも無いよ。
HUB対応 - ×
その他 ディスクリプタのパース × 支援なし。自力でがんばる。
Copyright©2012 Yuuichi Akagawa
GRのUSBホストライブラリ(続)
たったこれだけで、USBの接続処理が完了。
tkusbh_init();
tkusbh_connect();
でも、エンドポイント番号は自分でディスクリ
プタをパースしないとわからない。USB詳しく
ない人はここでつまづくはず。
ディスクリプタをパースしてデバイスを確認す
るのが定石だけど、しないのもアリなのかも。
あとは、bulk_readなりbulk_writeするだけ。
Copyright©2012 Yuuichi Akagawa
GRのUSBホストライブラリ(続)
tkusbh_connect()を実行すると…
Get Device Descriptor(先頭8バイト)
Get Device Descriptor(ALL)
Set Address
Get String Descriptor(0)
Get Configuration Descriptor(先頭9バイト)
Get Configuration Descriptor(ALL)
Get String Descriptor(1)
Get String Descriptor(2)
Get String Descriptor(3)
ここまでやってくれる。(介入はできない)
※でも、Get Configuration Descriptorの結果は残らない。
Copyright©2012 Yuuichi Akagawa
GRのUSBホストライブラリ(続)
自分は以下の感じで使うようにしてみた。
bool connected = false;
void setup()
{
tkusbh_init();
}
void loop()
{
if( isConnected() == false ){
delay(100);
return;
}
//接続済みなので、送受信する
if(tkusbh_bulk_read(…) > 0 ){
//受信データを処理
}
//何か送信
if(tkusbh_bulk_write(…) < 0 ){
//送信エラー
}
delay(); //デバイス側に指定があれば。
}
bool isConnected ()
{
TKUSBH_RESULT rcode;
//Check the disconnect state
if(connected && tkusbh_is_connected() == TKUSBH_DISCONNECT){
tkusbh_disconnect(TIMEOUT_INFINITE);
isPollEnable = false;
return false;
}
if(connected) //Already connected
return true;
if(tkusbh_connect(500) != TKUSBH_OK){//Start Enumeration
return false;
}
if(!parseConfigDescr()){
return false;
}
connected = true;
return true;
}
bool parseConfigDescr()
{エンドポイント情報をパース}
Copyright©2012 Yuuichi Akagawa
GRのUSBホストライブラリ(続)
Configuration Descriptor
Configuration Descriptor bLength
bDescriptorType
wTotalLength 全体のサイズ
bNumInterfaces Interface数
bConfigurationValue
iConfiguration
bmAttributes
bMaxPower
Interface Descriptor bLength
bDescriptorType
bInterfaceNumber
bAlternateSetting
bNumEndpoints Endpoint数
bInterfaceClass USBクラス
bInterfaceSubClass USBサブクラス
bInterfaceProtocol
Endpoint Descriptor bLength
bDescriptorType
bEndpointAddress エンドポイント番号
bmAttributes
wMaxPacketSize パケットサイズ
bInterval ポーリングインターバル
コンフィギュレーションディスクリプタは
tkusbh_get_descriptor(CONFIG_DESCRIPTOR_TYPE, 0, buf, 128);
で取得できる。
これをパースしてエンドポイント番号なり
を取得する。
デバイスで決め打ち出来るのであれば
デバイスディスクリプタの
・idVendor
・idProduct
の値を見れば良い。
tkusbh_connect()が成功していれば、
・USBHostInfo.DeviceDesc.idVendor
・USBHostInfo.DeviceDesc.idProduct
に代入されている。
作例
Copyright©2012 Yuuichi Akagawa
もちろんGR-SAKURAでもADK
6/12に待望のUSBホストライブラリが公開され、
6/16のプロデューサミーティングに間に合わ
せるべくADKの実装に着手。
USBホストライブラリの不具合修正を依頼しつ
つ、なんとか当日動かせた。
http://japan.renesasrulz.com/gr_user_forum_japanese/w/wiki/75.android-adk-for-gr-sakura.aspx
Copyright©2012 Yuuichi Akagawa
USBH_MIDI
Arduino用に作ったUSB-MIDIクラスドライバを
GR-SAKURAにも移植。
音楽用ではないのでタイミング制御的なもの
は無く、MIDIメッセージの送受信が出来ると
いうもの。
Copyright©2012 Yuuichi Akagawa
Monakaと接続USB-MIDI to シリアルMIDI変換 USB-MIDIコントローラでLED操作
http://japan.renesasrulz.com/gr_user_forum_japanese/w/wiki/69.usb-midi-usbh-midi-for-gr-sakura.aspx
USBマウス
サンプルとして作成
Copyright©2012 Yuuichi Akagawa
http://japan.renesasrulz.com/gr_user_forum_japanese/w/wiki/43.usb.aspx
他のメンバーの作例
Copyright©2012 Yuuichi Akagawa
USB Bluetoothアダプタ
@hrdakinoriさんのBluetooth(btstackの移植)
Copyright©2012 Yuuichi Akagawa
http://d.hatena.ne.jp/hrdakinori/20120729/1343542201
USB NFCリーダ
@KazuyukiEguchiさんのNFCリーダ
Copyright©2012 Yuuichi Akagawa
読み取ったデータをBluetooth Bee経由でAndroid端末に送信
おしまい
Copyright©2012 Yuuichi Akagawa

More Related Content

What's hot

GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...Web Technology Corp.
 
Kinect for windows sdk c#
Kinect for windows sdk c#Kinect for windows sdk c#
Kinect for windows sdk c#Kaoru NAKAMURA
 
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Masayuki Abe
 
Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05Yasuhiro Matsuda
 
Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kaoru NAKAMURA
 
Androidロボットサミットin名古屋
Androidロボットサミットin名古屋Androidロボットサミットin名古屋
Androidロボットサミットin名古屋Kenichi Yoshida
 
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発hmimura_embarcadero
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...74th
 
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)gree_tech
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
【Unite Tokyo 2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」
【Unite Tokyo  2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」【Unite Tokyo  2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」
【Unite Tokyo 2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」Unity Technologies Japan K.K.
 

What's hot (14)

GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
 
Kinect for windows sdk c#
Kinect for windows sdk c#Kinect for windows sdk c#
Kinect for windows sdk c#
 
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )
 
Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05
 
Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向
 
Androidロボットサミットin名古屋
Androidロボットサミットin名古屋Androidロボットサミットin名古屋
Androidロボットサミットin名古屋
 
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
 
Kinect introduction
Kinect introductionKinect introduction
Kinect introduction
 
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (2)
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
Next2D
Next2DNext2D
Next2D
 
Directconnect200808 Help Jp
Directconnect200808 Help JpDirectconnect200808 Help Jp
Directconnect200808 Help Jp
 
【Unite Tokyo 2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」
【Unite Tokyo  2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」【Unite Tokyo  2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」
【Unite Tokyo 2018】バーチャルYouTuber電脳少女シロがご紹介する「2018年の注目アセット100連発」
 

Similar to GR-SAKURAのUSBホスト機能で遊ぼう

おしゃべりbox♪ IoTLT vol14
おしゃべりbox♪ IoTLT vol14おしゃべりbox♪ IoTLT vol14
おしゃべりbox♪ IoTLT vol14Masashi Fujimoto
 
20130526 m3pi in ADK BootCamp
20130526 m3pi in ADK BootCamp20130526 m3pi in ADK BootCamp
20130526 m3pi in ADK BootCampKenichi Ohwada
 
AndroidとArduinoで ロボットを作って思ったこと
AndroidとArduinoで ロボットを作って思ったことAndroidとArduinoで ロボットを作って思ったこと
AndroidとArduinoで ロボットを作って思ったことTakao Sumitomo
 
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013Shigeru Kobayashi
 
XFD導入実践記
XFD導入実践記XFD導入実践記
XFD導入実践記Go Takahashi
 
20121013 ADK bootcamp in Tokyo
20121013 ADK bootcamp in Tokyo20121013 ADK bootcamp in Tokyo
20121013 ADK bootcamp in TokyoKenichi Ohwada
 
中国PCB業者発注体験
中国PCB業者発注体験中国PCB業者発注体験
中国PCB業者発注体験Yuuichi Akagawa
 
北九州デジタルクリエイターコンテスト2013記念講演会
北九州デジタルクリエイターコンテスト2013記念講演会北九州デジタルクリエイターコンテスト2013記念講演会
北九州デジタルクリエイターコンテスト2013記念講演会Shigeru Kobayashi
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduinofuna3
 
LEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しようLEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しようTakashi Kanamaru
 
Arduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼうArduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼうtreby
 
Lecture at University of Tsukuba
Lecture at University of TsukubaLecture at University of Tsukuba
Lecture at University of TsukubaShigeru Kobayashi
 
Adk study Boot Camp #2 Mogri
Adk study Boot Camp #2 MogriAdk study Boot Camp #2 Mogri
Adk study Boot Camp #2 Mogrimogri_ss
 
Arduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitchArduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitchBizan Nishimura
 
マイコンボード色々 2017.03
マイコンボード色々 2017.03マイコンボード色々 2017.03
マイコンボード色々 2017.03Hirokazu Tokuno
 
Ruby関西勉強会発表資料
Ruby関西勉強会発表資料Ruby関西勉強会発表資料
Ruby関西勉強会発表資料三七男 山本
 
Jenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとJenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとKiro Harada
 
ESP8266EXで位置推定
ESP8266EXで位置推定ESP8266EXで位置推定
ESP8266EXで位置推定nishio
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験Kaz Ueno
 
Android端末と組み込み機器が連携する Android Make Days
Android端末と組み込み機器が連携する Android Make Days Android端末と組み込み機器が連携する Android Make Days
Android端末と組み込み機器が連携する Android Make Days Yasuhiro Ishii
 

Similar to GR-SAKURAのUSBホスト機能で遊ぼう (20)

おしゃべりbox♪ IoTLT vol14
おしゃべりbox♪ IoTLT vol14おしゃべりbox♪ IoTLT vol14
おしゃべりbox♪ IoTLT vol14
 
20130526 m3pi in ADK BootCamp
20130526 m3pi in ADK BootCamp20130526 m3pi in ADK BootCamp
20130526 m3pi in ADK BootCamp
 
AndroidとArduinoで ロボットを作って思ったこと
AndroidとArduinoで ロボットを作って思ったことAndroidとArduinoで ロボットを作って思ったこと
AndroidとArduinoで ロボットを作って思ったこと
 
Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013Hardware Sketching Workshop 2013
Hardware Sketching Workshop 2013
 
XFD導入実践記
XFD導入実践記XFD導入実践記
XFD導入実践記
 
20121013 ADK bootcamp in Tokyo
20121013 ADK bootcamp in Tokyo20121013 ADK bootcamp in Tokyo
20121013 ADK bootcamp in Tokyo
 
中国PCB業者発注体験
中国PCB業者発注体験中国PCB業者発注体験
中国PCB業者発注体験
 
北九州デジタルクリエイターコンテスト2013記念講演会
北九州デジタルクリエイターコンテスト2013記念講演会北九州デジタルクリエイターコンテスト2013記念講演会
北九州デジタルクリエイターコンテスト2013記念講演会
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduino
 
LEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しようLEDやモーターをArduinoで制御しよう
LEDやモーターをArduinoで制御しよう
 
Arduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼうArduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼう
 
Lecture at University of Tsukuba
Lecture at University of TsukubaLecture at University of Tsukuba
Lecture at University of Tsukuba
 
Adk study Boot Camp #2 Mogri
Adk study Boot Camp #2 MogriAdk study Boot Camp #2 Mogri
Adk study Boot Camp #2 Mogri
 
Arduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitchArduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitch
 
マイコンボード色々 2017.03
マイコンボード色々 2017.03マイコンボード色々 2017.03
マイコンボード色々 2017.03
 
Ruby関西勉強会発表資料
Ruby関西勉強会発表資料Ruby関西勉強会発表資料
Ruby関西勉強会発表資料
 
Jenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとJenkins に XFD を追加してみると
Jenkins に XFD を追加してみると
 
ESP8266EXで位置推定
ESP8266EXで位置推定ESP8266EXで位置推定
ESP8266EXで位置推定
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
 
Android端末と組み込み機器が連携する Android Make Days
Android端末と組み込み機器が連携する Android Make Days Android端末と組み込み機器が連携する Android Make Days
Android端末と組み込み機器が連携する Android Make Days
 

GR-SAKURAのUSBホスト機能で遊ぼう