fvio_rzt1_spi_cmnはfvIO技術を使用したSPIマスタのプラグイン(south plugin)です。プラグインは1スロット版と信号線の本数を拡張した2スロット版を用意しています。
マイコン内蔵SPIインタフェースとは別に、最大8スロット(2スロット版では4スロット)分のSPI通信を実行することができます。
fvIO(functions-virtualized Input/Output)とは、シマフジ電機(株)が開発した「マイコン/マイクロプロセッサが内蔵するI/O端子機能を仮想化する技術」であり、以下の特徴があります。
- ソフトウェアによる通信プロトコル実装と比べて通信速度を高速化
- マイコンのCPU負荷の軽減
- FPGAと比較して開発コストが低い(マイコン単体で実現できるため)
- プラグインの組み合わせは自由
- 各プラグイン間の同期を数十ns単位で実現
下記は基本機能になります。カスタマイズにより機能の拡張が可能です。
- SPIパケットの送受信(1パケットあたりの最大通信長は8byte)
- 通信速度設定は約40kbit/s~10Mbit/sまで可能
- 同一パケットのリピート転送
- DMAを利用したパケットの連続転送
- 外部同期信号によるプラグイン間の同期
fvio_rzt1_spi_cmnはルネサス エレクトロニクス(以下ルネサス)製マイクロプロセッサ「RZ/T1」上でのみ動作します。現在対応しているボードは以下になります。
fvio_rzt1_spi_cmnの現在対応しているデバイスは以下になります。
ビルドには以下のツールが必要です。
fvio_rzt1_spi_cmnは以下のルネサス製のRZ/T1サンプルプログラムに組み込む形で動作します。ビルドを実行する前にルネサスのHPで必要なサンプルプログラムをダウンロードして下さい。
ファイル名 | 概要 |
---|---|
an-r01an2554jj0141-rzt1-initial-settings.zip | RZ/T1グループ 初期設定(ベースプログラム) |
an-r01an3569jj0200-rzt1-encoder.zip | RZ/T1 Encoder I/F(ライブラリ) |
リポジトリから取得したファイルをルネサス製のサンプルプログラム(an-r01an2554jj0141-rzt1-initial-settings)に対して以下のように追加して下さい。
★:fvio_rzt1_spi_cmnから追加
◎:an-r01an3569jj0200-rzt1-encoderから追加
RZ_T_sflash_sample/(※1)
┣inc/
┃ ┗◎r_ecl_rzt1_if.h
┃
┣★lib/
┃ ┗ ★ecl/
┃ ┣ ◎r_ecl_rzt1.a
┃ ┣ ★s_fvIO_rzt1_comn_spi_0.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_1.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_2.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_3.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_4.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_5.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_6.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_7.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_01.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_23.dat
┃ ┣ ★s_fvIO_rzt1_comn_spi_45.dat
┃ ┗ ★s_fvIO_rzt1_comn_spi_67.dat
┗src/
┣★fvio/
┃ ┣ ★dev_driver/(※2)
┃ ┃ ┣ ★mpu6500/
┃ ┃ ┃ ┣★fvIO_rzt1_spi_mpu6500.c
┃ ┃ ┃ ┗★fvIO_rzt1_spi_mpu6500.h
┃ ┃ ┗ ★ssd1306/
┃ ┃ ┣★fvIO_rzt1_spi_ssd1306.c
┃ ┃ ┗★fvIO_rzt1_spi_ssd1306.h
┃ ┣ ★fvio_driver/
┃ ┃ ┣ ★fvIO_cmn_if.h
┃ ┃ ┣ ★fvIO_cmn_2s_if.h
┃ ┃ ┣ ★fvIO_rzt1_dma.c
┃ ┃ ┣ ★fvIO_rzt1_dma.h
┃ ┃ ┣ ★fvIO_rzt1_spi_cmn.c
┃ ┃ ┣ ★fvIO_rzt1_spi_cmn.h
┃ ┃ ┣ ★fvIO_rzt1_spi_cmn_2s.c
┃ ┃ ┣ ★fvIO_rzt1_spi_cmn_2s.h
┃ ┃ ┗ ★fvIO_dat.asm
┃ ┃
┃ ┗ ★fvio_if/
┃ ┣ ★fvIO_if.c
┃ ┗ ★fvIO_if.h
┃
┗sample/
┣★main.c(※3)
┣★utility.c
┗★utility.h
※1 RZ_T_ram_sampleでも同様の追加を行います。
※2 リポジトリのdev_driver内の必要なディレクトリを追加します。
※3 リポジトリのサンプルプログラムを使用するかは任意です。
SEMB1401を使用する場合、src/common/sflash_boot/spibsc_ioset_userdef.cに以下の修正が必要です。
修正前:
#define SPIBSC_BUS_WITDH (4)
#define SPIBSC_OUTPUT_ADDR (SPIBSC_OUTPUT_ADDR_32)
修正後:
#define SPIBSC_BUS_WITDH (1)
#define SPIBSC_OUTPUT_ADDR (SPIBSC_OUTPUT_ADDR_24)
プロジェクトのプロパティで以下のように修正してからビルドを実行します。
(2)Cross ARM C Compiler/Includes
~/src/fvio/dev_driver以下のパス設定は、ユーザーが組み込んだ任意のディレクトリ名を入力します。
各種プラグインでは共通して以下のI/F関数を提供しています。
I/F関数 | 概要 |
---|---|
fvio_sys_init | プラグイン内部で使用する変数やモジュール等の初期化を行う。 |
fvio_entry | プラグインを登録する。 |
fvio_release | プラグイン登録を削除する。 |
fvio_assign | プラグインとスロットの紐づけを行う。 |
fvio_unassign | プラグインとスロットの紐づけを解除する。 |
fvio_sys_start | プラグインを紐づけたスロットにロードし、fvIOを一斉に起動する。(全fvIOスロットは同時に起動) |
fvio_stop | fvIOを停止する。(スロット毎に可能) |
fvio_write | fvIOに対してライト制御を実行。(プラグイン内部の設定に対しても可能) |
fvio_read | fvIOに対してリード制御を実行。(プラグイン内部の設定に対しても可能) |
基本的な使用方法としては、以下の順にI/F関数をコールし、デバイスを制御します。詳細については、プラグインのアプリケーションノートを参照して下さい。
1.fvio_sys_initでプラグインを初期化
2.fvio_entryでプラグインを登録
3.fvio_assignでプラグインをスロットにアサイン
4.fvio_sys_startで全スロットのfvIOを起動
5.fvio_write/fvio_readを使用して各スロットのデバイスを制御