メインコンテンツ

SPI を使用した STM32 プロセッサの SPI EEPROM に対するデータの読み取りおよび書き込み

この例では、Embedded Coder® Support Package for STMicroelectronics® STM32 Processors を用いて、データの読み取りと書き込みを行うように SPI ブロックを構成して使用する方法を示します。

この例では、SPI Transmit ブロック、SPI Receive ブロック、および割り込みを使用して外部 SPI EEPROM に対してデータの読み取りおよび書き込みを行う方法について説明します。

メモ: このモデルでは、"SPI FIFO 長"15 のハードウェア ボードのみがサポートされます。

必要なハードウェア

  • Nucleo-H743ZI2 ボード

  • 外部 EEPROM (25AA080) は、Microchip の 8KB SPI バス シリアル インターフェイス EEPROM です。このデバイスは、さまざまなベンダーが提供する他の多くの EEPROM に共通する標準 SPI プロトコルを使用しています。このデバイスの詳細については、25AA080 のデータシートを参照してください。

ハードウェアの接続

SPI EEPROM は、有効化、データの書き込み、データの読み取り、およびステータスの読み取りに次の 8 ビットの opcode を使用します。

       Command  | Opcode | Operation
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
        WREN    | 6      | Enable Write Operations
        WRITE   | 2      | Write Data to Memory
        READ    | 3      | Read Data from Memory
        RDSR    | 5      | Read Status Register
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

ハードウェアの接続は、EEPROM の使用方法によって異なります。この例の SPI 接続は Nucleo H7 ボードと SPI EEPROM チップ間で行われます。EEPROM (25AA080) は、リストされているように 8KB の SPI EEPROM メモリです。

     SPI EEPROM pin |  STM32H7
 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      /CS   (pin 1) |  SPI_NSS
      SO    (pin 2) |  SPI_MISO
      /WP   (pin 3) |  3.3 V
      VSS   (pin 4) |  GND
      SI    (pin 5) |  SPI_MOSI
      SCK   (pin 6) |  SPI_SCK
      /HOLD (pin 7) |  3.3 V
      VCC   (pin 8) |  3.3 V
 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

利用可能なモデル

stm32_spi_eeprom_interrupt

Simulink® モデルは open_system コマンドを使用して開くことができます。たとえば、STM32 プロセッサ ベースのハードウェア ボードの場合は次のコマンドを使用します。

open_system('stm32_spi_eeprom_interrupt.slx');

SPI Transmit ブロック、SPI Receive ブロック、および割り込みを使用した SPI EEPROM に対するデータの読み取りおよび書き込み

このモデルは、さまざまなタイプのデータ値を EEPROM に書き込み、対応する EEPROM アドレスからデータを読み戻し、通信が成功したことを示します。このモデルは、SPI FIFO 長が 15 のハードウェア ボードでのみ使用できます。

8 ビットの opcode を送信して 8 ビットのデータの書き込み/読み取りを行うために、SPI ブロックは、[データ ビット] パラメーターを 8 に設定して構成されます。データ転送間でスレーブが選択解除されないようにするために、SPI モジュールの [STM32CubeMX configuration parameters] で SPI 周辺装置によって提供される [Hardware NSS signal]disabled に設定します。

この場合、Explicit GPIO calls オプションを使用して、"チップ選択 (SPI モジュールが提供) の割り当て" を GPIOA に設定し、複数のデータ転送で周辺装置が継続的に選択されるようにします。受信 FIFO は、FIFO 長が 15 の場合に割り込みをトリガーするように構成されます。

このモデルは、Write EEPROM Data、Transmit Read Command、Read EEPROM Data、および Data Realignment の各サブシステムと Display ブロックで構成されています。データの書き込み操作と読み取り操作は、STATVAR 変数を使用して交互にトリガーされます。

Write EEPROM Data サブシステムは、SPI Transmit ブロックと SPI Receive ブロックを使用して EEPROM 書き込み有効化操作を実行します。各書き込みサイクルの前に、SPI Transmit が先に実行されるようにブロックの優先順位が設定されます。異なる型の入力データは、Byte Pack ブロックを使用して 8 ビットのパケットにパックされ、uint16 に変換されます。次に、SPI Transmit ブロックを使用して、データが EEPROM のアドレス位置 0x0020 に書き込まれます。この後、プログラムは受信割り込みがトリガーされるまで待機します。受信割り込みがトリガーされると、受信 FIFO からのデータが読み取られ、破棄されます。

次に、Transmit Read Command サブシステムがトリガーされます。このサブシステムは、読み取りコマンドと、読み取るデータのサイズのダミー データを含むアドレスを送信します。この後、プログラムは受信割り込みがトリガーされるまで待機します。受信割り込みがトリガーされると、受信 FIFO からのデータが読み取られます。

Data Realignment サブシステムはバイトの並べ替えを実行して 8 ビット ワード パケットを作成し、Byte Unpack ブロックを使用して必要な型のデータにアンパックします。その後、このデータが Display ブロックを使用して表示されます。

モデルの実行

1. stm32_spi_eeprom_interrupt モデルを開きます。このモデルは、STM32 H7xx ベースの (シングル コア) ボード用に構成されています。他の STM32 ベースのボードで実行するようにモデルを構成するには、[コンフィギュレーション パラメーター]、[ハードウェア実行] ペインで [ハードウェア ボード] パラメーターを変更します。

2. STM32 CubeMX プロジェクトを起動し、[Pinout and Configuration][connectivity][SPI module] に移動します。

3. [Desired baud rate in bits/sec] の値として「500」を入力し、[HardwareNSS]Disable に設定します。

4. [FIFO threshold]FIFO threshold 15 data に設定します。

5. [コンフィギュレーション パラメーター] ウィンドウで [ハードウェア実行] をクリックし、[Target hardware resources][External mode] に移動して、[Communication interface]Serial port に設定します。

6. [Connectivity] に移動し、シリアル COM ポートを指定します。

メモ: ご使用のコンピューターで利用可能な COM ポートの一覧を確認するには、[スタート][コントロール パネル][デバイス マネージャー][ポート (COM と LPT)] を選択します。

7. [ハードウェア] タブを開き、[監視と調整] をクリックします。Display ブロックを使用して出力データを観察します。

8. 入力データの値を変更し、変化を観察します。

詳細