USB-SPI変換ボード[CLICK-SPI]はマイクロチップ社のUSB-SPI変換IC、MCP2210を搭載したボードです。USB接続したパソコンではHIDデバイスとして認識され、専用ユーティリティーを使ってSPIデータの送受信が可能です。
そのほかAndroid OS用のターミナルやDLL、Visual Studioのソースコードもマイクロチップ社のサイトからダウンロード可能です。
■データシート、ソフトウエア等のダウンロード
・マイクロチップ社のMCP2210のページ
https://www.microchip.com/wwwproducts/en/MCP2210
※データシート及びツール類は上記ページの””Documnet”タブからダウンロードできます。
■本製品のピンアサイン及び回路図
※MOSIとMISOはそれぞれMCP2210のピン番号が( )内に記載されています。
※回路図はクリックすると拡大できます。
※SDOピン(5ピン)は本ボードから信号が出力されるピンです。SDI(6ピン) は本ボードへ信号を入力するピンです。
電源は3.3Vか5Vが利用可能です。設定は本体”J1″のジャンパーによって行います。デフォルトでは3.3Vになっています。USBポートから給電している場合本体内のレギュレータで3.3Vに降圧されます。なおUSB給電で利用するか、外部給電で利用するかはユーティリティーソフトを使ってMCP2110の設定をする必要があります。デフォルトではUSB給電が有効になっています。外部給電をする場合には必ず切り替えてから使用してください。
1~3ピン、15、16ピンはGPIOピンと接続されており汎用IOピンとして利用可能です。GPIO0はCSピンとして使用しますが、複数台のSPIデバイスを接続する場合には他のGPIOをCSピンとして利用します。
■基本的な使い方
本機はWindowパソコンとUSB接続するとHIDデバイスとして認識されます。デバイスドライバーは必要ありません。
本体の各種設定はMCP2210ユーティリティーソフトウエアで行えます。
通信のサンプルはVisual Sutdioで作られたソースを利用します。”MCP2210_SpiTerminal-v1.0″フォルダを開き、”MCP2210_SPI_Terminal.exe”を実行してください。
主に操作する部分は上図の赤枠内です。
まずCSピンの状態を設定します。GP0ピンをCSピンとする場合に設定します。モードをChip-Selectとして、アイドル状態のロジック、アクティブ時のロジックをそれぞれ設定します。アイドル時がHで、イネーブル時がLならば上図の通りの設定です。その他のピンについてはGPIO(汎用IO)にしておきます。
Bit-rateはクロック周波数です。モード0と2以外の時は1000000を設定してください。
※モード1と3の時に100000未満に設定するとハングアップすることがマイクロチップ社の公式フォーラムで報告されています。
https://www.microchip.com/forums/m675830.aspx
続いてモードです。SPIのモードを0~3で指定してください。(SPIモードについては本ページ下部で説明していますのでご参照ください。)
Number of bytes to transfer で転送するデータのバイト数を指定します。
送信するデータ、すなわち本機のMOSIから出力されるデータはTXのボックスに入力します。16進数表記にしたい場合には、HEX Modeにチェックを入れてください。
Tx Dataのボックスに送信したい値を入力していきます。
設定と入力が完了したら、Transfer SPI Data ボタンをクリックします。
データがMOSIピンから出力され、同時にMISOから読み取られたデータが表示されます。
■データの確認
データの送受信を確認するにはオシロスコープ又はロジックアナライザが必須です。
これらのツールをお持ちでない場合正しいデータが送受信されているかどうか視認することはできず開発や実験、学習は不可能です。
データの確認は必ず上記ツールを使って視認してください。
下図はモード3でデータ02hと00を本機のMOSIから出力させた時の波形データです。MISOの値も正しく取得できています。
※モード1及び3の場合にはビットレートの設定値を100000以上に設定してください。
■ターミナルソフトを作る場合
ターミナルソフトはVisual Studio のVisual BASIC のソースコードがマイクロチップ社よりリリースされています。このソースコードを元にご自分でターミナルソフト等、本製品と通信するアプリケーションを開発することができます。
必要なDLLは同梱されていますが、マイクロチップ社のページからDLLだけダウンロードすることもできます。
■技術的な質問等について
本製品はマイクロチップ社のワンチップUSB-SPI通信ICのMCP2210を使ったボードです。機能はすべてMCP2210によって実現されていますので、技術的なご質問についてはマイクロチップ社にお問い合わせをお願い致します。当方では技術的なご質問は受け付けておりません。
まずマイクロチップ社の商品ページでデータシート等をご確認ください。
https://www.microchip.com/wwwproducts/en/MCP2210
続いてマイクロチップ社の公式フォーラムで似たような事例がないかどうかを検索してください。
https://www.microchip.com/forums/Forums
右上の検索ボックスに”MCP2210″と入力すると関連する記事が表示されますのでご確認ください。もし過去に期待した事例の報告がない場合には記事を新規に投稿して世界中のユーザーから回答を得られます。記事の新規投稿にはユーザー登録が必要です。
もしマイクロチップ社の技術サポートにお問い合わせの場合には下記のページより行ってください。
https://www.microchip.co.jp/support/tech-help.php
■SPI通信の基礎(※より詳しい解説は書籍等をお読みください)
①SPI通信の信号線
SPI(Serial Peripheral Interface)シリアル通信規格の1つで同期式、全二重のインターフェイスです。マイコンとセンサーやメモリー等の接続インターフェイスとしてよく利用されます。
SPI通信はマスタースレーブ型で、片方がマスター、もう一方がスレーブと役割が決められます。SPIマスタ又はSPIスレーブからのデータは、クロックの立上がり又は立下がりエッジによって同期がとられます。SPI通信の特徴としてはマスタとスレーブが同時にデータを送信することが可能な点です。SPI通信には3線式と4線式のものがあります。ここでは4線について解説します。
代表的な信号線は4線で
・CS : チップセレクト
・SCLK : クロック
・MOSI : マスターアウト、スレーブイン
・MISO : マスターイン、スレーブアウト
クロック信号を作る方がSPIマスタ側になります。つまり通信の主導権は常にマスターが握っているということになります。データはこのクロックに同期して行われます。SPI通信は1つのマスターに複数のスレーブを接続することができます。
複数のスレーブデバイスを接続している場合にはチップセレクト信号(CS)を使うことになります。このCS線はアクティブローです。通信したいデバイスのCS線だけLowにします。マスター側が通信対象から外したいスレーブデバイスに対してはCS線をHighにします。複数のスレーブデバイスと接続する場合には、その台数分のCS信号線が必要となります。
MISOとMOSIはデータ送受信用の信号線です。MOSIはマスターが出力してスレーブが入力となる信号、MISOはマスターが入力側でスレーブがデータを出力する側となる信号です。
②データの送受信
通信を開始する場合にはSPIマスターのデバイスが、通信相手(SPIスレーブ)のCS線をローにしてイネーブルにすることから始まります。
マスターデバイスはクロックを送信します。SPI通信はは全二重、すなわち送信と受信が同時に行われる規格なので、マスタとスレーブはそれぞれMOSIとMISOによって同時にデータを送信できます。
MOSI信号線はマスターが出力側です。マスター側は送信したいデータをシフトさせて出力するとともにMISO信号線のデータをサンプリングします。このタイミングはクロック信号に同期します。クロックの立ち上がりでサンプリングするか立ち下がりでするのかは使用者が決めたり、使用するデバイスによって決まっています。また一度に送受信するデータのサイズ(ビット数)もデバイスによって決まっています。
③モードを決めるクロックの極性と位相
SPI通信ではマスタ側に主導権がありますが、マスターはクロックの極性と位相を選択できます。
③-1 クロック極性=CPOL
クロックの極性をCPOL(Clock POLarity)といいます。これはアイドル状態におけるクロックパルスが正極性(CPOL=0)か、負極性(CPOL=1)かを示すものです。
アイドル状態というのは送信を開始するためにCSがハイからローに変わるまでの間と、送信を終了するためにCSがローからハイに変わるまでの間のことをいいます。
クロックが正極性(CPOL=0)の場合、アイドル時はSCLKはLに固定、通信時はHのクロックパルスを生成します。
クロックが負極性(CPOL=1)の場合、アイドル時はSCLKはHに固定、通信時はLのクロックパルスを生成します。
③-2 クロック位相=CPHAとモード
もう1つの要素は位相です。位相をCPHA(Clock PHAse)といいます。位相はデータのサンプリング及びシフトについて、クロックパルスの最初で信号をサンプルする場合をCPHA=0、クロックパルスの最後でサンプルする場合をCHPA=1とします。
CPHA=0の場合にはクロックパルスの最初の部分でMOSIやMISOの信号がサンプリングされます。CPOL=0ならば最初のクロックパルスの立ち上がり時に、CPOL=1ならば最初の立ち下がり時にサンプリングされます。MISO,MOSIのデータはクロックパルスの最後の部分で次のビットに切り替わります。
CPHA=1の場合にはクロックパルスの最後の部分でMOSIやMISOの信号がサンプリングされます。CPOL=0ならば最後のクロックパルスの立ち下がり時に、CPOL=1ならば最後の立ち上がり時にサンプリングされます。MISO,MOSIのデータはクロックパルスの最初の部分で次のビットに切り替わります。
これらCPOLとCPHAの組み合わせで4種類あります。これらをモードと呼んでモード0~3までが規定されています。
どのモードで通信するかはSPIスレーブのデバイスによって決まります。スレーブ側の仕様に合わせてマスター側は通信モードを設定する必要があります。