-
Notifications
You must be signed in to change notification settings - Fork 46
home
STMicroelectronicsのSTM32F4-Discovery用Android Open Accessory(ADK) firmwareです。
2012年2月現在、以下で購入可能です。
Atollic TrueSTUDIO®/STM32 Lite v2.3.0にてビルドできます。
無償ながらコードサイズ制限なしの開発環境です(有償版にアップグレードを促すポップアップ画面が邪魔くさいですが)。
サンプル実装として、ボード上のタクトスイッチの状態表示及び赤色LEDのOn/Offの簡単なコードが記述してあります。
Android側はこちらのアプリをインストールしてください。
正常に動作している状況では、オレンジ色のLEDが点滅します。これが点灯or消灯し続ける場合はどこかの処理で止まっていることを意味します。
バスパワーでも動作しますが、外部電源(+5V)を推奨します。
バスパワー動作時にうまく動かない場合は、usbh_adk_core.hで設定している
#define USBH_ADK_NAK_RETRY_LIMIT 1
の値を5から10程度まで大きくしてみて下さい。
以下の端末との接続にて動作を確認しています。
- NexusOne(2.3.6)
- ICONIA TAB A500(3.2.1)
- XOOM(3.2)
独自のコードを記述する際は、main.cの105行目付近
if( USBH_ADK_getStatus() == ADK_IDLE) { . . . }
のブロック内に記述してください。
ChaN氏の組み込み用printfモジュールを利用しています。
PA2にUART2@230400bpsで出力されます。
現時点での実装では以下の制約があります。
これはSTMicroelectronics社提供のUSB firmwareが1トランザクションにつき1パケットのみ転送する仕様によるものです。
- Identify Stringは63文字まで
- データ転送サイズは64バイトまで
STMicroelectronics社提供のUSB firmwareでは正常に動作させることが出来ないため、一部修正を行っています。
- usbh_stdreq.c
Interfaceが2つ以上あるデバイスを接続した場合のEndpointの設定にて、カウンタ(ep_ix)がInterface毎に'0'に リセットされるため、最初のInterfaceのEndpoint情報が最後のInterfaceのもので上書きされてしまう。 → Android端末にて USBデバッグが有効な場合(PID=0x2D01)、アクセサリモードに入れない。
- usb_core.h
- usb_defines.h
- usb_hcd.c
- usb_hcd_int.c
ACKが返ってこないと割り込みから復帰しない。
下記参照し、NAKリトライオーバーを実装。
- usbh_core.c
下記2つのケースにおいて、NAKリトライオーバー発生時にData OUTに戻り、再送する様修正。
- DataステージにおけるOUTに対するNAK
- StatusステージにおけるINに対するNAK
以下のソースコードの著作権については、私(Yuuichi Akagawa)が保持します。
Copyright © 2012 Yuuichi Akagawa
Licensed under the Apache License, Version 2.0
- main.c
- usbh_adk_core.c
- usbh_adk_core.h
- uart_debug.c
- uart_debug.h
本ソフトウェアの開発に際し、下記のライブラリを利用させて頂きました。
- STM32F4-Discovery_FW_V1.1.0 (c)2011 STMicroelectronics
- 組み込み用printfモジュール(xprintf.c,xprintf.h) (c) 2011 ChaN