ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« PSoCをUSB(HID)デバイスとして接続しデータを受信する | メイン | PSoCをExcelのマクロ機能(VBA)だけでUSB制御する »

PSoCをUSB(HID)デバイスとして接続しデータを送受信する





psoc_usb_txrx_01.gif
前回の「PSoCをUSB(HID)デバイスとして接続しデータを受信する」ではPSoCからUSB経由でデータを受信した。ドライバーはWindows標準のものが自動インストールされ、EXEファイル1つで動作するものだった。今回は前回のプロジェクトをベースにPCからPSoCへデータを送信する機能を付加する。

psoc_usb_txrx_02.gif
前回のプロジェクトを開いたら「View」メニューの「Device Editor」を選択して設定画面に切り替える。

psoc_usb_txrx_03.gif
そして「USBFS_1」を右クリックして現れたメニューから「USB Setup Wizard」を選択する。

psoc_usb_txrx_04.gif
ここではUSBプロトコル関連の設定をする。前回はPSoCからPCへの送信のみだったが、今回はPCからPSoCへの送信も行う。そのための設定をする。
USBではデータの送信先や受信先に対して「エンドポイント」が割り当てられる。PSoCの「USBFS」では最大4つのエンドポイントを扱える。まずこのエンドポイントを追加する。
「Interface Descriptor」の右側にある「Add Endpoint」をクリックする。

psoc_usb_txrx_05.gif
するとエンドポイントが新たに追加される。ここで「Endpoint Number」を「EP2」に、「Direction」を「OUT」にする。
「Direction」(方向)はホスト、つまりPC側を基準に考える。ここでは「OUT」(出力)に設定したが、これは「PCからデータを出力(=PSoCで受信)」という意味になる。

psoc_usb_txrx_06.gif
次にPCからPSoCへ送信するデータ書式の設定をする。
「HID Report Descriptor Root」の中にある「Collection」を開き、「End Collection」の1つ上の行にあたる「Input」の行の「Insert HID Item」をクリックする。

psoc_usb_txrx_07.gif
すると行が1つ増える。ここで項目名から「Usage Minimum」を選択する。

psoc_usb_txrx_08.gif
これで「Usage Minimum」という項目が追加された。さらに「Usage Minimum 18」というリンクをクリックする。

psoc_usb_txrx_09.gif
そして「Size」を「1」に、「Data[0]」を「01」に設定する。

psoc_usb_txrx_10.gif
すると「Usage Minimum 18」というリンクだったものが「Usage Minimum 19 01」に変わった。
さらに新しくできた行の「Insert HID Item」をクリックする。

psoc_usb_txrx_11.gif
今度は「Usage Maximum」を選択する。「Minimum」ではないので注意しよう。

psoc_usb_txrx_12.gif
そして「Usage Maximum 28」のリンクをクリックして...

psoc_usb_txrx_13.gif
「Size」を「1」に、「Data[0]」を「02」に設定する。すると「Usage Maximum 28」が「Usage Maximum 29 02」に変わる。

psoc_usb_txrx_14.gif
同様に
「Logicacl Minimum」は「Size」を「1」に、「Data[0]」を「80」に、
「Logicacl Maximum」は「Size」を「1」に、「Data[0]」を「7F」に、
「Report Size」は「Size」を「1」に、「Data[0]」を「08」に、
「Report Count」は「Size」を「1」に、「Data[0]」を「04」に、
「Output」は「Size」を「1」に、「Data[0]」を「02」に設定する。

これらの設定の意味は"0x80~0x7F(Logicacl Minimum~Maximum)の範囲でデータサイズが8ビット(Report Size)の数値を4つ(Report Count)、出力用途(Output)として確保する"ということになる。これらの項目の意味はHIDの規格書に掲載されている。

psoc_usb_txrx_15.gif
USB Setup Wizardによる設定が済んだらソースコードの編集をする。「View」メニューの「Application Editor」を選択して編集画面に切り替える。

psoc_usb_txrx_16.gif
今回はPSoCが受信したデータをそのままPCへ送信する処理とした。ただし、PSoCの受信データは先に設定した通り4バイトだが、PSoCの送信データはUSBマウスと同じ3ビット+2バイト(3つのボタンとXYの移動量)のデータのため、PCからPSoCへ送信されたデータのうち最後の1バイトは利用されない。


//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules

void main()
{
int i;
BYTE pData[] = {0,0,0,0,0};

M8C_EnableGInt;
USBFS_1_Start(0,USB_5V_OPERATION);

while(!USBFS_1_bGetConfiguration());
USBFS_1_LoadInEP(1,pData,3,USB_NO_TOGGLE);
USBFS_1_EnableOutEP(2);

while(1)
{
if(USBFS_1_bGetEPAckState(1))
{
USBFS_1_LoadInEP(1,pData,3,USB_TOGGLE);
}
if(USBFS_1_bGetEPAckState(2))
{
USBFS_1_bReadOutEP(2,pData,4);
USBFS_1_EnableOutEP(2);
}
}
}





psoc_usb_txrx_17.gif
これでPSoCへ書き込み、USBケーブルで接続する。そして前回作成したPC側のクライアントソフトを起動する(前回のページからダウンロードできます)。
「ベンダーID」と「デバイスID」をともに「FFFF」として接続する。するとPSoCと接続できた。PSoCからPCへの送信データサイズは4バイト、PCからPSoCへの送信データサイズは5バイトとなっている。1バイト大きく表示されているが、これはHIDの仕様として1バイト目をレポートID(0x00固定)としているためだ。

psoc_usb_txrx_18.gif
送信データを5バイト用意して「送信」ボタンを押す。するとデータがPSoCへ送信される。

psoc_usb_txrx_19.gif
「受信」ボタンを押してPSoCから送られてきたデータを受信すると、先ほど送信したのと同じデータ(ただし末尾1バイトが切れているデータ)が表示された。





トラックバック

» PSoCをExcelのマクロ機能(VBA)だけでUSB制御する 送信元 dinop.com
前回と前々回はUSBを内蔵したPSoC「CY8C24794-24FLXI」をヒ... [詳しくはこちら]

トラックバック日時: 2007年06月24日 22:54





Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報