果たして"きれいな躰"に戻ったGPD Pocket、ふと気が付くとWiFiに接続しない。
デバイスマネージャーで見てみると、ドライバはちゃんと入っているようだ。
ググってみると、RS2が適用されている場合にはスクリプトを入れる必要があるようだ。
GPD Winのものがそのまま使えるので、これを入れればよい。
https://mega.nz/#!VUhTWCja!_geaVwKq3tgTkFoFlviUrbPgbhH88WdCAtg3TN88bqk
GPD Pocket お帰りなさい&ケースいらっしゃい
こちらで郷里に返したGPD Pocketだが、一か月ぶりに帰ってきた。
着くまでに一週間、着いてから修理着手まで丸二週間、一日で修理、一日で発送、到着まではわずかに三日だった。
まだ件の"D"キーは若干渋いものの、前に比べればはるかに改善したので良いとしよう。
まだIndieGoGo向けの発送対応で忙しいところに、修理対応してくれたのはありがたい。
修理の内容なのだが・・・
- リイメージしたOSはそのまま
- ディスプレイ側の筐体にあった小さな傷もそのまま
- キーボード脇に貼ったフェルトがテープごとなくなっている、貼った形跡すら残っていない
なので、下側筐体を入れ替えたようだ。
確かに修理前は"D"キーと筐体がこすれるような渋さがあった。
下側筐体とキーマットのクリアランスに問題があったのかもしれない。
さてその一か月の間にケースなぞ買ってみた。
MacBook同様の総アルミの筐体は傷には弱い。
Facebookのユーザページを見ていたところ、Nexus 7の純正スリーブがよく合う、しかも今なら激安、との情報があった。
果たしてGPD Pocketとほぼ同時に到着した。
なかなか良い感じだ。
Google Nexus 7 純正スリーブ 専用ポーチ (ブラック/グレー)
- メディア: Personal Computers
EZ-USBでUSB HID
再びEZ-USB、目標のUSB HIDだ(再び既視感・・・)
DingDong EZ-USB FX2LP CY7C68013A USBコアボード13A-56 EZ-USB FX2LP USB開発モジュールロジックアナライザEEPROM
- 出版社/メーカー: CY7C68013A-Module
- メディア:
- この商品を含むブログを見る
この開発キットに入っている参照実装はCY3684用のものだ。
このキットにはスイッチや7セグLEDがついているのだが、これらはI2Cで接続されているのだ。
これらを扱うものはコンパイルはできるが、今回使っているEZ-USB FX2LP基板に焼くとチップが動作しなくなってしまうのだ。
なので、今回はまずサンプルの"hid_kb"を基板に焼けるようにする。
つまりI2C周りのコードを全て削除してしまう。
サンプルプロジェクトを開く
- (開発キットのルート)\Firmware\hid_kbの下の"hid_kb.Uv2"をダブルクリックして、Keil uVision 2を起動する
I2Cを使用する部分をコメントアウトする
- "periph.c"の"TD_Init()"の以下の表をコメントアウトする
EZUSB_InitI2C(); // Initialize EZ-USB I2C controller
- "periph.c"の"TD_Poll()"の以下の表をコメントアウトする
EZUSB_ReadI2C(BTN_ADDR,0x01,&buttons); // Read button states EZUSB_WriteI2C(LED_ADDR, 0x01, &leds); EZUSB_WaitForEEPROMWrite(LED_ADDR);
こりだけ。
ビルドして、EZ-USB FX2LPの基板に焼いてみる。
デバイスマネージャーでVIDが"0x04B4"、PIDが"0x1005"のキーボードがいれば、そいつです。
さて、これではあまりにも面白くない。
動作も確認できない。
そうだ、思い切ってマウスにしてやろう。
USBデバイスでスクリプターを書き換える
- Keil uVsion 2で"dscr.a51を開く
これはUSBデバイスでスクリプターが8051のアセンブラで書かれたものだ。
下の方にスクロールしていくと、"HIDReportDscr"という、HIDデバイスのでスクリプターがある。
これを以下のように書き換える。
HIDReportDscr: db 05h, 01h ; Usage Page (Generic Desktop), db 09h, 02h ; Usage (Mouse), db 0A1h, 01h ; Collection (Application), db 09h, 01h ; Usage (Pointer), db 0A1h, 00h ; Collection (Physical), db 95h, 03h ; Report Count (3), db 75h, 01h ; Report Size (1), db 05h, 09h ; Usage Page (Buttons), db 19h, 01h ; Usage minimum (1) db 29h, 03h ; Usage maximum (3) db 15h, 00h ; Logical minimum (0), db 25h, 01h ; Logical maximum (1), db 81h, 02h ; Input (Data, Variable, Absolute), (3 button bits) db 95h, 01h ; Report Count (1), db 75h, 05h ; Report Size (5), db 81h, 01h ; Input (Constant) db 75h, 08h ; Report Size (8) db 95h, 02h ; Report Count (2) db 05h, 01h ; Usage Page (Generic Desktop), db 09h, 30h ; Usage (X), db 09h, 31h ; Usage (Y), db 16h, 01h,80h ; Logical Minimum (-127), db 26h, 0ffh,7Fh ; Logical Maximum (+127), db 81h, 06h ; Input (Data, Variable, Relative), (2 position bytes - X & Y) db 0C0h ; End Collection db 0C0h ; End Collection HIDReportDscrEnd:
これでなんとマウスになってしまう。
嘘だと思うなら、ビルドしてフラッシュしてみるがよい。
さっきと同じVID、PIDのマウスがデバイスマネージャーにあるはずだ!
これだけでは面白くないので、右クリックと左クリックも実装しよう。
ボタンを読み出す関数を実装する
- "periph.c"に以下のread_buttonを実装する
BYTE read_buttons (void) { BYTE PortA, Buttons; PortA = IOA; switch (PortA) { case 0xFE: //PA0 is "L" Buttons = 0x01; break; case 0xFD: //PA1 is "L" Buttons = 0x02; break; default: Buttons = 0x00; break; } return Buttons; }
PA0を左クリックに、PA1を右クリックにマッピングした。
どちらのピンもGNDに下げられると、そのボタンを押したと検出するようにする。
ボタンの値をレポートするようにTD_Pollを変更する
- "periph.c"の"TD_Poll()"を以下のように変更する
void TD_Poll(void) // Called repeatedly while the device is idle { if( !(EP1INCS & 0x02) ) // Is the EP1INBUF available, { buttons = read_buttons(); if ((oldbuttons - buttons) != 0) //Change in button state { EP1INBUF[0] = buttons; EP1INBUF[1] = 0x00; // X is 0 EP1INBUF[2] = 0x00; // Y is 0 EP1INBC = 3; } oldbuttons = buttons; } }
後はビルドしてフラッシュすればEZ-USB FX2LP基板がマウスの右クリック、左クリックとして動作する。
EZ-USB FX2LPでLチカ
DingDong EZ-USB FX2LP CY7C68013A USBコアボード13A-56 EZ-USB FX2LP USB開発モジュールロジックアナライザEEPROM
- 出版社/メーカー: CY7C68013A-Module
- メディア:
- この商品を含むブログを見る
早速ウゴウゴルーガ。
まずは定番のLチカだ(あれ、なんだか既視感が・・・)
プロジェクトを作成
- Keil uVision 2を起動する、最近開いたプロジェクトが開く場合には、"Project" -> "Close Project"で閉じる
- "Project" -> "New Project..."を選択する
- 適当なプロジェクトフォルダーを作り、プロジェクトファイルを保存する、筆者は(開発キットのルート)\Firmwareの下に"Blink"フォルダーを作り、プロジェクト名を"Blink"とした
- "Select Device for Target 'Target 17"というウィンドウが開くので、"Cypress Semiconductor" -> "EX-USB FX2"を選択する
ライブラリー、ビルドオプションを設定する
- "Project" -> "Components, Environment and Books"を選択する
- 開いたウィンドウで"Folder Extentions"タブを選択する
- "Use Settings from TOOLS.ini"のチェックボックスを外す
- "BIN"が"C:\Keil\C51\BIN\"となっていることを確認
- "INC"に"(開発キットのルート)\Target\Inc\;C:\Keil\C51\INC\"を追加
- "LIB"に"C:\Keil\C51\LIB\"を追加
- "OK"で設定を抜ける
- "Project" -> "Option for Target'Target 1'"を選択する
- "Output"タブの"Create HEX File"にチェックを入れる
- "B51 Locate"タブの"Use Memory Layout from Target Dialog"のチェックを外し、"Code Range"を0x80に、"Xdata Range"を0x1000にする
- "OK"で設定を抜ける
Lチカを実装
- "File" -> "New..."を選択
- 開いたテキストファイルに以下を実装
#define ALLOCATE_EXTERN #include "fx2.h" #include "fx2regs.h" main() { OEA = 0xFE; // set PA7 to PA1 as output, PA0 as input IOA = 0x00; while(TRUE) { if (IOA & 0x01 == 0x01) // if PA0 is "H" IOA = 0xFF; // set all other A port pins to "H" else IOA = 0x00; // set all other A port pins to "L" } }
- "File" -> "Save"を選択して保存する、筆者はファイル名を"blink.c"とした
- "Project" -> "Components, Environment and Books"を選択する
- "Project Components"タブで、"Add Files"ボタンを押し、上記で保存したファイルを指定して"Add"を押す
ビルド
- "Project" -> "Build Target"を選択
これでCyControl.exeでフラッシュできるFWが出来上がる。
ファームウェアは"プロジェクト名.hex"となる。
早速CyControl.exeで焼いてみる。
EZ-USB FX2LPの開発環境を構築する
さて先日までPIC32の開発をしていたのだが、今さらPIC32では用に足りないことが分かった。
今回はHSのUSBターゲットが必要で、PIC32はFSまでしか対応していないのだ、orz。
ということで仕切り直して、EZ-USBに切り替えた。
筆者は過去にFX2を使ってUSBターゲットデバイスを実装したことがあるので、なーに、簡単簡単。
しかしそこはそれ、忘却曲線は急峻なうえ、この手のものはあちこちに地雷が埋まっている。
なかなか一筋縄では行かなかった。
しかも、PICに比べるとEZ-USBはコミュニティが小さいので、なかなか厄介であった。
まず開発に使うデバイスだが、CypressのFX2LPの開発キットCY3684はなかなかお値段がよろしい。
安いものはないかと物色していると、こんなものを発見した。
DingDong EZ-USB FX2LP CY7C68013A USBコアボード13A-56 EZ-USB FX2LP USB開発モジュールロジックアナライザEEPROM
- 出版社/メーカー: CY7C68013A-Module
- メディア:
- この商品を含むブログを見る
早速購入、PCに接続・・・おや認識しないぞ?
実はこれはSaleaが以前販売していたUSB接続ロジックアナライザーのクローンらしい。
なのでamazonでも"ロジックアナライザ"などと書いてあるのね、納得。
ちなみにそちらに興味がある方はこちらを見てみるとよい。
回路図も入手できた、後人のためにGoogle Driveに保管しておく、https://drive.google.com/open?id=0B2jNhsdZggc5YXBBMnBZYVV6NkE。
果たして、唯一あるジャンパがFW用のE2PROMの接続をしているらしい。
ぶちっとな、とぶっこ抜く。
これで、素のEZ-USB FX2LPとして動作するようになった。
次に開発ツールだが、これはCY3684のものがそのまま使える・・・はずだ。
こちらからダウンロードできる、http://www.cypress.com/file/135301。
これを展開・実行すると、参照実装やマニュアル、ユーティリティー、ドライバからなる開発キットと、Keil uVision 2 IDEがインストールされる。
ジャンパをぶっこ抜いたEX-USB FX2LPボードをつなぐと、ドライバーが・・・導入されない。
慌てずデバイスドライバで見てみるとVIDが0x04B4、PIDが0x8613という見慣れた不明なデバイスがいるはずだ。
これを右クリックして、ドライバの更新をする。
ドライバは、(開発キットのルート)\Drivers\Win8.1\x64の下にいるものがWindows 10 64bit版なら使える。
ドライバが導入されれば、"Cypress FX2LP No EEPROM Device"という見慣れたUSBデバイスが、デバイスマネージャーで見つかるようになる。
動作確認だ。
(開発キットのルート)\Windows Applications\Application Source files\c_sharp\controlcenter\bin\Releaseの"CyControl.exe"を起動する。
昔からあったEZ-USB Control Centerの縮小版だ。
すでにEnumerateされている"Cypress FX2LP No EEPROM Device"が表示されているはずだ。
"Program" -> "FX2" -> "RAM"を選び、ファイルダイアログから(開発キットのルート)\Firmware\Bulksrcの下の"bulksrc.hex"を選択する。
すると先ほどのUSBデバイスが"Cypress FX2LP Sample Device"に化けるはずだ。
これがEZ-USB独特のRe-enumerateと呼ばれるもので、FWをPC経由で更新して、別のデバイスとしてHot Plugさせることができるのだ。
右側のペインの"Data Transfer"を選択し、左側のペインのツリーから"Cypress FX2LP Sample Device" -> "Configuration" -> "Interface 0" -> "Alternate Setting 0" -> "Bulk out endpoint (0x02)"を選んで、"Transfer Data-OUT"を押すと、Endpoint 0x02にバルク転送で512byteの0x00が転送される。
うまく動作していれば、"BULK OUT transfer completed"が表示される。
PIC32でUSB HID
再びPIC32、目標のUSB HIDだ。
Microchip PIC32 Starter Kit DM320001
- 出版社/メーカー: Microchip
- メディア:
- この商品を含むブログを見る
サンプルプロジェクトを開く
サンプルプロジェクトの設定の変更
- "Projects"ペインで、"hid_basic"プロジェクトを右クリックして、"Set as Main Project"を選択
- "Projects"ペインで、"hid_basic"プロジェクトを右クリックして、"Set Configuration" -> "pic32mx_usb_sk3_int_dyn"を選択
これでプロジェクトのデバイスやMHCのBSP情報などが更新される、判れば簡単簡単(これまた1日を要した・・・orz)
MPLAB Harmony Configuratorの設定
- "Tools" -> "Embedded" -> "MPLAB Harmony Configurator"を選択
- "Options" -> "BSP Configuration" -> "Use BSP?"をチェック
- 下に"Select BSP To Use For PIC32MX470F512L"が出るので、サブツリーを開いて、"PIC32MX USB Starter Kit 3"にチェックが入っていることを確認
- 上のセーブボタンを押す
- 上の"Generate Code"ボタンを押す
ビルド
"Production" -> "Build Main Project"を選択
実機に焼く
- PIC32 Starter Kit III(SK3)をPCにつなぐ
- "Run Main Project"ボタンを押す
- フラッシャーの選択画面が出るので、"Microchip Starter Kits" -> "Starter Kits(PKOB)"を選択する
PIC32をUSB HIDとして接続させる
実はここまでの作業では、PIC32に接続しているのではなく、ボードの裏側にフラッシュ、デバッグ用に搭載されているPIC24に接続している。
上記の作業でPIC32のFWが更新され、USB HIDとして動作するようになっているので、接続を変更する。
- PIC32 SK3をPCから外す
- PIC32 SK3からUSB mini Bケーブルを外して、代わりにUSB micro Bケーブルをつける、コネクターは基板裏面にある
初めに基板のPKOBのLEDが点灯し、しばらく経つとPIC32の電源のLEDとLED3が点灯、PCのデバイス認識が終わるとLED2も点灯するはずだ。
PCのデバイスマネージャーで見てみるとVIDが0x04D8、PIDが0x003Fのデバイスが認識されているはずだ。
これがUSB HIDとして認識されたPIC32 SK3だ。
テストソフトの起動
C:\microchip\hamony\v1_11\app\usb\device\hid_basic\binに"GenericHIDSimpleDemo.exe"なるexeファイルがあるので、起動する。
"Connect"ボタンを押すと、PIC32 SK3と接続する。
"Toggle LED"ボタンを押すとLED1とLED2が交互に点く。
SW1を押しながら"Get Pushbutton State"を押すと、その横のラベルが"State: Pressed"となる。
この動作の実装はapp.cに書かれているので、こいつを最初はいじくり倒すのがよいだろう。
PIC32でLチカ
引き続きPIC32。
早速ウゴウゴルーガ。
まずは定番のLチカだ。
プロジェクトを作成
- MPLAB X IDEを起動
- "File" -> "New Project..."を選択
- "Categories"は"Microchip Embedded"、"Project"は"32-bit MPLAB Harmony Project"を選択して"Next"を押す
- "Harmony Path"にインストールパス(デフォルトでは、C:\microchip\hamony\v1_11")を選択
- "Project Location"はデフォルトでも良いが、ここには例題プロジェクトも入っているので、いやな人は適当なフォルダーを選択
- "Project Name"はなんでもよい、今回は"Blink"
- "Target Device"で、PIC32 Starter Kit III (SK3)で使用されているPIC32MX470F512Lを選択
- "Finish"を押す
MPLAB Harmony Configuratorの設定
プロジェクトを作成するとMPLAB Harmony Configuratorが開く。
後で開きたい場合には、"Tools" -> "Embedded" -> "MPLAB Harmony Configurator"を選ぶ。
- "Options" -> "BSP Configuration" -> "Use BSP?"をチェック
- 下に"Select BSP To Use For PIC32MX470F512l"が出るので、サブツリーを開いて、"PIC32MX USB Starter Kit 3"にチェックが入っていることを確認
- 上のセーブボタンを押す
- 上の"Generate Code"ボタンを押す
これでボード特有の設定や、API、変数が定義される、判れば簡単簡単(1日を要した・・・orz)
Lチカを実装
- MPLAB X IDEの"Projects"ペインから"Source Files" -> "app" -> "app.c"を開く
- "APP_Initialize"に以下のコードを追加
BSP_Initialize();
- "APP_Tasks"の "case APP_STATE_INIT:"を以下のように変更
case APP_STATE_INIT: { /* bool appInitialized = true; if (appInitialized) { appData.state = APP_STATE_SERVICE_TASKS; } */ if (BSP_SwitchStateGet( BSP_SWITCH_1 ) == BSP_SWITCH_STATE_PRESSED) BSP_LEDToggle( BSP_LED_1 ); break; }
- 変更を保存
ビルド
"Production" -> "Build Main Project"を選択
実機に焼く
- PIC32 SK3をPCにつなぐ
- "Run Main Project"ボタンを押す
- フラッシャーの選択画面が出るので、"Microchip Starter Kits" -> "Starter Kits(PKOB)"を選択する