Skip to content
This repository has been archived by the owner on Sep 5, 2020. It is now read-only.
YuuichiAkagawa edited this page Mar 13, 2012 · 2 revisions

STMicroelectronicsのSTM32F4-Discovery用Android Open Accessory(ADK) firmwareです。

image

ボードの入手について

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バイトまで

USBホストのコードについて

STMicroelectronics社提供のUSB firmwareでは正常に動作させることが出来ないため、一部修正を行っています。

【EndPoint設定不具合修正】

  • usbh_stdreq.c

Interfaceが2つ以上あるデバイスを接続した場合のEndpointの設定にて、カウンタ(ep_ix)がInterface毎に'0'に リセットされるため、最初のInterfaceのEndpoint情報が最後のInterfaceのもので上書きされてしまう。 → Android端末にて USBデバッグが有効な場合(PID=0x2D01)、アクセサリモードに入れない。

【CTRL_STATUS_IN_WAITでハング】

  • usb_core.h
  • usb_defines.h
  • usb_hcd.c
  • usb_hcd_int.c

ACKが返ってこないと割り込みから復帰しない。
下記参照し、NAKリトライオーバーを実装。

https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FUSBH_BulkReceiveData%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=70

【コントロール転送の再送機能追加】

  • usbh_core.c

下記2つのケースにおいて、NAKリトライオーバー発生時にData OUTに戻り、再送する様修正。

  1. DataステージにおけるOUTに対するNAK
  2. 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