# SPI

SPIバス (Controller) の読み書きを行います。

## 注意事項

## 定数

| 定数                                                                       | 意味               |
| ------------------------------------------------------------------------ | ---------------- |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::MSBFIRST</code></p>   | MSB を先頭ビットにする    |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::LSBFIRST</code></p>   | LSB を先頭ビットにする    |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE0</code></p> | SPI MODE 0 に設定する |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE1</code></p> | SPI MODE 1 に設定する |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE2</code></p> | SPI MODE 2 に設定する |
| <p><code>const uint8\_t</code><br><code>SPI\_CONF::SPI\_MODE3</code></p> | SPI MODE 3 に設定する |

## 初期化と終了

SPIバスの利用手続きは`begin()`メソッドによります。

### begin()

```cpp
void begin(uint8_t slave_select, SPISettings settings)
SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode)
```

ハードウェアの初期化を行います。

{% hint style="warning" %}
スリープ復帰後にも本処理が必須です。
{% endhint %}

| パラメータ          | 解説                                                                                                                                                                                                                                                                                             |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `slave_select` | 使用するSPIスレーブのセレクトピンを指定する。`0 : DIO19``1 : DIO0 (DIO 19 は予約されます)``2 : DIO1 (DIO 0,19 は予約されます)`                                                                                                                                                                                                    |
| `settings`     | <p>SPIのバス設定を指定します。<br><br><code>clock</code>\[hz]でSPIバスの周波数を指定します。指定した周波数に近いディバイザが選択されます。16Mhzまたは16Mhzを偶数で割った値になります。<br><code>bitOrder</code>は<code>SPI\_CONF::MSBFIRST</code>か<code>SPI\_CONF::LSBFIRST</code>を指定します。<br><code>dataMode</code>は<code>SPI\_CONF::SPIMODE0..3</code>を指定します。</p> |

###

#### 例

```cpp
void setup() {
  ...
  SPI.begin(0, SPISettings(2000000, SPI_CONF::MSBFIRST, SPI_CONF::SPI_MODE3));
  ...
}

void wakeip() {
  ...
  SPI.begin(0, SPISettings(2000000, SPI_CONF::MSBFIRST, SPI_CONF::SPI_MODE3));
  ...
}
```

### end()

```cpp
void end()
```

SPIのハードウェアの利用を終了します。

## 読み書き

読み書きの手続きは、以下の2種類あります。いずれかを選択して利用します。

* [メンバ関数版 (以下のメンバ関数を用いた入出力)](https://mwx.twelite.info/api-reference/predefined_objs/spi/spi-member)\
  `beginTransaction(), endTransaction(), transfer(), transfer16(), transfer32()`
* [ヘルパークラス版(stream機能が使用可能)](https://mwx.twelite.info/api-reference/predefined_objs/spi/spi-helperclass)\
  `transceiver`

####


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mwx.twelite.info/api-reference/predefined_objs/spi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
