USBStudy の変更点
[[2014-08]]
*[[UsbStudy:http://www.kumikomi.net/interface/contents/201412.php]]をPIC32MX に移植する [#i5ec33bb]
現時点では、
-Pinguino gccを使用してビルドが通る。
-シリアル、LEDは動作している
-%%USB HOSTはAttach Detachの検出まで出来ているが、BDT周りに問題があって動いていない。%% ---> なんとなく動いています。
~
非互換の原因になっている問題
-BDT(Buffer Descriptor Table)の構造が違う。
--PIC24Fでは BDTは1個あたり4byte。内訳は BDSTAT(6bit) , COUNT(10bit) , BufferAddress(16bit)
--PIC32MXでは BDTは1個あたり8byte。内訳は BDSTAT(2byte中6bit) , COUNT(2byte中10bit) , BufferAddress(32bit)
-BDTの配置が異なる
--PIC24FではNO PING PONGモードで使用。BDTは稠密に並んでいます ( EP0〜15 x IN/OUT )
--PIC32MXではFULL PING PONGモードしか存在せず、EP0〜15(x Even / Odd)( x IN/OUT)でPING PONGモード(EvenバッファとOddバッファ交代を毎回行う)が強制的に採用されます。
~
~
~
*とりあえずダウンロード [#cdf82d7d]
-ソース:[[UsbStudy.X.zip:http://psp.dip.jp/web/upload.cgi/PIC/UsbStudy.X.zip]]
-各種デバッグプリント(UART向け)の埋め込みは可能。
~
~
~
*■ 配線 PIC32MX220F032B 8MHz水晶使用. [#zccf876a]
3.3V
|
*------10Ω--------------+
10k |
| ___ ___ | 0.1u
ラ --> ----*-MCLR [1 |__| 28] AVDD-*-||---GND
イ --> --PGD3/RA0 [2 27] AVSS--------GND LED
ター --> --PGC3/RA1 [3 26] RB15--1kΩ-------|>|--GND
RB0 [4 25] RB14
RB1 [5 24] RB13
SDA2/RB2 [6 23] Vusb3v3--------3.3V
SCL2/RB3 [7 22] usb D-
Xtal GND----Vss [8 21] usb D+ +10uF
+-----------------OSC1 [9 20] Vcap------||---GND
*--|□|--*--------OSC2 [10 19] Vss------------GND
| 8MHz | U1TX/RB4 [11 18] RB9 *--10k------3.3V
22pF 22pF U1RX/RA4 [12 17] RB8 |
| | 3.3v--Vdd [13 16] RB7 -----------------------*--BOOT_SW--GND
| | RB5 [14 15] Vbus-----------USB Vbus(5V)
GND GND ~~~~~~~~~~
-PIC32MX250F128Bでも回路図、ファームウェアは共通に使用できます。
--(ファームウェアサイズはFlash32K,SRAM8Kに十分収まっています)
* UsbStudy ファームウェアの挙動 [#f4c49eb6]
-USBのD+/D-は、適当なUSBデバイス(KB,Mouse,...)に繋ぎます。(Type-Aメスに配線する)
-PIC32MX側はUSB HOSTになります。
~
-U1TX/U1RXを適当な3.3VレベルのUSB-Serial変換器などに繋いで、WindowsのTeratermなどで接続します。
-ボーレートは9600BPS
~
D:\pic32\UsbStudy.X>w32term -c3 -b9600
9600
Entering TerminalMode: Escape=^A
>?
's': Get string
'g': get descriptor command
'a': Set address command
'c': set config command
'I': IN command
'i': IN command
'o': OUT command (use default DATA0/1 sequence)
't': SETUP command
'w': Clear & Write command
'W': WRITE command (Append to current send buffer)
'r': Reset command
'd': Mem Dump
>
*操作例 [#d26cde3f]
-TeraTerm等でファームウェアを操作します。
-基本的にTeratermからコマンドを投入して、結果を表示するようになっています。
-最初に'a'コマンド投入が必要です。
D:\pic32\UsbStudy.X>w32term -c3 -b9600
9600
Entering TerminalMode: Escape=^A
>?
's': Get string
'g': get descriptor command
'a': Set address command
'c': set config command
'I': IN command
'i': IN command
'o': OUT command (use default DATA0/1 sequence)
't': SETUP command
'w': Clear & Write command
'W': WRITE command (Append to current send buffer)
'r': Reset command
'd': Mem Dump
>
>a
Address
Ok
>s1
Microsoft
>s2
ゥ 2000 Microsoft Corp. All rights reserved.
>s3
Microsoft 3-Button Mouse with IntelliEye(TM)
>g
12 01 10 01 00 00 00 08 5e 04 40 00 00 03 01 03
00 01
>
~
~
~
~
~
------------
*おまけ:PIC32MXでUSB HOSTを作る場合 [#zd3cf7ce]
-普通にMicrochipのサンプルがあるので、それをもとに作ればハードウェアの操作を直接行う必要はありませんが、
-レジスタ手打ちの場合のやりかたなど
基本は、[[マニュアル:http://ww1.microchip.com/downloads/jp/DeviceDoc/jp534259.pdf]]のHOST Mode Operationを読めばだいたいの手順が書いてあります。
-HOSTモードではEP0しか使わない。
--Deviceで動作させるときはEP0〜15が使えますが、HOSTモードではEP0のみ有効にしてEP1〜15はDisableにします。
-HOSTからDeviceへのUSBパケットはU1TOKレジスタにトークンを書き込む。
--トークン(PID)は3種類しかありません。
,Packet ID 4bit,意味
,0001,OUT(TX)
,1001,IN(RX)
,1101,SETUP(TX)
~
~
~
~
------------
*USB Hostを弄れるマイコン/基板をリストアップ [#q9339ae0]
-Raspberry-Piとか使うと、普通にLinuxでUSB HOSTでドライバーは全部アリ。もちろんHubにも対応している。
-それだとUSB HOSTを弄るというよりは、普通にPC使うのと同じ。
~
マイコンの場合は、
,ICチップ、あるいは基板名称(リンク先は全部秋月です),お値段(秋月),備考
,ICチップ、あるいは基板名称(リンク先は全部秋月です),お値段(秋月),スペック,備考
,[[PIC24FJ64GB002:http://akizukidenshi.com/catalog/g/gI-08168/]],DIP28 @340円,64KFlashROM/8KRAM/16bitCPU 32MHz,(16MIPS)
,[[PIC32MX220F032B:http://akizukidenshi.com/catalog/g/gI-05852/]],DIP28 @250円,32KFlashROM/8KRAM/32bitCPU 48MHz,
,[[PIC32MX250F128B:http://akizukidenshi.com/catalog/g/gI-07644/]],DIP28 @360円,128KFlashROM/32KRAM/32bitCPU 48MHz,
,[[STM32 NUCLEO-F401RE:http://akizukidenshi.com/catalog/g/gM-07723/]],1500円,[[STM32F401RET6:http://www.st-japan.co.jp/web/jp/catalog/mmc/FM141/SC1169/SS1577/LN1810/PF258797]] Flash512K/96kSRAM/84MHz,参考URL = http://developer.mbed.org/users/va009039/code/F401RE-USBHost/
,[[STM32 STM32F4DISCOVERY:http://akizukidenshi.com/catalog/g/gM-05313/]],1750円,[[STM32F407VGT6:http://akizukidenshi.com/download/ds/st/STM32F4DISCOVERY.pdf]] Flash1MB/192kSRAM/168MHz,参考URL = https://github.com/YuuichiAkagawa/STM32F4_ADK/wiki
-予算2000円以内という感じでは、こんなところ。
-PIC18FにはUSB-HOSTは付いてない。
-PIC24Fは1命令2CLOCK
-PIC32MXは40MHzもしくは48MHz(規格上は50MHzが上限で、USB縛りがある時は8MHzの倍数で動作)
~
-ARM Cortex-M3系でUSB-HOST機能付きMCUは、そんなに多くない。
-意外とRasp-Piのほうがお勧めかなー。半田付けとか''電子工作さえ不要''だし。
--ドライバー書かなくても、全部揃ってる(^笑^)
--いやーLinuxって、ほんと便利っすね。ソース全部あるし(当然)
--こんな2000円程度のARMパソコン(Rasp-Piのこと)でも、フルサイズのLinuxが動くんだよー。PC用のLinuxと全く同じものなんだよー(CPUアーキテクチャーと性能は当然異なります)。すごいだろー(今となっては全部当たり前)
~
~
~
~
~