TOPPERS BASE PLATFORM (RV) V1.4.2

担当者

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

竹内良輔

変更履歴
リリース
0.1.0
0.1.1
0.1.2
0.1.3
1.4.1
1.4.2

日付
2019/04/25
2019/10/22
2019/11/29
2019/12/24
2020/04/14
2020/12/14

作成者
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔

変更内容
初版
Maix シリーズの対応
Maix 用カメラと I2C ドライバ追加
Maix 用 SD カード対応
正式リリース用に版を改定
YOLO デモ追加, Longan nano の対応

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

目次
変更履歴 ...................................................................................................................................................2
1 背景 ...................................................................................................................................................5
2 目的 ...................................................................................................................................................5
3 TOPPERS BASE PLATFORM (RV)仕様.........................................................................................5
3.1
プラットフォームのターゲット .................................................................................................5
3.2
レイア構造 .................................................................................................................................5
3.3
開発環境 .....................................................................................................................................6
4 Device Driver 仕様 ...........................................................................................................................6
4.1
Basic Driver ..............................................................................................................................6
4.1.1
概要 ........................................................................................................................................6
4.1.2
ドライバ一覧 ..........................................................................................................................6
4.1.3
GPIO ......................................................................................................................................7
4.1.3.1
データ仕様 ..........................................................................................................................7
4.1.3.2
インターフェイス仕様 ........................................................................................................4
4.1.3.3
フローチャート ...................................................................................................................4
4.1.4
RTC ........................................................................................................................................4
4.1.4.1
データ仕様 ..........................................................................................................................94.1.4.2
インターフェイス仕様 ........................................................................................................94.1.4.3
設定手順..............................................................................................................................9
4.1.5
WATCH DOG.......................................................................................................................10
4.1.5.1
データ仕様 ........................................................................................................................10
4.1.5.2
インターフェイス仕様 ......................................................................................................10
4.1.6
UART ...................................................................................................................................10
4.2
Standard Driver ......................................................................................................................10
4.2.1
概要 ...................................................................................................................................... 11
4.2.2
SPI ....................................................................................................................................... 11
4.2.2.1
データ仕様 ........................................................................................................................124.2.2.2
インターフェイス仕様 ......................................................................................................144.2.2.3
フローチャート .................................................................................................................14
4.2.3
I2C .......................................................................................................................................16
4.2.3.1
データ仕様 ........................................................................................................................16
4.2.3.2
インターフェイス仕様 ......................................................................................................17
4.2.3.3
フローチャート .................................................................................................................17
5 タスクモニタ ...................................................................................................................................19
5.1
概要 ..........................................................................................................................................195.2
標準入出力 ...............................................................................................................................19
5.3
標準デバッグコマンド .............................................................................................................20
5.4
デバッグコマンド拡張 .............................................................................................................215.4.1
データ仕様............................................................................................................................21
5.4.2
インターフェイス仕様 ..........................................................................................................21
6 API 層 .............................................................................................................................................21
6.1
概要 ..........................................................................................................................................22
6.2
ファイルシステム ....................................................................................................................22
6.2.1
ファイルライブラリ .............................................................................................................22
6.2.2
Storage Device Manager .....................................................................................................24
6.2.2.1
データ仕様 ........................................................................................................................24
6.2.2.2
インターフェイス仕様 ......................................................................................................25
6.2.3
FatFs....................................................................................................................................26
6.3
時間管理 ...................................................................................................................................26
6.3.1
データ仕様............................................................................................................................26

6.3.2
インターフェイス仕様 ..........................................................................................................27
6.4
UI ミドルウェア ......................................................................................................................27
6.4.1
UI ディレクトリ ...................................................................................................................27
7 ファイルの構成 ...............................................................................................................................27
7.1
共通部 ......................................................................................................................................24
7.2
PDIC(Base/Standard)ドライバ...............................................................................................24
7.3
GDIC ドライバ ........................................................................................................................29
4 変更履歴 ..........................................................................................................................................29
Appendix A HI-FIVE1 ...........................................................................................................................30
Appendix B Maixdino ...........................................................................................................................31
Appendix C Longan nano .....................................................................................................................32

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

4

1 背景
TOPPERS BASE PLATFORM の拡張として RISC-V プロセッサに対応する。組込み用途で開発された RISC-V プロセッサを使用したエバレーション・ボードから最適なものを選択して組込みソフトウェ
アプラットフォームとして TOPPERS BASE PLATFORM(RV)を開発することとなった。

2 目的
本リファレンスマニュアルは、ターゲットボードとターゲットボード上に作成したソフトウェアプラ
ットフォーム(TOPPERS BASE PLATFORM(RV))の仕様について記載する。
■ターゲットボード
・HI-FIVE1 SiFive 社
・Maix ボード Sipeed 社
・Longan-nano Sipeed 社

3 TOPPERS BASE PLATFORM (RV)仕様
本章では、TOPPERS BASE PLATFORM (RV)の仕様について記載する。

3.1 プラットフォームのターゲット
TOPPERS BASE PLATFORM(RV) は上記３つのボードに対応した TOPPERS ASP-1.9.3 カーネル上で実行するデバイスドライバとミドルウェアに対応する。

3.2 レイア構造
TOPPERS BASE PLATFORM(RV)のハードウェアドライバは下層から３層のレイヤ構造を持ち、その上に API 層、ライブラリの I/F 層をもつ。FE310-G000 は他の一般的な SoC と比べ、RAM 領域が小さく、デバイス IP が少ないため、他の TOPPERS BASE PLATFORM に比べミドルウェアの対応が少ない。しかし、PDIC の API が ASP-1.9.3 カーネルを使用している TOPPERS BASE PLATFORM(ST)とほぼ同じため、
GDIC やミドルウェアは、そのまま使用可能である。また、ASP カーネルのもつデバッグ機能以外に、教育
ＷＧで提供するタスクモニタを標準に装備し、システムデバッグ用にデバッグコマンドを用いて開発補助を行う。
図 3.2.1 に TOPPERS BASE PLATFORM (RV)の構造図を示す。Base Driver、Standard Driver、GDIC、
UI ミドルウェア等により、アプリケーションから以下の機能が使用可能になる。
① SPI② I2C Hi-Five1:Wire(I2C):仮実装/Maix,longan nano:正式対応③ UART④ RTC⑤ WDOG⑥ ADC:longan nano のみ
ApplicationUITASK MONITORSPI-SDCARD driver
GDIC Driver

STDIO

Standard Driver

TOPPERS/ASP Release1.9.3

TOPPERS BASE
PLATFORM(RV)

Basic Driver

HI-Five1/Maixシリーズ

図 3.2.1 TOPPERS BASE PLATFORM(RV)構造図

以下に、レイア構造の概要を示す。
(1)basic driver ハードウェア仕様により API が変わるドライバ層

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

5

(2)standard driver 拡張ボードの標準化により、API がある程度標準化されているドライバ層(3)GDIC driver 下位の driver を使用して構築する特定のデバイス用 driver(4)TOPPERS BASE PLATFORM で標準化している API 層

PLATFORM(RV)
DeviceBasic
DriverDriverStandard
Drivergdic
api
middlewarehigh driver
File
SystemGraphic UI

ターゲットボード
gpio
rtc
watch doc
adc
(timer)(uart)
spi
i2c
adc

detailstdio

RTOS の機能
RTOS 上に実装
GLCD/SD card
CLCD
(longan-nano のみ)
デバイス結合標準入出力

ui

文字グラフィック表示

対象の講座
なし

注意：Maix シリーズ用のデバイスドライバはサンプル実装です。

3.3 開発環境
TOPPERS BASE PLATFORM(RV)は Windows10 上に MSYS2 をインストールし、GCC コンパイラソ
ースをビルドして開発を行っている。ソースコードを公開しているため、LINEX でも開発可能である。
(1) gcc version 4.2(GNU MCU Eclipse: riscv-none-embed 4.2.0-2.1-20190425-1021)(2) gcc version 4.2(newlib-3.0.0.20140431)

4 Device Driver 仕様
ハードウェア用デバイスドライバの仕様について記載を行う。本 TOPPERS BASE PLATFORM(RV)
では、３種類のデバイスドライバを提供する。Maix シリーズのデバイスハードウェアの正式な仕様書はないためソフトウェアドライバ仕様は記載しない。

4.1 Basic Driver
4.1.1 概要
Basic Driver は、ハードウェアを制御する基本的なドライバ群である。制御は簡単な制御手順であるが、初期化や拡張機能は、SoC によってまちまちの実装が行われており、標準的な API では作成できないものが多い。また、Basic Driver は直接ミドルウェアやアプリから制御を行うより、上位のドライバ
から使用機能として呼び出すケースが多い。逆に Basic Driver は他のドライバの呼び出しは行わない。
Basic Driver はハードウェアの依存性が大きいため、PLATFORM を別の SoC にポーティングする場
合、別の API の実装となる。
UART は、asp カーネルで使用されている。基本的には asp カーネルのドライバを使用する。差分のみを Basic Driver として記載する。タイマーに関しては、FE310-G000 は machine timer しか持たな
い、machine timer が asp カーネルのシステムタイマーとして使用しているので、タイマーの使用はサービス・コールに順ずる。

4.1.2 ドライバ一覧
Basic Driver として分類するドライバは以下の４つである。
(1) gpio
汎用ＩＯドライバ
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

6

(2) rtc(3) wdoc(4) uart

リアルタイム制御ドライバ
ウォッチドックタイマードライバ
シリアルインターフェイスドライバ

4.1.3 GPIO
GPIO は汎用のＩＯを制御するドライバである。GPIO はピン設定を入力または出力に設定し、ピンに対してデータを読み込むまたは書き込みことにより、外部のロジックとのデータ交換を行う機能を持つ。機能的には単純であるが、ピンアサイン、ベースの電圧設定、出力モード設定、割込みの対応等、初期化に関して SoC の設計により、設定仕様がまちまちであり、標準的な初期化手順を作ることが難しい。
FE310-G000 では GPIO ポートはひとつでピン番号は、0 から 31 までの 32 ピンである。GPIO ピン
は IP 用のピンとして設定しているものがあり、すべてのピンを GPIO として使用できるわけではない。

4.1.3.1 データ仕様
GPIO の初期化に用いるデータと構造体について記載する。GPIO の初期化には表 4.1.3.1 のGPIO_Init_t 型を使用する。
番号

項目

1
2
3
4
5

mode
uint32_t
pull
uint32_t
otype
uint32_t
oxor
uint32_t
iof
uint32_t
表 4.1.3.1 GPIO_Init_t 型

型

①

mode
モードはピンアサインの GPIO モードを設定する
定義

GPIO_MODE_INPUTGPIO_MODE_IT_FALLINGGPIO_MODE_IT_RISINGGPIO_MODE_IT_RISING_FALLINGGPIO_MODE_LEVEL_LOW
GPIO_MODE_LEVEL_HIGH
GPIO_MODE_OUTPUT
表 4.1.3.2 mode 設定値

機能対象のピンアサインの設定モード
出力 Pull-Up/Pull-Down 設定
出力タイプ Push-Pull 設定のみ設定可能
出力 XOR 設定
IOF 選択値

0x00000000
0x10010000
0x10110000
0x10210000
0x10000000
0x10100000
0x00000001

内容

GPIO 入力モード
GPIO 入力フォーリングエッジ割込み
GPIO 入力ライジングエッジ割込み
GPIO 入力両エッジ割込み
GPIO 入力 LOW レベル割込み
GPIO 入力 HIGH レベル割込み
GPIO 出力モード② pullpull は GPIO 出力設定。
定義

GPIO_NOPULLGPIO_PULLUP
表 4.1.3.3 pull 設定値

値0x00000000
0x00000001

内容

プルアップ無効
プルアップ有効③ otype
プルアップタイプのみ設定可能
定義

GPIO_OTYPE_PP
表 4.1.3.4 otype 設定値

値

0x00000000

内容

プルアップタイプ

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

7

④ oxor
出力データを XOR するか否かの設定
定義

値

GPIO_OUTPUT_NORMALGPIO_OUTPUT_XOR
表 4.1.3.5 oxor 設定値

0x00000000
0x00000001

内容

出力データをそのまま設定
出力データを XOR して設定

⑤ iof
IOF を使用するか、否かの設定
定義

値

GPIO_NOIOFGPIO_IOF0GPIO_IOF1
表 4.1.3.6 iof 設定値

0x00000000
0x00000001
0x00000002

内容

IOF を使用しない：ソフト制御
IOF0 を使用する
IOF1 を使用する

4.1.3.2 インターフェイス仕様
GPIO を初期設定するドライバ関数を以下に示す。
関数名

型

引数

機能

備考

gpio_setup

void

uint32_t base
GPIO_Init_t *init
uint32_t pinbase アドレスと pin 番号で指定されたポートを初期化する。

アルタネー
トの設定デ
バイスピン
の初期化の
場合もある

表 4.1.3.6 GPIO 設定関数

4.1.3.3 フローチャート
基本的な GPIO の出力設定のフローチャートを以下に示す。

図 4.1.3.3.1 GPIO の設定フローチャート

4.1.4 RTC
RTC(Real-time clock)は時刻を管理するハードウェアである。HI-FIVE1 ボードでは RTC 用のクロックは実装されているが、バックアップ用バッテリは実装されていないため電源を落とすと時刻はリセッ
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

4

トされる。RTC は時刻管理以外にアラート機能があり、アラート時刻を設定すると割込みにより、アラート通知を受け取ることができる。

4.1.4.1

データ仕様

RTC では UNIX で使用されている時刻管理構造体 tm と共有して時刻データのやり取りを行えるように表 4.2.6.1.1 として構造体名を変えた tm2 構造体を定義する。この構造体は tm 構造体と混在して使用されても定しくデータの受け渡しを行える。
RTC のアラーム動作設定用に割込みからのコールバック関数を用意する。
番号

項目

1
2
3
4
5
6
7
4
9

tm_secint
tm_minint
tm_hourint
tm_mdayint
tm_monint
tm_yearint
tm_wdayint
tm_ydayint
tm_isdstint
表 4.1.4.1.1 tm2 構造体型

4.1.4.2

機能秒(0～59)分(1～60)時(0～23)
月の中の日
月
年(1970 を 0 とした年数)
曜日
年の中の日
夏時間：０以外の値

インターフェイス仕様

RTC を設定するドライバ関数を以下に示す。
関数名型

rtc_init
rtc_set_time
rtc_get_time
rtc_setalarm

void
ER
ER
ER

引数

intptr_exinf
struct tm2 *pt
struct tm2 *pt
struct tm2 *ptm
void *func
rtc_handler
void
void
表 4.1.4.2.1 RTC 設定関数

4.1.4.3

機能

備考

RTC の初期化を行う。引数に意味なし
時刻をセットする
時刻を取り出す
アラートをセットする
割込みハンドラ

設定手順

初期化は rtc_init 関数を用いて行う。ATT_INI を使用して設定が行えるように引数を用意したが、この引数に意味はない。使用は以下の手順に従う。
① rtc_set_time
時刻の設定を行う。tm2 構造体中に設定に使用するのは以下の６つの項目で他の項目は意味を持たない。
(1) tm_year(2) tm_mon(3) tm_mday(4) tm_hour(5) tm_min(6) tm_sec② rtc_get_time
時刻を取り出す。tm2 構造体中に実際に設定される項目は以下の７つの項目である。
他の設定も設定したい場合は mktime 関数を用いて設定を行う必要がある。
(1) tm_year
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

9

(2) tm_mon(3) tm_mday(4) tm_wday(5) tm_hour(6) tm_min(7) tm_sec③ rtc_setalarm
ptm の時刻と現在時刻の比較を行い、ptm の時刻に達した場合、割込みが発生しコールバック関
数が呼び出される。

4.1.5 WATCH DOG
WATCH DOG はシステムに異常が発生した場合、リセットを行う機能である。システムは WATCH
DOG TIMER を起動し、一定周期でタイマーのリセットを行うことにより WATCH DOG に正常動作を通知する。

4.1.5.1

データ仕様

WATCH DOG はポート番号により選択できる。ドライバ I/F はポート番号を用いて制御を行う。
番号

項目

1

WDOG1_PORTID
1
Watch Dog のポート 0 を示す
表 4.1.5.1.1 WATCH DOG ポート番号値

4.1.5.2

機能

インターフェイス仕様

WATCH DOG を制御するドライバ関数は以下の通りである。wdog_init でウォッチドックタイマーを起動した場合、リセット以外停止することはできない。
関数名

型

引数

機能

wdog_initER

ID portid
uint16_t wdogtime

指定ポート ID の WATCH DOG ペ
リフェラルを初期化する
wdogtime はタイムアウト時間で秒単位である
停止不可（意味をもたいない）
タイマーのリセットを行う

wdog_deinitER
ID portid
wdog_resetER
ID portid
表 4.1.5.2.1 WATCH DOG ドライバ関数

備考

4.1.6 UART
UART 用のデバイスドライバは asp カーネルで実装済のデバイスドライバを使用しているため、ここでは記載しない。

4.2 Standard Driver
スタンダードドライバは拡張ボード（シールド）の標準化により、ドライバ API がデファクトスタン
ダードとなっているドライバを指す。但し、ペリフェラルの実装は標準化されたドライバ API 以上の機能を持つものが多く、ハードウェアを最大限に利用するのは拡張インターフェイスにて拡張を行う必要がある。

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

10

4.2.1 概要
BASE PLATFORM (RV)として、スタンダードドライバとしたのは、以下の SPI ペリフェラルのみである。I2C は GPIO を使用したソフトウェアドライバである。現状は SDA のデータ受信値が不安定なため送信のみ可能となっている。
① SPI
② I2C
スタンダードドライバは、基本的にポート ID を指定してハンドラを取り出しハンドラを用いてペリフ
ェラルを制御する構成を取る。

4.2.2 SPISPI はシリアル・ペリフェラル・インターフェイスの略で、I2C と同様にペリフェラル間の通信規格である。I2C が高速でも 400kbps であるのに比べ SPI は 1Mbps から 20Mbps まで高速転送が可能である。本実装では 4 つの FIFO フレームを使った実装とした。SS(Slave Select または CS)の設定については AUTO モードと、AUTO オフモードが設定可能である。Arduino コネクタ互換用には、AUTO オ
フモードを推奨する。SPI は４本の信号で通信を行う。スレーブが複数ある場合は、SS(Slave Select)
を LOW にしたスレーブに対して通信を行う。そのため、SS 信号はスレーブの数だけ必要となる。また、双方向通信時は MISO と MOSI は同時にデータ通信するので、同時にデータ交換が行われる形となる。
① SCLK
クロック信号② MISO
スレーブからのデータ信号③ MOSI
マスタからのデータ信号④ SS
スレーブのセレクト信号

図 4.2.2.1 SPI 接続図
SPI 通信は、クロックの論理（正と負）、クロックに対するデータ設定タイミングにより４つのモードのデータ・タイミングが定義されている。
① モード０：正パルス、前縁ラッチ、後端シフト② モード１：正パルス、前縁シフト、後端ラッチ③ モード２：負パルス、前縁ラッチ、後端シフト④ モード３：負パルス、前縁シフト、後端ラッチ
図 4.2.3.2 はもっとも一般的なモード０の動作タイミングを示す。

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

11図 4.2.2.2 モード０、正パルス、前縁ラッチ、後端シフトのタイミング図

4.2.2.1 データ仕様
SPI ドライバは初期化用の型として、表 4.2.2.1.1 の SPI コンフィギュレーション型と、ハンドラとして表 4.2.2.1.2 の SPI ハンドラ型を持つ。
番号

項目

1
2
3
4
5
6
7
4
9
10
11
12
13
14

Direction
uint32_t
SPI 転送データ方向
DataSizeuint32_t
SPI 転送データサイズ
CLKPolarity
uint32_t
SPI 転送クロックの極性
CLKPhaseuint32_t
SPI クロック位相
CSModeuint32_t
SPI CS 設定モード設定
Protocoluint32_t
SPI プロトコル設定
CSDelay
uint32_t
SPI CS to SCK delay
SCKDelayuint32_t
SPI SCK to CS delay
MinScInActTime
uint32_t
SPI Minimun CS Inactive time
MaxifTimeuint32_t
SPI Maximum Interface Delay
Prescaler
uint32_t
SPI クロック分周設定
SignBituint32_t
SPI MSB/LSB 設定
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.2.2.1.1 SPI コンフィギュレーション型

型

機能

semid はセマフォ通信用のセマフォ番号、ゼロで設定なし。このセマフォは割込みとドライバ間の伝達用に使用するため、設定なしの場合、通信遅延が発生する。smlock は、ドライバの排他制御に使用するセマフォ番号を指定する。ゼロの設定で排他制御なしとなる。
番号

項目

型

機能

1
2
3
4
5
6
7
4
9
10
11

base
Init

uint32_t
SPI_Init_t

SPI ベースアドレス
SPI コンフィギュレーション型

1213

pTxBuffPtr
TxXferSize
TxXferCount
pRxBuffPtr
RxXferSize
RxXferCount
xmode
xfercallback

uint4_t *uint16_t
uint16_t
uint4_t *uint16_t
uint16_t
uint32_t
void(*)(SPI_Handle_t *)statusvolatile uint32_t
ErrorCodevolatile uint32_t
表 4.2.2.1.2 SPI ハンドラ型

送信データ領域へのポインタ
要求送信サイズ
送信済みサイズ
受信データ領域へのポインタ
受信要求サイズ
受信済みサイズ
転送モード
転送終了時コールバック関数
送信用 DMA ハンドラ
SPI エラーコード① Direction
SPI 通信方向設定のモード設定。
定義

値

SPI_DIRECTION_2LINES
0x00000000
SPI_DIRECTION_1LINESPI_FMT_DIR_TX
表 4.2.2.1.3 Direction 設定値

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

内容

２ラインモード
片方向モード12

② DataSize
SPI のフレーム中のビットサイズを指定する。
③ CLKPolarity
SPI 転送クロック極性定義。
定義

値

SPI_POLARITY_LOW
0x00000000
SPI_POLARITY_HIGH
SPI_CLK_POL
表 4.2.2.1.4 CLKPolarity 設定値

内容

極性 LOW
極性 HIGH④ CLKPhase
SPI 転送クロック位相定義。
定義

値

SPI_PHASE_1EDGE
0x00000000
SPI_PHASE_2EDGESPI_CLK_PHA
表 4.2.2.1.5 CLKPhase 設定値

内容

前縁ラッチ
後縁ラッチ

⑤ CSMode
SPI の CS 設定モードを設定する。
定義

値

SPI_CSM_AUTO
SPI_CSMODE_AUTO
SPI_CSM_HOLDSPI_CSMODE_HOLDSPI_CSM_OFF
SPI_CSMODE_OFF
表 4.2.2.1.6 XferMode 設定値

内容

CS 自動制御
CS をホールドする
CS 制御を行わない⑥ Protocol
本 SPI はクワッド転送が可能なためプロトコルを設定する。
定義

値

SPI_PROTOCOL_4LINESSPI_PROTO_Q
SPI_PROTOCOL_2LINESSPI_PROTO_D
SPI_PROTOCOL_1LINESPI_PROTO_S
表 4.2.2.1.7 Protocol 設定値

内容

4 ライン転送
2 ライン転送
1 ライン転送⑦ CSDelay
AUTO モードの場合、CS から SCLK までのデレィをクロックで設定する。レンジは 0 から 255
まで。
⑧ SCKDelay
AUTO モードの場合、SCLK から CS オフまでデレィをクロックで設定する。レンジは 0 から 255
まで。
⑨ MinScInActTime
AUTO モードの場合、CS オフから CS オンまでの最小遅延クロックを指定する。レンジは 0 から 255 まで。
⑩ MaxifTime
AUTO モード以外の設定で、CS をオフしなかった場合の２つのフレーム間の遅延クロックを設定する。レンジは 0 から 255 まで。
⑪ Prescaler
SCLK の周波数をシステムクロックの分周設定で指定する。
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

13

⑫ SignBit
SPI データ MSB/LSB 設定値。
定義

値

内容

SPI_DATA_MSB
SPI_FMT_ENDIAN_MSB
SPI_DATA_LSB
SPI_FMT_ENDIAN_LSB
表 4.2.2.1.4 SignBit 設定値

転送データ MSB
転送データ LSB

4.2.2.2 インターフェイス仕様
AUTO モードオフの場合、SPI を制御するドライバ関数は以下の通りである。SS の設定は、GPIOを使って別途制御しなければならない。TOPPERS BASE PLATFORM(ST)の SPI 設定は、AUTO モー
ドオフなので、SPI 用のサンプルプログラムは、この設定になっている。
関数名

型

引数

機能

spi_init

SPI_Handle_t*

ID portid
SPI_Init_t *spii

spi_deinit
spi_reset
spi_transmit

ER
ER
ER

指定ポート ID の SPI ペリフェラルを初期化し、ハンドラへのポインタを返す
SPI を未使用状態に戻す
SPI をリセットする
SPI 送信を行う。転送終了まで関数内で待ちとなる。

SPI_Handle_t* hspi
SPI_Handle_t* hspi
SPI_Handle_t* hspi
uint32_t slave_selectuint4_t *tx_buf
uint32_t len
spi_receiveER
SPI_Handle_t* hspi
uint32_t slave_selectuint4_t *rx_buf
uint32_t len
spi_transrecv
ER
SPI_Handle_t* hspi
uint32_t slave_selectuint4_t *tx_buf
uint4_t *rx_buf
uint32_t len
spi_isrvoid
intptr_t exinf
表 4.2.2.2.1 SPI ドライバ関数

備考

SPI 受信を行う。転送終了まで関数内で待ちとなる。

SPI 送受信を行う。転送終了まで関数内で待ちとなる。

SPI 割込みサービスルーチン

4.2.2.3 フローチャート
SPI ドライバは、FIFO による通信を指定するように設計しています。SPI の初期設定は、spi_init
関数を指定して対象ポート番号と初期設定したコンフィギュレーション構造体のポインタを指定します。
ペリフェラルには受信のみ、送信のみ、送受信があり、それぞれの転送関数を用意しています。転送
待ちは各関数内で行われます。実際はほとんどの場合、spi_transsrev ですべての転送を行えます。転送の終了待ちを行う場合、spi_wait 関数を呼び出せば関数内で終了待ちを行います。SPI ハンドラ内のErrorCode は表 4.2.2.3.1 のように制御中に発生したエラーを格納する。
定義

値

SPI_ERROR_NONE
0x00000000
SPI_ERROR_TIMEOUT
0x00000020
表 4.2.2.3.1 ErrorCode の内容

内容

エラーなし
ステート変更タイムアウト

図 4.2.2.3.1 に SPI の初期化フローチャートを記載します。SPI 割込み、通信と排他制御用セマフォ
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

14

の静的 API を用いて登録する。

図 4.2.2.3.1 SPI 初期化フローチャート
図 4.2.2.3.2 に SPI の送受信のフローチャートを記載します。複数のスレーブの対応を行う場合は、
SS の設定を行わなければならない。送受信の処理は、送信のみの通信や受信のみの通信であっても、
spi_tranrecv 関数で処理を代用できる。送信のみの通信でこの関数を使用した場合、受信データとして0xFF が受信され、受信のみの通信でこの関数を代用した場合、送信データとして 0xFF をパディング
した方が安全である。
送受信の場合、送信と同期して受信データが受信領域にセットされる。転送待ちは関数内で行う。戻
り値が E_OK 以外はエラーが発生している。エラーの詳細は SPI ハンドラの errorcode にセットされる。

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

15

図 4.2.2.3.2 SPI 送受信フローチャート

4.2.3 I2C
I2C（アイ・スクエア・シー）は周辺機との通信用にフィリップス社が開発した低速なシリアルバス
である。メインボード側がマスタ、周辺機側がスレーブとなり、スレーブアドレスをキーにデータの送受信を行う。基本的な通信速度は 100kbit/sec の通常モードと 10kbit/sec の低速モードがあるが、基本
以上、または、基本以下の速度で通信を行う場合も多い。スレーブアドレスは通常は７ビットであるが、拡張として１０ビットのスレーブアドレスも通信可能となっている。
I2C は SCL（クロック）と SDA（データ）の２つの線で通信を行う、周辺機が複数ある場合はこの２つの線を共有する形となる。マスタ側が常に制御権を持っており基本のクロック SCL はマスタ側が設定する。但し、スレーブ側で待ちが必要な場合は、スレーブ側 SCL 信号を Low に落として待ち状態を作る。送信を行う場合は、送信側がクロックに合わせて SDA 上にデータ信号を乗せる。最後の８ビ
ット目で受信側が SDA を Low にした場合は ACK となり、Hi のままならば NACK となる。スレーブ
アドレス 7bit の一般的なデータ転送を図 4.2.3.1 に示す。

図 4.2.3.1 スレーブアドレス 7bit のデータ転送

4.2.3.1 データ仕様
I2C ドライバは初期化用の型として、表 4.2.3.1.1 の I2C コンフィギュレーション型と、ハンドラと
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

16

して表 4.2.3.1.2 の I2C ハンドラ型を持つ。SoC に I2C 用の IP はないため、本ドライバは GPIO のソフト制御で実装している。SDA のデータ入力が不定のため、送信のみ実行可能となっている。
番号

項目

1

smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.2.3.1.1 I2C コンフィギュレーション型

型

機能

本ドライバは SCL と SDA に GPIO を指定してソフトウェア制御で I2C 制御を行う設定となっているため、コンフュギュレーション型は、ロック制御を行うセマフォ以外の設定はない。smlock は、ドライバの排他制御に使用するセマフォ番号を指定する。ゼロの設定で排他制御なしとなる。
番号

項目

型

1
2
3
4
5
6
7
4
9
10

base
Init
portidclkCount
sclpinsdapingpiopull
gpioiof1
sdaoe
ErrorCode機能

uint32_t
I2C_Init_t
uint32_t
uint32_t
uint16_t
uint16_t
uint32_t
uint32_t
uint32_t
volatile
uint32_t
表 4.2.3.1.2 I2C ハンドラ型

I2C ベースアドレス
I2C コンフィギュレーション型
I2C ポート ID
ナノ秒単位のクロック待ち時間
SCL のピン番号
SDA のピン番号
GPIO の PULLUP 設定保存領域
GPIO の IOF 設定保存領域
現在の SDA のディレクション設定
I2C エラーコード(エラーは設定されない)

4.2.3.2 インターフェイス仕様
I2C を制御するドライバ関数は以下の通りである。
関数名

型

引数

機能

i2c_init

I2C_Handler*

ID portid
I2C_Init_t *ii2ci2c_deinit
i2c_memwrite

ER
ER

指定ポート ID の I2C ペリフェラルを初期化し、ハンドラへのポインタを返す
I2C を未使用状態に戻す
マスターモードのデータ送信、
MemAddSize をゼロにするとアドレス設定を行わない

I2C_Handler* hi2c
I2C_Handler* hi2c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint4_t *pData
uint16_t Sizei2c_memreadER
I2C_Handler* hi2c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint4_t *pData
uint16_t Size
表 4.2.3.2.1 I2C ドライバ関数

備考

マスターモードのデータ受信、
MemAddSize をゼロにするとアドレス設定を行わない

4.2.3.3 フローチャート
I2C の初期設定は、i2c_init 関数を指定して対象ポート番号と初期設定したコンフィギュレーション
構造体のポインタを指定します。本実装ではマスタ機能のみの実装となっています。基本的に、このドライバではタスク上でデータの送受信を行います。また、スタート、ストップ、ACK 処理はソフトウ
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

17

ェア処理にて処理しますので、特別にデータを管理する項目を用意する必要はありません。
図 4.2.3.3.1 に初期化のフローチャートを示します。i2c_init で取得した I2C ハンドラへのポインタは
以後、I2C の制御用に使用する。

図 4.2.3.3.1 初期化フローチャート
図 4.2.3.3.2 にマスタのデータ送信のフローチャート、図 4.2.3.3.3 に受信のフローチャートを示します。送信ならば i2c_memwrite、受信ならば i2c_memread 関数を呼び出せば指定サイズの送受信が行えます。送受信の結果は、関数の戻り値確認できます。E_OK 以外の戻り値の場合エラー処理を行ってください。ペリフェラルには、データアドレスを持つもの（EEPROM や RTC など）があり、送受信のとき、データアドレスの設定を行う必要があります。この場合、MemAddr でデータアドレス、
MemAddSize でデータアドレスのバイトサイズを指定します。データアドレスの設定を行わない場合は、
MemAddrSize をゼロして、送受信関数を呼び出します。
I2C ペリフェラルを終了させたい場合は、引数として I2C ハンドラへのポインタを指定して i2c_deinit関数を呼び出せば、ペリフェラルとハンドラは未使用状態に戻ります。ErrorCode はアプリケーションのプログラム互換用に項目を用意しており、エラーコードは設定されません。

定義

値

I2C_ERROR_NONE
0x00000000
表 4.2.3.3.1 ErrorCode の内容

内容

エラーなし

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

14

図 4.2.3.3.2 I2C 送信フローチャート

図 4.2.3.3.3 I2C 受信フローチャート

5 タスクモニタ
本章では、標準入出力機能付きのタスクモニタの仕様に関して記載する。

5.1 概要タスクモニタはタスク上で動作し、デバッグ用のコマンドを用いてプラットフォーム部の機能確認やテストを行う。デバックコマンドは設定によりコマンド追加が可能である。これによりアプリケーショ
ンでも、アプリケーション用デバッグコマンドを追加することができる。タスクモニタの入出力は標準入出力に対して行う、デフォルトの標準入出力は FMP カーネルにて実装されているシリアルデバイス
であるが、入出力の切り替えにより、telnet の端末等に切り替えが可能である。

5.2 標準入出力
タスクモニタの入出力は標準入出力に対して行う。標準入出力は FILE 型を定義し、入力、出力、エラーの３つの FILE へのポインタを以下の名称で定義することで実現する。
① stdin② stdout③ stderr
FILE 型は表 5.2.1 の構成となる。FILE 型は fread や fwrite でファイルにアクセスする場合のハンドラとして使用される。
番号

項目

型

機能

1
2
3
4
5
6
7
4

_flags_file_func_in_func_ins_func_out_func_outs_func_flush
_dev

int
int
int
int
void
int
int
void *

ファイル用フラグ
ファイル番号
1byte 入力コールバック関数
n bytes 入力コールバック関数
1byte 出力コールバック関数
n bytes 出力コールバック関数
データフラッシュコールバック関数
デバイス構造体へのポインタ

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

19

表 5.2.1 FILE 型
標準入出力では、以下の関数をサポートする。
関数名

型

引数

機能

fgetc
fgets

int
int

ファイルから 1byte 読み込みファイルから文字列読み込み

fputc

int

fputs

int

putcharputs
printf

int
int
int

sprintf

int

scanf

int

sscanfint

fflushfread

int
size_tfwritesize_tfprintf

int

putc

int

FILE *fp
char *c
FILE *fp
int c
FILE *fp
const char *str
FILE *
int c
const char *str
const char const…
char *cconst char const…
const char const…
char *cconst char const…
FILE *fp
void *buf
size_t len
size_t num
FILE *fp
const void *buf
size_t len
size_t num
FILE *fp
FILE *fp
const char *const…
int c
FILE *fp

getchar
getc

int
int
FILE *fp
表 5.2.2 サポートしている標準入出力関数

備考

ファイルに 1byte 書き込みファイルに文字列書き込み
1byte 書き込み
文字列を標準出力に書き込み
標準出力へのプリント
バッファへプリント

標準入力からスキャン
スキャンしバッファにセット

ファイルのフラッシュ
ファイルからデータ読み込み

結果は項目
数
結果は項目
数
結果は項目
数
結果は項目
数

結果は num数

ファイルへデータ書き込み

結果は num数

ファイルへプリント

結果は項目数

fputc と同様
標準入力から 1byte 読み込み
fgetc と同様

5.3 標準デバッグコマンド
タスクモニタは、標準のデバッグコマンドとして以下のコマンドをサポートする。タスクモニタのデバッグコマンドは第１（カテゴリ）、第２の２つのコマンドで機能を指定する形をとる。また、コマンドを設定する場合、最初の１文字以降を省略可能である。省略名で同一のコマンドがある場合、はじめにディスパッチするコマンドが選択される。
第１コマンド第２コマンド

引数

機能

DISPLAY

BYTE
HALF
WORD
TASK
REGISTER
BYTE
HALF

start address[hex]start address[hex]start address[hex]set address[hex]set address[hex]バイト単位でメモリ DUMP する
２バイト単位でメモリ DUMP する
４バイト単位でメモリ DUMP する
タスクの状態を表示する
CPU レジスタの内容を表示する
バイト単位で、メモリ内容を変更する
２バイト単位で、メモリ内容を変更する

SET

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

20

TASK

LOG

HELP

WORD
set address[hex]COMMAND
mode[1 or 2]
SERIAL
portnoTASKtaskidACTIVATETERMINATE SUSPENDRESUMERELEASE
WAKEUPPRIORITY
priority
MODE[logmask][lowmask]
TASK[time]
PORT[no][logno][portaddress]
Arg1
表 5.3.1 標準デバッグコマンド

４バイト単位で、メモリ内容を変更する
デフォルト 2、1 の場合最初の 1 文字のみ比較
標準入出力のシリアルポート番号を変更
TASK コマンドの対象タスクを指定する
タスクの起動要求(act_tsk)
タスクを終了する(ter_tsk)
タスクの待ち要求(sus_tsk)
タスクの待ち再開(rsm_tsk)
タスクの待ち解除(rel_wai)
タスクの起床(wup_tsk)
タスクの優先度を変更する
syslog の表示モードを変更する
タスクの実行状態表示(指定が必要)
ポートアクセスログ
コマンドヘルプ

5.4 デバッグコマンド拡張
タスクモニタは、コマンドを拡張する機能を持つ。コマンドの拡張は第１（カテゴリ）コマンド単位で追加される。

5.4.1 データ仕様
コマンド追加には２つの型を使用する。COMMAND_INFO 型は第２コマンドの設定を行い、COMMAND_LINK 型 は 、 複 数 の COMMAND_INFO 型 を ま と め て 登 録 カ テ ゴ リ を 指 定 す る 。
COMMAND_LINK 型 の pcnext は デ バ ッ グ コ マ ン ド の リ ン ク に 使 用 す る 、 そ の た め 、COMMAND_LINK は値付きの変数で作成しなければならない。
番号

項目

型

機能

1
2

commandconst char *func
int_t (*)()
表 5.4.1.1 COMMAND_INFO 型

第２コマンド名
第２コマンド関数へのポインタ

番号

項目

1
2
3
4
5
6

pcnextCOMMAND_LINK *num_commandint
commandconst char *func
int_t (*)()
help
const char *pcinfoCOMMAND_INFO *表 5.4.1.2 COMMAND_LINK 型

型

機能

COMMAND_LINK のチェーン用
第２コマンドの数
第１（カテゴリ）コマンド名
カテゴリコマンドの実行関数（通常は NULL）
カテゴリの HELP メッセージ
COMMAND_INFO の配列へのポインタ

5.4.2 インターフェイス仕様
デバッグコマンドの追加は、COMMAND_LINK のインスタンスへのポインタを引数に以下の関数コールにて追加される。
関数名

型

引数

setup_command
int
COMMAND_LINK *表 5.4.2.1 デバッグコマンド追加定関数

機能

備考

コマンドカテゴリを追加する

6 API 層
API 層はアプリケーションに対して標準的なインターフェイスを提供する層である。この層はハード
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

21

ウェアや RTOS の仕様に影響されず、一意のインターフェイスを提供することにより、アプリケーショ
ンを汎用的に作成することができる。また、C 言語の規約や POSIX のように汎用的な API に準拠すれ
ば、LINUX 等のオープンソースのライブラリを未修整で使用することができる。

6.1 概要TOPPERS BASE PLATFORM でサポートするストレージ機能で使用するファイルシステムと時刻の管理を行う時間管理の２つの API について説明を行う。
FE310-G000 環境では、使用可能な RAM サイズが小さくファイルシステムは動作しない。

6.2 ファイルシステム
ファイルシステムは TOPPERS BASE PLATFORM で提供するストレージ機能である。ファイルシ
ステムは以下の３つのモジュールで構成される。
① ファイルライブラリ
Ｃ言語標準のファイル関数をサポートするライブラリ② ストレージデバイスマネージャー
ストレージデバイスの管理モジュール③ FATFs
赤松武史氏が開発し、フリーソフトウェアとして公開されている、FAT 仕様準拠のローカルファイルシステム
TOPPERS BASE PLATFORM アプリケーション、ハードウェアを除く部分を供給している。
アプリケーション
C言語標準ファイル関数
STDIOインターフェイス

ファイルライブラリ①
FATFsファイル関数

FATFs③
FATFsドライバ
ストレージデバイスマネージャ(SDM)②

SDMデバイスドライバ関数構造
体（StorgaeDeviceFunc_t）

MCI部
SDMMC
ドライバ

USB
MIDDLE
GDIC

SDMデバイスドライバ関数構造
体（StorgaeDeviceFunc_t）

GDIC
SPI

SDMMC/SPI/USB等ドライバ

OTG
SDカード(MMC/SPI)
USB-MMC

図 6.2.1 ファイルシステムのレイア構造

6.2.1 ファイルライブラリ
ファイルライブラリは標準入出力関数に合わせて、表 6.2.1.1 関数を提供する。これらはＣ言語上のファイル関数とファイル関係の POSIX 仕様であるが、以下の規定に従って関数の選択を行った。
・Ｃ言語標準のもの（C49,C99）
・POSIX.1-2001 でよく使われるもの
・LINUX 固有であるが、通常使用に必要なもの
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

22

関数名

型

引数

機能

備考

open

int

close
fstat

int
int
off_t

ファイルのオープン、ファイルディスクリプタを返す
ファイルのクローズ
ファイルの状態を取り出す。読み
出しサイズを返す
ファイルの読み書き位置を設定する。

エラー時-1 を返す
成功０、失敗-1-1 でエラー

lseek

read

long

write

long

mmap

void *

mumap

int

fopen

FILE*

fclose
fseek

int
int

stat

int

lstat

int

access

int

mkdir

int

rmdir

int

const char *pathname
int flags
int fdint fdstruct stat *buf
int fdoff_t offset
int whence
int fdvoid *buf
long countint fdconst void *buf
long countvoid *start
size_t length
int prot
int flags
int fdoff_t offset
void *start
size_t length
const char *nameconst char *attr
FILE *fp
FILE *fp
long offset
int whence
const char *namestruct stat *buf
const char *namestruct stat *buf
const char *nameint mode
const char *namemode_t mode
const char *name

chmod

int

ファイルモードの変更

removeunlinkrename

int
int
int

opendirvoid *

const char *namemode_t mode
const char *nameconst char *nameconst char *oldpath
const char *newpath
const char *path

closedirint

void *dir

readdir

struct dirent*

void *dirstatfsint

const char *path-1 でエラー

ファイルからデータを読み出す。 0 で終端、-1 で読み出しサイズを返す。
エラー
ファイルにデータを書き込む。書き込みサイズを返す。

-1 でエラー

ファイルをメモリ上に配置する

一部ファイルシステムのみサポート

mmap の解除
ファイルオープン
ファイルクローズファイルの読み書き位置を設定する
ファイルの状態の取出し

成功０、失敗-1

ファイルの状態の取出し

成功０、失敗-1

ファイルの状態の取出し

成功時 0、その他は-1
成功時 0、その他は-1
成功時 0、その他は-1
成功０、失敗-1

ディレクトリの作成
ディレクトリの削除

ファイル削除ファイル削除ファイル名の変更

成功０、失敗-1

path に対応したディレクトリス
トリームをオープンし、ストリー
ムのポインタを返す。
ディレクトリストリームのクローズ
順番にディレクトリから dirent
構造体を読み、dirp で指されたバッファに格納する。
マウントされたファイルシステ

エラー時 NULLTOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

成功０、失敗-1

成功０、失敗-1
POSIX とは I/F
仕様が異なる
成功０、失敗-1

23

struct statfs2*stat
表 6.2.1.1 ファイルライブラリ関数

ムについての情報を返す。

6.2.2 Storage Device Manager
Storage Device Manager は、ストレージデバイスとその下で実行される複数のローカルファイルシ
ステムを管理するモジュールである。

データ仕様

6.2.2.1

Storage Device Manager は以下の４つの型で構成される。最初の２つは関数テーブルであり、表
6.2.2.1.1 の StorageDeviceFunc_t はローカルファイルシステムのデバイスを複数のストレージに対応させるために、関数テーブル化に用いるデバイスファンクションテーブルの型である。実際使用しているローカルファイルシステムが FATFs であるため、FATFs のデバイス I/F の関数テーブルとなっている。表 6.2.2.1.2 の StorageDeviceFileFunc_t 型は、ファイルライブラリを作成するために、ローカル
ファイルシステムのファイル関数をテーブル化するための型である。
番号

項目

1
2
3
4
5
6

_sdev_sens
int (*)()_sdev_diskinitint (*)()_sdev_diskstatusint(*)()_sdev_diskreadint(*)()_sdev_diskwrite
int(*)()_sdev_diskioctl
int(*)()
表 6.2.2.1.1 StroageDeviceFunc_t 型

型

デバイスセンス関数
デバイスの初期化関数
デバイスの状態取出し関数
デバイスブロックリード関数
デバイスブロックライト関数
デバイス IOCTL 関数

番号

項目

機能

1
2
3
4
5
6
7
4
9
10
11
12
13
14
15
16
17

_sdevff_opendir
void *(*)()_sdevff_closedirint (*)()_sdevff_readdirint (*)()_sdevff_mkdir
int (*)()_sdevff_rmdir
int (*)()_sdevff_unlink
int (*)()_sdevff_rename
int (*)()_sdevff_chmodint (*)()_sdevff_stat
int (*)()_sdevff_statfs
int (*)()_sdevff_open
int (*)()_sdevff_closeint (*)()_sdevff_fstat
int (*)()_sdevff_lseek
off_t (*)()_sdevff_readlong (*)()_sdevff_write
long (*)()_sdevff_mmap
void *(*)()
表 6.2.2.1.2 StorageDeviceFunc_t 型

型

機能

opendir 関数
closedir 関数
readdir 関数
mkdir 関数
rmdir 関数
unlink 関数
rename 関数
chmod 関数stat 関数
statfs 関数
open 関数
close 関数
fstat 関数
lseek 関数read 関数write 関数mmap 関数

あとの２つはストレージを管理する型で、表 6.2.2.1.3 StorageDevice_t 型はストレージデバイス自体の情報管理用の型で、表 6.2.2.1.4 StorageDeviceHead_t 型は StorageDevice_t 型のインスタンスを管理するヘッダ部である。表 6.2.2.1.5 は StorageDevice_t 型の_sdev_attribute のビット指定値を示す。
SDEV_INSERTCHK がオンになっていないデバイスでは、メディアの挿抜チェックを行わない。この場合、初期化時のメディアの状態でメディアの有無を決定する。
番号

項目

型

機能

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

24

1
2
3
4
5
6
7
4
9
10
11

_sdev_attributeuint16_t_sdev_devno
uint4_t_sdev_port
uint4_t_sdev_maxsec
uint32_t_sdev_secsize
uint32_t_sdev_instimer
uint16_t_sdev_inswait
uint16_t_sdev_notice
void (*)()_sdev_local[4]void *
pdevf
StorageDeviceFunc_t
pdevffStorageDeviceFileFunc_t*
表 6.2.2.1.3 StroageDevice_t 型

デバイスの状態
デバイス番号
デバイス種別デバイスの最大セクタ数
デバイスのセクタサイズ
挿入タイマー
挿入時待ち時間
検知コールバック関数
ローカルエリア
デバイス関数テーブル
ファイル関数テーブル

番号

項目

機能

1
2
3
4
5

_num_activedev
uint16_t_sdev_active
uint4_t_default_device
uint4_t_get_datetime
uint32_t (*)()_psd
StorageDevice_t *表 6.2.2.1.4 StroageDeviceHead_t 型

型

定義

値

登録済ストレージデバイスの数
デバイスマネージャの有効無効
デフォルトデバイス番号
時刻取出し関数ストレージデバイス配列

内容

SDEV_ACTIVE(1<<15)
デバイスがアクティブの状態
SDEV_INSERTCHK(1<<14)
挿入・排出の設定あり
SDEV_CHKREMOVE(1<<13)
排出検査を行う
SDEV_ONEEXIT(1<<12)
一度以上排出があった
SDEV_EMPLOY(1<<4)
デバイス動作中
SDEV_ERROR(1<<7)
デバイスエラー
SDEV_DEVNOTUSE(1<<0)
デバイス使用不可
SDEV_NOTUSE
255
使用不可のビット定義
表 6.2.2.1.5 _sdev_attribute 設定値

インターフェイス仕様

6.2.2.2

表 6.2.2.2.1 はストレージデバイスマネージャーで使用する関数である。sdev_init 関数にてストレージデ
バイスマネージャーは有効となり、sdev_terminate 関数で無効となる。この間で、ストレージデバイスの管理を行う。まず、SDMSetupDevice 関数でストレージデバイスの登録を行う。デバイス番号を指定して、この関数を呼び出すと、ppsdev にストレージデバイス(StoregeDevice_t)がセットされて戻る。使用者は、戻されたストレージデバイスに以下の属性等をセットする。
① デバイス関数テーブル：デバイスドライバテーブル② ファイル管理テーブル：ローカルファイルシステムに対応したファイル関数テーブル③ 属性：挿抜処理の有無④ ローカルデータ：下位のデバイス等の情報を_sdev_local に設定する
ストレージデバイスに挿抜検知は SDMSense_task で行うが、デバイスに挿抜検知がない場合は、タスクレベルで検知を行う必要はない。この場合、SDEV_SENSE_ONETIME をコンパイルスイッチで定義してビルドすれば関数として設定され、デバイスの登録後、SDMSense_task(0)を関数コールすれば、メディアの有り無し処理を行う。SDMSense_task では、センス関数として psdev->pdevf->_sdevf_sense にてメディアのセンスを行うため、この関数を設定しておく必要がある。
SDMSense_task を使用しない場合は、SDMEmploy 関数を使って直接メディアの有無を設定することができる。
関数名

型

引数

機能

sdev_init

void

intptr_t exinf

ストレージデバイスマネージ

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

備考

25

sdev_terminate

void

SDMSetupDevice

ER

SDMDeviceNo

ER_ID

SDMGetStorageDevice

Storage
Device_t*

int devno

SDMEmployER

SDMSence_task

void

StorageDevice_t *psdev
bool_t sw
intptr_t exinf

int16_t devno
StorageDevice_t **ppsdev
const char **ppathname

ャーを初期化するストレージデバイスマネージ
ャーを終了する
指定のデバイスを追加する
パス名からデバイス番号を取り出す。パス名のデバイス名はスキップする
デバイス番号からストレージ
デバイスへのポインタを取り出す
デバイスの動作中(true)、停止中(false)を設定する
デバイスセンスタスク（関数の場合あり）

表 6.2.2.2.1 ストレージデバイスマネージャー関数
定義

内容

SDEV_SENSE_ONETIME
SDMSense_task を関数として使用
NUM_STORAGEDEVICE
ストレージデバイスの数(デフォルトは 4)
DEAFULT_DEVNO
デフォルトのデバイス番号(通常は 0)
表 6.2.2.2.2 コンパイルスイッチ設定値

6.2.3 FatFs
PLATFORM V1.X では、FAT12,16,32 用のローカルファイルシステムとして FatFs R0.07a を RTOS対応のため一部修正して使用している。また、FatFs のデバイスドライバ(diskio.c)に関しては、複数のストレージに対応可能なようにデバイスファンクションテーブルを呼び出す形で改造を行っている。

6.3 時間管理
RTC デバイスが有効な場合、時間管理関数が有効となる。時間管理では、２つの型を用いて時刻の管理を行う。

6.3.1 データ仕様
表 6.3.1.1 の tm(tm2)構造体は時刻の管理を行う構造体である。tm 構造体はライブラリの time.h 中に定義されている時刻用構造体と同一のものである。tm2 は tm と同一の構造体で、standard device
でローカルに定義しているものである。RTC デバイスの時刻処理は tm2 構造体を使用する。もうひと
つが types.h 等で定義されている time_t 型で 1970 年 1 月 1 日からの経過時間を秒で表す。
番号

項目

1
2
3
4
5
6
7
4
9

tm_secint
tm_minint
tm_hourint
tm_mdayint
tm_monint
tm_yearint
tm_wdayint
tm_ydayint
tm_isdstint
表 6.2.1.1 tm 構造体型

機能

秒(0～59)分(0～59)時(0～23)
月中の日(1～31)
月(1～12)
年：西暦、但し 0 は 1970 年
週中の日(0～6)
年中の日(1～366)

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

26

6.3.2 インターフェイス仕様
tm 構造体と time_t 型との変換する関数として表 6.3.2.1 に関数を用意する。
関数名

型

引数

mktimegmtime_r

time_tstruct tm *機能

struct tm *ptm
const time_t *pt
struct tm *ptm
表 6.3.2.1 時刻管理関数

備考

tm 構造体を time_t に変換する
time_t を tm 構造体に変換する

6.4 UI ミドルウェア
UI ミドルウェアとして、グラフィック LCD に対して、図形描画、文字描画を行うインターフェイス
を追加する。図形描画の API は GDIC/adafuit_st7735 の描画関数を使用する。文字描画は、TOPPERSECHONET WG で作成した東雲フォントの文字環境に対応できるように設計した。

6.4.1 UI ディレクトリ
UI ディレクトリ以下に東雲フォント環境を用意する。UI 機能を取り込むには Makefile のミドルウ
ェアの設定に以下のインクルードを行えばよい。
include $(SRCDIR)/ui/snfont_disp/Makefile.config

フォント

1 バイトフォント高さ

漢字フォント高さ

備考

東雲フォント

9,12,1612,16

漢字フォントはファイ
ルで提供

表 6.4.1.1 UI ディレクトリ
東雲フォントの漢字ビットマップデータは以下のヘッダを持つ、ファイルといて参照する。
以下に漢字フォントビットマップファイルのヘッダを示す。数値はリトルエンディアンとなる。
番号

項目

1
2
3
4
5
6
7
4
9
10
11
12
13
14
15

Magic
0
char [4]“FONT”
Name
4char [32]
フォント名
Fsize
36
unsigned int
ファイルサイズCsize
40
unsigned int
ビットマップデータのコード部のバイト数
Isize44
unsigned int
ビットマップデータのイメージ部のバイト数
off_cnv_table1
44
unsigned int
UTF-4N 2 バイトコード検索テーブルへのオフセット
siz_cnv_table1 52
unsigned int
UTF-4N 2 バイトコード検索テーブルへのコード数
off_cnv_table2
56
unsigned int
UTF-4N 3-1 バイトコード検索テーブルへのオフセット
siz_cnv_table2 60
unsigned int
UTF-4N 3-1 バイトコード検索テーブルへのコード数
off_cnv_table3
64
unsigned int
UTF-4N 3-2 バイトコード検索テーブルへのオフセット
siz_cnv_table3 64
unsigned int
UTF-4N 3-2 バイトコード検索テーブルへのコード数
off_2byte_font72
unsigned int
UTF-4N 2 バイトコード＋イメージへのオフセット
siz_2byte_font
76
unsigned int
UTF-4N 2 バイトコード＋イメージのアイテム数
off_3byte_font
40
unsigned int
UTF-4N 3 バイトコード＋イメージへのオフセット
siz_3byte_font44
unsigned int
UTF-4N 3 バイトコード＋イメージのアイテム数
表 6.4.1.2 東雲フォントファイルのヘッダ部構造体型

機能

7 ファイルの構成
TOPPERS BASE PLATFORM のソースファイル構造について記載する。共通部はファイルシステム
TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

27

やタスクモニタ等共通となる部分について記載する。BASE PLATFORM のソフトウェア部品は asp のベースディレクトリ上に配置する。

7.1 共通部
共通部のディレクトリ構成を表 7.1.1 に示す。
ディレクトリmonitorsyssvc内容

備考

タスクモニタと標準入手力のソースとインクルードファイル
malloc,calloc,free 関数
表 7.1.1 共通部ディレクトリ

7.2 PDIC(Base/Standard)ドライバ
FE310 用 Base/Standard 用ドライバ部は pdic/fe310 にソースファイルがある。
ファイル

内容

device.c
GPIO,DMA,LED,SW ドライバ・ソースファイル
device.cfg
LED,SW の RTOS リソースファイル
device.hGPIO,DMA,LED,SW ドライバ・インクルードファイル
i2c.c
I2C ドライバ・ソースファイル
i2c.h
I2C ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
pinmode.hArduino の GPIO ピン設定・ソースファイル
pinmode.cArduino の GPIO ピン設定・インクルードファイル
表 7.2.1 FE310-G000 ドライバファイル

備考

Base
Base
Base
制約あり
制約あり

K210 用 Base/Standard 用ドライバ部は pdic/k210 にソースファイルがある。
ファイル

内容

device.c
GPIO,DMA,WDOG,RTC ドライバ・ソースファイル
device.cfg
RTC,WDOG の RTOS リソースファイル
device.hGPIO,DMA,WDOG,RTC ドライバ・インクルードファイル
dvp.c
CAMERA ドライバ・ソースファイル
dvp.cfg
CAMARA ドライバ RTOS リソースファイル
dvp.h
CAMARA ドライバ・インクルードファイル
i2c.c
I2C ドライバ・ソースファイル
i2c.h
I2C ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
spi_reg.c
レガシーSPI ドライバ・ソースファイル
pinmode.hArduino の GPIO ピン設定・ソースファイル
pinmode.cArduino の GPIO ピン設定・インクルードファイル
表 7.2.2 K210 ドライバファイル

備考

Base
Base
Base

GD32VF103 用 Base/Standard 用ドライバ部は pdic/gd32vf103 にソースファイルがある。
ファイル

内容

adc.c
adc.h
device.cdevice.cfg
device.h
i2c.c
i2c.h
spi.c
spi.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
GPIO,DMA,WDOG,RTC ドライバ・ソースファイル
RTC,WDOG の RTOS リソースファイル
GPIO,DMA,WDOG,RTC ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

備考

Base
Base
Base

24

pinmode.h
usb_otg.c

Arduino の GPIO ピン設定・ソースファイル
USB-OTG ドライバ・ソースファイル（サンプル実装）

デバイスの
み評価済

usb_oth.h
USB-OTG ドライバ・インクルードファイル
表 7.2.3 GD32VF103 ドライバファイル

7.3 GDIC ドライバ
ディレクトリ gdic 以下に GDIC ドライバを持つ。GDIC ドライバは PDIC に依存性し、デバイスに依存した機能を提供する。
ディレクトリ内容

備考

usb_otg

usb_otg(DWC2-OTG ドライバ)上に位置し、USB ミドルウェアにOTG 機能を提供する
spi_driver
SPI インターフェイスの SD カード用ドライバ、ファイルシステムに
SD カードドライバを提供する
adafruit_st7735
SPI インターフェイスの Adafruit 1.4”LCD に対して、グラフィック
API を提供する
adafruit_ILI9341
SPI インターフェイスの Adafruit 2.4”LCD に対して、グラフィック
API を提供する
aqm1244_st7565
SPI インターフェイスの AQM1244 LCD に対して、
グラフィック APIを提供
aqm0404_st07032
I2C インターフェイスの AQM0404LCD に対してキャラクタ API を提供
bleshield2.1
Arduino BLE Shield2.1 に対して、BLE-API を提供する
sipeed_ov2640
K210 用 ov2640 カメラ機能 API を提供
sipeed_st3349
SPI インターフェイスの K210 用 st3349LCD に対して、グラフィッ
ク API を提供
sipeed_st3375
SPI インターフェイスの longan nano 用 st3375LCD に対して、グラフィック API を提供
表 7.3.1 GDIC ディレクトリ

Longannano 専用

K210 専用
K210 専用
Longannano 専用

8 変更履歴Version 1.0.0 以降の変更履歴を記載する。
versiondate

functions

1.4.2

2020/04/31
2020/12/14

K210 用、YOLO デモ追加
longan nano 対応, ファイルシステムで long name を使用ない設定を可能
する

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

29

Appendix A HI-FIVE1
HI-FIVE1 のボード依存仕様を記載する。
(1)Arduino connectors 定義
CN No.

CN6
power

CN4
analog

CN No.

CN5
digitalCN9degitalPin No.

Pin 名

MCU pin

機能

1
NC
2
IOREF
3
RESET
PIN_AH7(FPGA)
4+3V3
VCC3P3
5
+5V
VCC5
6
GND
GND
7
GND
GND
4
VIN
VCC9
1
A0
13
2
A1
12
3
A2
11
4
A3
10
5
A4
9
6
A5
表 A.1.1 左 Arduino connector 設定
Pin No.

Pin 名

MCU pin3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
-

機能

10
D15
13
9
D14
12
4
AREF
7
GND
6
D13
5
5
D12
4
4
D11
3
3
D10
2
2
D9
1
1
D4
0
4
D7
23
7
D6
22
6
D5
21
5
D4
20
4
D3
19
3
D2
14
2
D1
17
1
D0
16
表 A.1.2 右 Arduino connector 設定

(SCL)
(SDA)
AVDD
Ground
CLK
MISO
MOSI
SS(CS0)
GPIO7
GPIO6
GPIO5
GPIO4
GPIO3
GPIO2
GPIO1
GPIO0
TX
RX

(2)サンプルプログラム
Program nameshieldenvironment

detailLCD
LCD2
bleshield21
ulcdshield

Adafruit 1.4 TFT
Adafruit 2.4 TFT
BLE SHIELD2.1
TEB001
UART/LCD シ ー
ルド

ROM
ROM
ROM
ROM

WDOG
I2C

TEB001I2C シールド

ROM
ROM

グラフィック LCD 表示テストプログラム
グラフィック LCD 表示テストプログラム
BLE ペリフェラルテストプログラム
LWLP の DHCP クライアント、ping テストが可能な実装
但 し 、 デ ィ レ ク ト リ lwip に LWIP の ソ ー ス 設 定(lwip-2.0.3/cntrib-2.0.1)が必要
また、設定ソースに数か所のパッチが必要
ウォッチドックタイマーテスト
AMQ0402 の表示のみ可能

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

30

Appendix B Maixdino
Maixdino のボード依存仕様を記載する。
(1)Arduino connectors 定義
CN No.

CN6
power

CN4
analogPin No.

CN No.

CN5
digitalCN9degitalPin 名

IO pin

機能

1
NC
2
IOREF
3
RESET
PIN_AH7(FPGA)
4+3V3
VCC3P3
5
+5V
VCC5
6
GND
GND
7
GND
GND
4
VIN
VCC9
1
A0
IO33
2
A1
IO32
3
A2
IO35
4
A3
IO34
5
A4
IO39
6
A5
IO36
表 B.1.1 左 Arduino connector 設定
Pin No.

Pin 名

IO pin3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
-

機能

10
D15
IO30
9
D14
IO31
4
AREF
7
GND
6
D13
IO3
5
D12
IO10
4
D11
IO11
3
D10
IO12
2
D9
IO13
1
D4
IO14
4
D7
IO15
7
D6
IO32
6
D5
IO24
5
D4
IO23
4
D3
IO22
3
D2
IO21
2
D1
IO5
1
D0
IO4
表 B.1.2 右 Arduino connector 設定

(SCL)
(SDA)
AVDD
Ground
CLK
MISO
MOSI
SS(CS0)
GPIO7
GPIO6
GPIO5
GPIO4
GPIO3
GPIO2
GPIO1
GPIO0
TX
RX

(2)SD カード接続ピン
Pin No.

機能

IO26
IO27
IO24
IO29

SPI-MISOSPI-SCKSPI-MOSISPI-SS(3)サンプルプログラム
Program name

DEMO
I2C
SDCARDshieldenvironment

detailI2C シールド

RAM
RAM
RAM

カメラ、グラフィック LCD 表示デモ
I2C 表示センステスト、Mainduno では電気的に動作せず
SPI-SDCARD のファイルシステム・テストプログラム

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

31

TEST

-

RAM

ウォッチドックタイマーテスト

Appendix C Longan nano
Longan nano のボード依存仕様を記載する。
(1)SD カード接続ピン
Pin No.

機能

PB14
PB13
PB15
PB12

SPI-MISOSPI-SCKSPI-MOSISPI-SS(2)LCD 接続ピン
Pin No.

機能

PA6
PA5
PA7
PB2
PB1
PB0

SPI-MISOSPI-SCKSPI-MOSISPI-SS
RESET
DC(3)サンプルプログラム
Program name

Shieldenvironment

detail

DEMO
I2C
ADC

-

ROM
ROM
ROM

グラフィック LCD 表示デモ
AQM0402, ADT7410 等、I2C 通信テスト
秋月 Joy Stick を使った ADC テスト(4)その他SPI を DMA で使用すると、実行中ハングアップする。
ADC を DMA で使用すると、実行中まれにハングアップ
USB はデバイスのみ実行可能、CPU クロックを 44MHz の倍数に設定する必要がある

TOPPERS BASE PLATFORM (RV) REFERENCE MANUAL

32