マイクロテクニカ製品サポートFAQ
[一覧] [1つ前に戻る] [マニュアル及び各種ダウンロードページへ]
【uALFAT(参考資料)】SPI通信での通信事例
【最初にお読みください】

uALFATチップセットは当方では直接技術的なサポートを行っていない製品です。技術サポートは全て開発元である米GHI社にて行っております。当方にお問い合わせ頂いてもお答え致しかねます。本製品は開発元から提供される各種資料を参考にしてご自身で開発ができる技術者向けの製品です。
本ページの資料は当方で確認した事例を報告するものであり、技術サポートを行うものではありません。

--------------------------------------------

■uALFATのSPI通信内容について

SPIのデータフローは全二重通信です。uALFATはスレーブデバイスとして動作します。マスター側がクロックを発行します。

SPIでは処理毎にマスターとスレーブの間でデータが交換されます。uALFATにコマンドを送りたい時はコマンドを送ればよいですが、コマンドを送りたくない時、すなわちデータだけを読む必要がある間は次の2つの番号をフロー制御に使用します。

OxFFはNDT(No Data Token)と呼ばれ、0xFEはHDT(Half Data Token)と呼びます。

uALFATはSPI通信でNDT(0xFF)を検出した時はいつでもこれを無視します。これは、ホスト側がデータ送信なしにuALFATからデータを読むことに利用できます。(データをuALFATから読む時のダミーデータとして使用できます。)

もちろん、NDT(0xFF)を送信したときuALFATはこれを無視します。

あなたが0〜0xFDの値を使うならばいつでも使えます。ASCIIコードの通信であれば、ほとんどの場合でこれはよい方法です。
もし、0xFFをuALFATにデータとして送りたいならば、HDT(0xFE)に続いて0〜0xFDの値を送る必要があります。するとuALFATはデータとしての0xFFとして認識し、無視しません。もし、0xFEを送信したい場合は、HDT(0xFE)を2回送信します。

uALFATはデータがない時は、0xFF(NDT)を送信します。

・SCKのアイドルはH
・クロックはフルパワーモード時で8MHz以下
・データはMSB先頭
・データは立ち上がりエッジでラッチされる

■SPI通信時の波形

使用するピンはSPI_SSEL,SPI_SCK,SPI_MISO,SPI_MOSIの4線です。DATARDY,BUSYは使用せずに上記のHDT,NDTで対応可能です。当方で動作確認した際の波形データを下記に示します。

ホスト側から0x56,0x0D(Vコマンド)送信して、バージョン情報を繰り返し取得した場合の例です。

http://www.microtechnica.tv/support/etc/ualfat_spi_01.jpg

http://www.microtechnica.tv/support/etc/ualfat_spi_02.jpg

下図はuALFAT側から送信するデータがない時に、0xFFを受信した場合にuALFATが0xFFで応答している例です。

http://www.microtechnica.tv/support/etc/ualfat_spi_03.jpg

下図はuALFAT側が0x6E("n")を出力した時の例です。ホスト側はダミーデータとして0xFFを送信しています。

http://www.microtechnica.tv/support/etc/ualfat_spi_04.jpg

下図はuALFATが文字の"0"を出力する場合の例です。ホスト側から送りたいデータはないので、ホスト側からは0xFFを送信しています。uALFATからは0x30がホストに送られていることが分かります。
なお下図のCH0はSCK,CH1はMISO,CH2はMOSI,CH3はSSEL線です。

http://www.microtechnica.tv/support/etc/ualfat_spi_05.jpg


※通信内容はSPI通信解析機能のついてロジアナ等でMISO、MOSI信号を観察することで確認できます。

■SPI通信時プログラム例

SPI通信は一般的な4線式通信を使用しています。下記にPICマイコン用のCコンパイラmikroCで記述した例を紹介します。下記のプログラムは単に0xFFを繰り返しホスト側(PIC側)出力し、uALFATからの戻り値をUART(RS-232C)に変換して出力する例です。
変数bufferにuALFATからSPI通信で受信したデータが入ります。
本プログラムでuALFATの電源投入後及びリセット後にバナーを受信します。

※本プログラムは0xFFしか送信していませんが、ここに任意のコマンドとCRを入れれば、uALFATが対応した動作をします。例えば0x56と0x0Dを送信すれば、バージョン情報が返ります。

-----------------------------------------

sbit Chip_Select at RC0_bit;
sbit Chip_Select_Direction at TRISC0_bit;

void init(){

 ANSEL = 0;
 ANSELH = 0;
 SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4   _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH ,_SPI_LOW_2_HIGH);
 UART1_Init(9600);

 Chip_Select = 1;
 Chip_Select_Direction = 0;
}

void main() {

 unsigned short buffer;

 init();

 while(1){
   Chip_Select = 0;
   buffer = SPI1_Read(0xFF);
   Uart1_write(buffer);
   Chip_Select = 1;
   delay_ms(50);
 }
}

※当方ではuALFATの技術的なお問い合わせや上記のプログラム等に関するお問い合わせについては対応致しておりません。上記プログラム例は一例ですので実際のご使用環境に合わせてプログラムをお作り下さい。
オリジナル - FAQみたいです - 猫でいいです