STM32_SPI通信設定
table:設定内容
設定 内容
Basic Parameters 基本パラメータ
Frame Format モトローラ又はTIを設定
Data Size SPIフレーム内のデータビットを指定。8ビット又は16ビットサイズ。通信先のデバイスに依存する。
First Bit 送信する最初のビット位置を指定する。 LSB:一番右端のビット。MSB:一番左のビットを指す。通信先のデバイスに依存する。
Clock Parameters クロックパラメータ
Prescaler SPIクロックの分周比を指定する。SPIクロック速度の調整をする。
Clock Polarity クロック信号の初期状態を指定。 CPOL=0:クロックがLowから開始。 CPOL=1:クロックがHighから開始
Clock Phase データサンプリングのタイミングを指定。 CPHA=0:クロックの立ち上がりエッジでサンプリング。
Advanced Parameters 高度なパラメータ
CRC Calculation SPI通信で、CRCのエラーチェックを有効/無効を設定。有効の場合、送信データにCRCビットが追加される。
NSS Signal Type SPIのスレーブセレクト。
table:モード設定
Mode 意味
Full-Duplex Master 全二重通信方式_マスター
Full-Duplex Slave 全二重通信方式_スレーブ
Half-Duplex Master 半二重通信方式_マスター
Half-Duplex Slave 半二重通信方式_スレーブ
Receive Only Master 受信のみ_マスター
Receive Only Slave 受信のみ_スレーブ
Transmit Only Master 送信のみ_マスター
Transmit Only Slave 送信のみ_スレーブ
Full Duplex Transmission:全二重通信方式
→送信回線、受信回線をそれぞれ別に備えることで、送受を同時に行う事が可能
Half Duplex Transmission:半二重通信方式
→一度に「送信」と「受信」のどちらか片方しか行えない通信方法
→通信相手との間に1本だけ経路が繋がっていて、「送信」と「受信」を交互に行う
https://systemk-camera.jp/camera-blog/knowledge/what-two-way.php#:~:text=%E3%80%8C半二重通信%E3%80%8Dは,交互に行うイメージです%E3%80%82
https://ja.na4.teamsupport.com/knowledgeBase/17794746
マスター:指示を出す側。開始側。
スレーブ:指示を受ける側。 
通信の流れ
マスターが対象のスレーブを選択する(NSSをアクティブにする)。
マスターがクロックを発生させ、データをMOSI経由でスレーブに送信する。
同時に、スレーブはMISOを通じてデータをマスターに返信する。
通信が終了したら、マスターはNSSを非アクティブにし、次のデバイスとの通信に進む。
table:Hardware NSS Singnal
Hardware NSS Signal 内容
Disable NSS Signalを使用しない場合設定(ソフトウェア制御下のGPIOで置き換える)
Hardware NSS Input Signal NSS signalの入力設定:スレーブの時に使用
Hardware NSS Output Signal NSS signalの出力設定:マスターの時に使用
NSSは、マスターの場合は出力信号になり、通信時にローレベルへ落ちます。
スレーブの場合は入力となり、SS信号として働きます。
NSS:個別のスレーブ選択信号
→https://edn.itmedia.co.jp/edn/articles/1909/30/news026_2.html
table:パラメータ設定
Frame Format Motorola:
TI:
Data Size 送受信するbit数。通信相手に合わせる。
First Bit 最上位ビットか、最下位ビットを設定。通信相手に合わせる。
Prescaler 分周比、クロック周波数によって設定。通信相手に合わせる。
Clock Polarity(CPOL) アイドル状態(非通信時)の時にHightかLowか。 通信相手に合わせる。
Clock Phase(CPHA) クロックの立ち上がりエッジ、立下りエッジどちらで、データの取得をするか。
CRC Calculation
NSS Singnal Type
https://www.st.com/content/ccc/resource/sales_and_marketing/presentation/product_presentation/group0/9b/9a/22/4d/2f/37/4c/67/30.Serial%20peripheral%20interface%20(SPI)/files/30.STM32L4-Peripheral-SPI%20interface%20(SPI)%20Final_JP.pdf/jcr:content/translations/en.30.STM32L4-Peripheral-SPI%20interface%20(SPI)%20Final_JP.pdf
最上位ビット:https://ja.wikipedia.org/wiki/最上位ビット
CRC:誤り検出符号の一種で、主にデータ転送などに伴う偶発的な誤りの検出によく使われている。
送信側は定められた生成多項式で除算した余りを検査データとして付加して送信し、受信側で同じ生成多項式を使用してデータを除算し、その余りを比較照合することによって受信データの誤り・破損を検出する。
https://www.stmcu.jp/technical/hint/no-040/
https://ja.wikipedia.org/wiki/巡回冗長検査
https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/crc/
Motorola:
通常のSPI通信設定
TI:
Hardware NSS Signalが使用する場合に選択可能。
データの最後のビットに、マスタによって提供されたNSSパルスによって同期される。
クロック極性と位相の設定が固定される。
スレーブデータ出力は、自動的にバストラフィックが停止したときにハイインピーダンスに切り替え、特定の設定可能なタイムアウトにされる。
https://www.stmcu.jp/wp/wp-content/uploads/files/presentation-ja/STM32MP1/39_STM32MP1-Peripheral-Serial-Peripheral-interface-(SPI)_J.pdf
参考:SPI通信
https://zenn.dev/nanase_t/articles/0280ef51007267
https://www.youtube.com/watch?v=HLCTDL_5QWw
nucleo f401