Lazurite 日本語リファレンス


SPI(Serial Peripheral Interface)


概要

SPIは様々なマイコンの周辺ICによってサポートされている同期式シリアル通信の一つです。 Lazuriteでは、マイコン ML620Q504がマスターとなり、周辺ICはスレーブとして動作します。

本関数を使用するためには、"プロジェクト"メニューの"ライブラリを使用する"から、SPIのライブラリを有効にしてください。

Lazurite Sub-GHzで使用しているマイコン ML620Q504は2系統のSPIを搭載しています。SPIはピン番号の11ピン(MOSI)、12ピン(MISO)、13ピン(SCLK)で使用することができます。
もう一系統は、SPI0というライブラリ群で、無線モジュールBP3596を制御するために使用しています。

 

◆SPIによる周辺機器との接続方法

SPIでは次の様に周辺機器を接続することができます。

MOSIは、Master Out / Slave Inで、LazuriteがPeripheral ICに信号を送信します。
MISOは、Master In / Slave Outで、Peripheral ICが出力する信号をLazuriteが受信します。
SCLKは、Lazuriteが出力する信号で、信号を伝送するためのクロックです。
SSは、Peripheral ICを識別するための信号として使用します。

 

◆シリアル転送のモード SPI.setDataMode

シリアル転送タイミングは、モードの設定によって次の4種類に対応しています。Peripheral ICのデータシートに記載されているタイミングに合わせて、SPI.setDataMode関数で設定してください。また、この設定はSPI.begin()でSPIの動作を開始する前に設定する必要があります。

 

◆ビットオーダー  SPI.setBitOrder

SPI.transferで送受信する信号を、MSB firstで送信するかLSB firstか設定するコマンドです。

 

        ◆クロックの分周比 SPI.ClockDivider

       SPIで送信するクロック SCLKの分周比を設定します。
       Lazuriteのメインクロックは16MHzなので、それに合わせてSCLKの分周比を設定してください。

設定値

SCLKの周波数

SPI_CLOCK_DIV2

8MHz

SPI_CLOCK_DIV4

4MHz

SPI_CLOCK_DIV8

2MHz

SPI_CLOCK_DIV16

1MHz

SPI_CLOCK_DIV32

500kHz

SPI_CLOCK_DIV64

250kHz

SPI_CLOCK_DIV128

125kHz

 

関数

SPI.begin(); SPIの初期化を行います。
  unsigned char SPI.transfer(data) SPIのデータ Read/Writeを行います。
  SPI.setBitOrder(mode) MSBFIRST, LSBFIRSTを指定します。
  SPI.setDataMode(mode) SPIのMODE0~MODE3を指定するコマンドです。
  SPI.setClockDivider(ckdiv); SCLKのクロックの分周比を指定します。
+ SPI.end(); SPIの終了を行います。

         *    Arduinoと差異がある関数です。
        +    Arduinoになく、Lazuriteにある関数です。 

 

サンプル

Laurite Sub-GHzでは、BP3596モジュールに搭載されているML7395を制御するプログラムで使用しています。

下記は、LazuriteIDE\hardware\lazurite_subghz\sub_ghz\CTI\hwif\hal_lazurite.cのプログラムです。

HAL_SPI_setup(void)は、SPIブロックを初期化しています。
HAL_SPI_transferは、wdataのポインタが示すデータからsizeバイトの値をMOSIから転送し、MISOから受信したデータをrdataに格納するプログラムです。

driver_digitalWrite関数は、Arduino互換端子で公開されていない端子を使用するための関数で、機能はdigitalWriteと同じです。