MWSDK(TWELITE SDK)
MONO WIRELESS INC.
MWSDK
MWSDK
  • TWELITE SDK (MWSDK) マニュアル
  • はじめに
    • TWELITE SDK 利用規定
    • サポート、対応
    • モノワイヤレスソフトウェア使用許諾書
    • TWELITE SDKの構成
  • 最新版の取得
    • TWELITE SDK 改版履歴
  • TWELITE SDKの使用法
    • TWELITE SDKのインストール
    • VSCode での利用
    • フォルダ構成
    • コマンドラインでのビルド方法
    • ビルド定義について
      • Makefile について
      • Version.mk について
      • binファイル命名則
    • ファームウェア書換
      • ファームウェア書換用配線
      • tweterm.py
  • TWELIET NET API 解説
    • 用語
    • TWELITE NET ライブラリ構造
    • TWENET 動作フロー
      • 始動フロー
      • メインループフロー
      • 無線関連フロー
      • ハードウェアフロー
      • ユーザ定義イベント処理関数フロー
    • ソースコードの構造
    • モジュール
    • 無線パケット
      • パケットの最大長
      • アドレスの指定
      • アプリケーションID
    • ネットワークについて
      • 単純ネット
        • 送信
        • 受信
      • 中継ネット
        • 親機の実装
        • 中継器の実装
        • 子機の実装 (MININODES)
        • NBビーコン方式の接続
        • 中継ネットのアドレス
        • 上位アドレスを固定した静的中継
  • TWELITE NET API リファレンス
    • コールバック関数
      • cbAppColdStart()
      • cbAppWarmStart()
      • cbToCoNet_vMain()
      • cbToCoNet_vRxEvent()
      • cbToCoNet_vTxEvent()
      • cbToCoNet_vNwkEvent()
      • cbToCoNet_vHwEvent()
      • cbToCoNet_u8HwInt()
    • TWELITE NET関数
      • ToCoNet_vMacStart()
      • ToCoNet_bMacTxReq()
      • ToCoNet_u32GetSerial()
      • ToCoNet_u32GetRand()
      • ToCoNet_vSleep()
      • ToCoNet_vDebugInit()
      • ToCoNet_vDebugLevel()
      • ToCoNet_u32GetVersion()
      • ToCoNet_bRegisterAesKey()
      • ToCoNet_vRfConfig()
      • ToCoNet_vChConfig()
      • ToCoNet_Tx_vProcessEventQueue()
      • ToCoNet_u16RcCalib()
    • 中継ネット API
      • functions
        • ToCoNet_Nwk_bInit()
        • ToCoNet_Nwk_bStart()
        • ToCoNet_Nwk_bPause()
        • ToCoNet_Nwk_bResume()
        • ToCoNet_Nwk_bTx()
      • Structure
        • tsTxDataApp (中継ネット)
        • tsRxDataApp (中継ネット)
        • tsToCoNet_Nwk_Context
      • LayerTree ネット
        • ToCoNet_NwkLyTr_psConfig()
        • ToCoNet_NwkLyTr_psConfig_MiniNodes()
        • tsToCoNet_NwkLyTr_Context
    • 型 typedef, よく使うマクロ
    • 構造体
      • sToCoNet_AppContext
      • tsRxDataApp
      • tsTxDataApp
    • TWELITE NET マクロ
      • ToCoNet_REG_MOD_ALL()
      • utils.h
    • ユーザ定義イベント処理関数
      • ステート(状態)
      • イベント
      • ToCoNet_Event API
        • ToCoNet_Event_Register_State_Machine()
        • ToCoNet_Event_Process()
        • ToCoNet_Event_SetState()
        • ToCoNet_Event_vKeepStateOnRamHoldSleep()
        • ToCoNet_Event_u32TickFrNewState()
    • モジュール ライブラリ
      • ENERGY SCAN
      • NB SCAN
    • PRSEV ライブラリ
    • グローバル変数
      • uint32 u32TickCount_ms
      • sToCoNet_AppContext (静的変数)
    • PANIC
  • HW API リファレンス
    • ペリフェラル
      • ADC
        • adc.c
      • DIO
      • TickTimer
      • UART
        • SERIAL ライブラリ
          • SERIAL_vInit()
          • SERIAL_vInitEx()
          • SERIAL_bRxQueueEmpty()
          • SERIAL_i16RxChar()
          • SERIAL_vFlush()
          • tsSerialPortSetup
          • tsUartOpt
        • fprintf ライブラリ
          • vfPrintf()
          • vPutChar()
          • tsFILE
      • Timer
        • Timerライブラリ
          • vTimerConfig()
          • vTimerStart()
          • vTimerStop()
          • vTimerDisable()
          • tsTimerContext
      • WakeTimer
      • I2C
      • SPI
    • Flash, EEPROM
      • EEPROM
      • Flash
  • Utils リファレンス、他
    • ByteQueue
    • u8CCITT8()
    • SPRINTFライブラリ
    • BTMライブラリ(連照式 DIO 入力 )
GitBook提供
このページ内
  • 主要関数
  • vAHI_SpiConfigure()
  • vAHI_SpiSelect()
  • vAHI_SpiStartTransfer()
  • bAHI_SpiPollBusy()
  • u32AHI_SpiReadTransfer32()
  1. HW API リファレンス
  2. ペリフェラル

SPI

SPIバスはセンサーやメモリデバイス等の読み書きに利用されます。I2C に比べ使用するピン数が多いものの、高速な転送が必要なデバイスによく使用されます。

Samp_SPI サンプルを参考にしてください。

SPIバスを利用する場合、SPI セレクトピンを必要なデバイス分だけ確保されます。ピンは SEISEL0 のピンから順に割り当てられます。

以下に初期化と読み書きの例を挙げます。SPIでは、書き込みと読み出しを同時に行うこともできます。

センサーでのデータ取得時に一般的な例として、コマンド送信して続いて結果を得るという手続きを挙げます。

  1. SPIの初期化(デバイス使用開始)

  2. SPI のセレクトピンの有効化

  3. SPI 転送1 (8ビット)、送信を目的とします。

  4. SPI 転送2 (16ビット)、受信を目的とします。

各転送で必ずポーリング待ち(while(bAHI_SpiPollBusy());)を行う必要があります。

#define SLAVE_ENABLE2		(1)			//	DIO19とDIO0を用いる
#define CS_DIO19			(0x01)		//	SPISEL0:DIO19に接続したものを使う
#define CS_DIO0				(0x02)		//	SPISEL1:DIO0に接続したものを使う

    ...
    // SPI の初期化
    vAHI_SpiConfigure(SLAVE_ENABLE2, // SPISEL0,1 の2つを利用する
					  E_AHI_SPIM_MSB_FIRST,
					  TRUE,
					  TRUE,
					  1,
					  E_AHI_SPIM_INT_DISABLE,
					  E_AHI_SPIM_AUTOSLAVE_DSABL);

	...
    // 転送1(8bitの書き出し)
    vAHI_SpiSelect(CS_DIO0); // SPISEL1 を有効にする
    vAHI_SpiStartTransfer(
					7, // 7+1=8 bit の転送
					0x00000012L ); // 0x12 を送信
    while(bAHI_SpiPollBusy()); // 読み書きのポーリング待ち
    //uint8 u8val = u8AHI_SpiReadTransfer8();
        // SPIMISO の入力データを読み出しは可能。
        // この例では、u8val は使用しない。

    // 必要なら少し時間を置く。
    vWait(100);
    
    // 転送2 (16bitの読み込み)
    vAHI_SpiStartTransfer(
					15, // 15+1=16 bit の転送
					0x00000000L ); // ダミーの送信データ。
    while(bAHI_SpiPollBusy()); // 読み書きのポーリング待ち。
    uint16 u16val = u16AHI_SpiReadTransfer16();
        // 読み出した 16bit データ。

    // セレクトを解除する
    vAHI_SpiStop();

    ...
    // SPIデバイスの利用を中止する。
    vAHI_SpiDisable();

主要関数

vAHI_SpiConfigure()

void vAHI_SpiConfigure(
    uint8 u8SlaveEnable,
    bool_t bLsbFirst,
    bool_t bPolarity,
    bool_t bPhase,
    uint8 u8ClockDivider,
    bool_t bInterruptEnable,
    bool_t bAutoSlaveSelect);

本関数は SPI デバイスの初期化を行い利用可能にします。SPIデバイスを解放する場合は vAHI_SpiDisable() を呼びます。

セレクトピンは最低でも SPISEL0 がSPI専用として割り当てられます。つまり SPIを使用する場合 SPISEL0(DIO19) は他の用途には使用できません。

引数名

解説

u8SalveEnable

有効にするチップセレクトピンを指定する。0を指定すると SPISEL0を予約、1を指定すると SPISEL0,1 を予約し、2を指定すると SPISEL0,1,2 を予約します。

bLsbFirst

TRUE ならLSB(下位ビット)からデータが始まる

bPolarity

TRUE ならクロックを反転する

bPhase

TRUE なら立ち下がりエッジを用いる

u8ClockDiviser

クロック周波数の指定。0..63 を指定する。0 では 16MHz 駆動し、それ以外は 2*u8ClockDiviser で分周する。

bInterruptEnable

SPI転送終了時に割り込みを発生させる。※ サンプル等では使用していません。

bAutoSlaveSelect

TRUEの場合セレクトピンの制御をSPI転送中のみの自動制御とする。FALSEの場合 vAHI_SpiSelect() の呼び出しタイミングで設定されます。

bLsbFirst, bPolarity, bPhase, u8ClockDiviser は接続するデバイスのデータシートより値を決めてください。

SPI Mode と bPolarity, bPhase の関係

SPI Mode

bPolarity

bPhase

0

FALSE

FALSE

1

FALSE

TRUE

2

TRUE

FALSE

3

TRUE

TRUE

vAHI_SpiSelect()

void vAHI_SpiSelect(uint8 u8SlaveMask);

セレクトピンを有効化します。

引数名

解説

u8SalveMask

1: SPISEL0, 2:SPISEL1, 4:SPISEL3, 0: セレクトを解除します。

vAHI_SpiStop() は vAHI_SpiSelect(0) の呼び出しと同じです。

vAHI_SpiStartTransfer()

void vAHI_SpiStartTransfer(uint8 u8CharLen, uint32 u32Out);

SPI転送を開始します。本関数呼び出し直後に転送を開始しますが、転送の終了を待たずに制御を返します。後述の bAHI_SpiPollBusy() により転送終了を待ちます。

引数名

解説

u8CharLen

転送長を指定する。0..31 が指定でき、指定した数 + 1 ビットの転送を行う。例えば 16 ビットの転送であれば 15 を指定する。

u32Out

出力するビット列。32bitに満たない転送の場合、データは LSB 側に右詰めする。(8bit の場合、bit0 〜 bit7 に格納する)

bAHI_SpiPollBusy()

bool_t bAHI_SpiPollBusy(void);

SPI 転送のポーリング待ちを行う。TRUE の間は SPI の転送中を意味します。

u32AHI_SpiReadTransfer32()

 uint32 u32AHI_SpiReadTransfer32(void);
 uint16 u16AHI_SpiReadTransfer16(void);
 uint8 u8AHI_SpiReadTransfer8(void);

SPI転送が終了した後に呼び出し、転送時の受信データ (SPIMISO) を読み出します。読み出したデータは LSB 側に右詰めされています。

前へI2C次へFlash, EEPROM

最終更新 3 年前