Community Translation - Interfacing Multiple SPI Slaves with FX3/CX3/FX3S - KBA229105

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
keni_4440091
Level 7
Level 7
500 replies posted 100 solutions authored 50 solutions authored

Hi

I want to translate KBA229105, please confirm to my work.

Regards,

Nino

0 Likes
2 Replies
AikoO_51
Moderator
Moderator
Moderator
100 sign-ins First question asked 50 solutions authored

Hi Nino-san,

I confirmed the KBA.

Please work to do.

Regards,

Aiko

Aiko Ohtaka
Infineon Technologies
0 Likes

FX3/CX3/FX3Sとの多重SPIインターフェース- KBA229105

バージョン 2

ChaitanyaV_61 2019/12/16 2:13 に作成。ChaitanyaV_61 2019/12/16 2:19 に変更。

Author: HemanthR_06          Version: **

質問:

FX3とどのようにして多重SPIインターフェースを行うのか?

回答:

下記のパスで利用可能な規定SDK例のUsbSpiRegModeは、一つのSPIスレーブでのみのインターフェースをサポートします。これは複数のスレーブがインターフェースする際のアプリケーションには不適切となるかもしれません。

ファームウェア例のパス:FX3_Installation_path\EZ-USB
FX3 SDK\1.3\firmware\serialif_examples\cyfxusbspiregmode

この図は複数のSPIスレーブ(2つのスレーブ)で動作するFX3の設定方法を示しています。FX32つのスレーブ間のソフトウェア制御SSN(スレーブセレクト-アクティブlow)ラインとしてFX3 GPIOを使用できます。図1に本ユースケースのブロック図を示します。

pastedImage_1.png

1FX3と多重SPIスレーブのインターフェース

データ転送フロー:

  1.  SPIスレーブ1SSNラインとしてGPIO[33]と言う、シンプルなGPIOを設定します; SPIスレーブ2SSNラインとしてGPIO[34]と言う、もう一つの簡単なGPIOを設定します。

  2  マスターがスレーブと通信する時は常にこれらのステップに従って下さい:

    • CyU3PGpioSetValue(GPIO_NUMBER,
      CyFalse)
      を使用してスレーブセレクトGPIOlow出力して下さい。
    • SPIデータを送/受信して下さい。
    • CyU3PGpioSetValue(GPIO_NUMBER,
      CyTrue)
      を使用してスレーブセレクトGPIOhigh出力して下さい。

ファームウェア変更:

  1. ソフトウェアスレーブ選択ラインとして使用する2つのGPIOを定義します。

#define GPIO_SSN1 (33)  

#define GPIO_SSN2 (34)

  1. ファームウェアのGPIOブロックを初期化し、下記のようにソフトウェアスレーブセレクト機能として使用される、簡単なGPIOとして2つのGPIOを設定します:

    /* Configure GPIO 33 as output(GPIO_SSN1). */ 

gpioConfig.outValue = CyTrue; 

gpioConfig.inputEn = CyFalse; 

gpioConfig.driveLowEn = CyTrue; 

gpioConfig.driveHighEn = CyTrue; 

gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

 

apiRetStatus = CyU3PGpioSetSimpleConfig(GPIO_SSN1, &gpioConfig); 

if (apiRetStatus != CY_U3P_SUCCESS)  

{

/* Error handling */

CyU3PDebugPrint (4, "CyU3PGpioSetSimpleConfig for GPIO Id %d failed, error code = %d\n",

GPIO_SSN1, apiRetStatus);

CyFxAppErrorHandler(apiRetStatus);   

}

  

/* Configure GPIO 34 as output(GPIO_SSN2) */ 

gpioConfig.outValue = CyTrue; 

gpioConfig.inputEn = CyFalse; 

gpioConfig.driveLowEn = CyTrue; 

gpioConfig.driveHighEn = CyTrue; 

gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

 

apiRetStatus = CyU3PGpioSetSimpleConfig(GPIO_SSN2, &gpioConfig);    

if (apiRetStatus != CY_U3P_SUCCESS)  

      {

          /* Error handling */

CyU3PDebugPrint (4, "CyU3PGpioSetSimpleConfig for GPIO Id %d failed, error code = %d\n",

GPIO_SSN1, apiRetStatus);

CyFxAppErrorHandler(apiRetStatus);

     }  

          }


  3. SPI初期化ブロックで、下記を付加します:

     a.  spiConfig.ssnCtrl = CY_U3P_SPI_SSN_CTRL_FW; and

     b.  spiConfig.cpol = CyTrue;

     これはファームウェアを使って設定されるスレーブセレクトを有効にします(アクティブlow極性のソフトウェア-制御SSNライン)。

  4. ソフトウェア-制御SSNラインを使ったデータ転送のために、下記を行って下さい:

/* For slave 1*/

/* Drive GPIO low- GPIO_SSN1*/

CyU3PGpioSimpleSetValue (GPIO_SSN1, CyFalse);

/* Send or Receive data*/            

                            status = CyU3PSpiTransmitWords (location, 4);         

                            if (status != CY_U3P_SUCCESS)

                            {

CyU3PDebugPrint (2, "SPI WRITE command failed\r\n");

/* drive GPIO high - GPIO_SSN1*/

CyU3PGpioSimpleSetValue (GPIO_SSN1, CyTrue);

return status;

                            }

                status = CyU3PSpiTransmitWords (buffer, glSpiPageSize);

              if (status != CY_U3P_SUCCESS)

                            {

CyU3PGpioSimpleSetValue (GPIO_SSN1, CyTrue);

return status;

                            }

/* Drive GPIO high - GPIO_SSN1*/

CyU3PGpioSimpleSetValue (GPIO_SSN1, CyTrue);              

上記プロセスは前述のようにGPIをアサートおよびデアサートすることで、CyU3PSpiReceiveWords()APIを使用するのと同様に、スレーブからデータを読むために使用されます。

上記の断片コードはGPIO_SSN1の代わりにGPIO_SSN2を使用してスレーブ2で使用されるために変更可能です。

ソフトウェア-制御SSNラインを使用したFX32つのスレーブをインターフェースするために、上記変更を加えたUsbSpiRegMode例を使用できます。

注意:アプリケーションで更に多くのスレーブが必要となる場合、要求されるソフトウェア-制御SSNラインはスレーブの数と等しくしなくてはいけません。                                 

121 閲覧 カテゴリ: USB: SuperSpeed Peripherals タグ: spi, fx3, ss_usb, spi-ssn, mutiple slaves

0 Likes