N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
<< 音声合成LSIで「オリジナルの音声時計」を作ろう!- その4 カスタマイズ編 | main | 音声合成LSIのCAD用部品ライブラリ >>
MCP2210 DLL用のheaderとlibファイル
■概要
MCP2210はMicrochipのUSB-SPIブリッジです。
これは、WindowsからはHIDデバイスとして認識され、専用ドライバーが不要で、COMポートの選択もいらないので、使い勝手が良さそうです。
また、Microchipから提供される"MCP2210 DLL"を使えば、HID APIを使わずにSPIを操作する感覚でホストのプログラムが書けます。
しかし、残念なことに"MCP2210 DLL"には、headerとlibファイルが付属していません。そこで、DLLから.h/.libを作成したので公開します。


■ダウンロード
mcp2210dll-hdr-lib.zip
(MCP2210DLL-UM.lib, MCP2210DLL-UM.h, msvcp90.dll, msvcr90.dll)

■備考
  • "MCP2210 DLL"のバージョンは Ver. 1.2.0 (MCP2210DLL_2014-10-29.zip)
  • MCP2210DLL-UM.dllのアーキテクチャはx86(Win32)、呼び出し規約は __stdcall
  • ヘッダファイルは、"Using the Unmanaged DLL.pdf"の関数一覧のテキストから抽出しました。
  • namespaceはすべて省略しました。
  • "Using the Unmanaged DLL.pdf"とMCP2210DLL-UM.dllは、下の2つの関数名が違って定義されています。差異は.defファイルで吸収したので、pdfの関数名で呼び出せます。
    "Using the Unmanaged DLL.pdf"       MCP2210DLL-UM.dll
      GetSpiActiveCsValue                        GetSpiCsActiveValue
      GetSpiIdleCsValue                           GetSpiCsIdleValue
  • C++/CLIの変数型の"String^"を使っている以下の関数は省きました。
        GetSelectedDevInfo     EnterAccessPasswd     SetNewPasswd
  • 実行には、"MCP2210 DLL"付属のmsvcp100.dllとmsvcr100.dllは使わず、msvcp90.dllとmsvcr90.dllが必要です。

■使用例
 
#include "stdafx.h"
#include "MCP2210DLL-UM.h"

const UINT32 MCP2210_VID = 0x04D8;   // VID for Microchip Technology Inc.
const UINT32 MCP2210_PID = 0x00DE;   // PID for MCP2210

int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    DllInit(MCP2210_VID,MCP2210_PID);

    // check device connection
    int isConnected = GetConnectionStatus();
    if(isConnected) {
        // GP1->CS    GP0,GP2-GP8->GPIO
        const byte   gpioPinDes[] = {0, 1, 0, 0, 0, 0, 0, 0, 0};
        // GP0->OUT/LOW GP2->OUT/HIGH GP3-GP8->INPUT
        SetAllChipSettings(CURRENT_SETTINGS_ONLY,(byte*)gpioPinDes,
            0xFFFE,0xFFFA,0,0,0);

        // GP0->HIGH GP2->LOW
        SetGpioPinVal(0xFFFB);

        // set sample tx data
        WORD size;    //[byte]
        byte bufTx[64];
        byte bufRx[64];
        size = 16;
        for(i=0;i<size;i++){
            bufTx[i]=(byte)('A'+i);
        }

        // baudRate:1MHz idleCsVal:all-HIGH activeCsVal:onlyGP1-to-LOW SPI:Mode0
        SetAllSpiSettings(CURRENT_SETTINGS_ONLY, 1000000, 0xFFFF, 0xFFFD, 
            0, 0, 0, size, 0);

        // SPI transfer
        TxferSpiData(bufTx, bufRx);

        for(i=0;i<size;i++){
            printf("%x ",bufRx[i]);
        }

        // GP0->LOW GP2->HIGH
        SetGpioPinVal(0xFFFE);

    }

    DllCleanUp();
    return 0;
}



■LINK

「MCP2210 - USB Bridges」Microchip
「Wintab の開発環境構築」


■注意

Microchipより配布されている"MCP2210 Utility"は、信じられないことですが、下記のようにビットの並びが項目によって異なります。



Microchipより配布されている"MCP2210 SPI Terminal"の、GPIO/Chip-Select/DedicatedFuncのセレクタはFakeです。ソースコード見たら、デバイス側へはすべてChip-Selectで送られてます。


 
| その他 | 10:41 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
Arduino Uno
Arduino Uno (JUGEMレビュー »)

AquesTalk pico LSIの評価ボードとして最適
RECOMMEND
Raspberry Pi Model B+ (Plus)
Raspberry Pi Model B+ (Plus) (JUGEMレビュー »)

これと AquesTalk pi で簡単にテキスト音声合成!
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND