TOPPERS BASE PLATFORM (CV) V1.1.0

担当者

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

竹内良輔（Educational WG）

変更履歴
リリース
0.1.0
0.2.0
0.2.1
0.3.0
0.4.0
1.0.0
1.1.0

日付
2017/01/20
2017/04/21
2017/07/07
2017/08/25
2017/12/05
2018/05/31
2019/03/04

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

変更内容
仮版
FPGA 関係の記述を追加
ファイルシステムのブロック図を追加
FPGA SPI ドライバの記載を追加
TOPPERS USB MEDDLEWARE の対応
LWIP 用 EMAC ドライバの対応/ADC 対応
バージョンアップ、変更履歴詳細に記載

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

目次
変更履歴 ...................................................................................................................................................2
1 背景 ...................................................................................................................................................5
2 目的 ...................................................................................................................................................5
3 TOPPERS BASE PLATFORM (CV)仕様 ........................................................................................5
3.1
プラットフォームのターゲット .................................................................................................5
3.2
レイア構造 .................................................................................................................................5
3.3
開発環境 .....................................................................................................................................7
4 Device Driver 仕様 ...........................................................................................................................7
4.1
Basic Driver ..............................................................................................................................7
4.1.1
概要 ........................................................................................................................................7
4.1.2
ドライバ一覧 ..........................................................................................................................7
4.1.3
GPIO ......................................................................................................................................7
4.1.3.1
データ仕様 ..........................................................................................................................7
4.1.3.2
インターフェイス仕様 ........................................................................................................8
4.1.3.3
フローチャート ...................................................................................................................8
4.1.4
DMA .......................................................................................................................................94.1.4.1
データ仕様 ..........................................................................................................................94.1.4.2
インターフェイス仕様 ......................................................................................................124.1.4.3
フローチャート .................................................................................................................144.1.5
WATCH DOG.......................................................................................................................14
4.1.5.1
データ仕様 ........................................................................................................................14
4.1.5.2
インターフェイス仕様 ......................................................................................................15
4.1.6
TIMER .................................................................................................................................15
4.1.7
UART ...................................................................................................................................15
4.2
Standard Driver ......................................................................................................................15
4.2.1
概要 ......................................................................................................................................15
4.2.2
I2C .......................................................................................................................................16
4.2.2.1
データ仕様 ........................................................................................................................16
4.2.2.2
インターフェイス仕様 ......................................................................................................18
4.2.2.3
フローチャート .................................................................................................................18
4.2.3
SPI .......................................................................................................................................20
4.2.3.1
データ仕様 ........................................................................................................................21
4.2.3.2
インターフェイス仕様 ......................................................................................................24
4.2.3.3
フローチャート .................................................................................................................24
4.2.4
SDMMC ...............................................................................................................................26
4.2.4.1
データ仕様 ........................................................................................................................26
4.2.4.2 インターフェイス仕様 .........................................................................................................28
4.2.4.3 設定手順 ...............................................................................................................................28
4.2.5
USB OTG .............................................................................................................................31
4.2.5.1
データ仕様 ........................................................................................................................31
4.2.5.2 インターフェイス仕様 ............................................................................................................34
4.2.5.3 フローチャート .......................................................................................................................35
4.2.6 QSPI .......................................................................................................................................39
4.2.6.1 データ仕様 ...........................................................................................................................39
4.2.6.2 インターフェイス仕様 ............................................................................................................42
4.2.6.3 フローチャート .......................................................................................................................43
4.2.7 EMAC .....................................................................................................................................43
4.2.7.1 データ仕様 ...........................................................................................................................43
4.2.7.2 インターフェイス仕様 ............................................................................................................45
4.2.7.3 フローチャート .......................................................................................................................45
4.3
FPGA Driver ...........................................................................................................................47

4.3.1
概要 ......................................................................................................................................47
4.3.2
FPGA pinmode ....................................................................................................................48
4.3.2.1
データ仕様 ........................................................................................................................48
4.3.2.2
インターフェイス仕様 ......................................................................................................48
4.3.2.3
設定手順............................................................................................................................48
4.3.3
FPGA uart ...........................................................................................................................48
4.3.3.1
データ仕様 ........................................................................................................................48
4.3.3.2
インターフェイス仕様 ......................................................................................................49
4.3.3.3
フローチャート .................................................................................................................50
4.3.4
FPGA SPI ............................................................................................................................50
4.3.4.1
データ仕様 ........................................................................................................................50
4.3.4.2
インターフェイス仕様 ......................................................................................................51
4.3.4.3
フローチャート .................................................................................................................51
4.3.5
FPGA ADC ...........................................................................................................................52
4.3.5.1
データ仕様 ........................................................................................................................52
5 タスクモニタ ...................................................................................................................................52
5.1
概要 ..........................................................................................................................................525.2
標準入出力 ...............................................................................................................................53
5.3
標準デバッグコマンド .............................................................................................................54
5.4
デバッグコマンド拡張 .............................................................................................................55
5.4.1
データ仕様............................................................................................................................55
5.4.2
インターフェイス仕様 ..........................................................................................................55
6 API 層 .............................................................................................................................................55
6.1
概要 ..........................................................................................................................................55
6.2
ファイルシステム ....................................................................................................................55
6.2.1
ファイルライブラリ .............................................................................................................56
6.2.2
Storage Device Manager .....................................................................................................57
6.2.2.1
データ仕様 ........................................................................................................................57
6.2.2.2
インターフェイス仕様 ......................................................................................................59
6.2.3
FatFs....................................................................................................................................60
6.3
時間管理 ...................................................................................................................................60
6.3.1
データ仕様............................................................................................................................60
6.3.2
インターフェイス仕様 ..........................................................................................................60
6.4
USB ミドルウェア ...................................................................................................................60
6.4.1
USB ホスト機能 ...................................................................................................................60
6.4.2
USB デバイス機能 ...............................................................................................................61
6.5
UI ミドルウェア ......................................................................................................................61
6.5.1
UI ディレクトリ ...................................................................................................................61
7 ファイルの構成 ...............................................................................................................................62
7.1
共通部 ......................................................................................................................................62
7.2
Cyclone V hps ドライバ ..........................................................................................................62
7.3
FPGA ドライバ ........................................................................................................................63
7.4
GDIC ドライバ ........................................................................................................................63
8 変更履歴 ..........................................................................................................................................63
Appendix A DE0-Nano-SoC Development Kit(Atlas-SoC Kit)/DE10-Nano .......................................64
Appendix B DK-DEV-5CSX6N...........................................................................................................65

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

4

1 背景
TOPPERS 教育 WG では、基礎講座を中心とした教材開発を行ってきた。マルチ CPU、FPGA、組込み用 LINUX などの新規の開発技術の対応に伴い上級講座開発することとなった。これに伴い上級講座用の TOPPERS BASE PLATFORM(CV)を開発とその仕様書（リファレンスマニュアル）を作成することとなった。

2 目的
本リファレンスマニュアルは、ターゲットボードとターゲットボード上に作成したソフトウェアプラ
ットフォーム(TOPPERS BASE PLATFORM)の仕様について記載する。
TOPPERS BASE PLATFORM(CV) は Intel 社 Cyclone V SoC HPS と教育 WG で作成した FPGAに対応する。
■ターゲットボード
・Cyclone V SoC 開発キット(DK-DEV-5CSX6N) Intel 社
・DE0-Nano-SoC Development Kit(Atlas-SoC Kit) terasIC 社
・DE10-Nano terasIC 社

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

3.1 プラットフォームのターゲット
TOPPERS BASE PLATFORM(CV) は ２ つ の タ ー ゲ ッ ト ボ ー ド 上 の TOPPERS
FMP-1.3.1/FMP-1.4.0 カーネル上で実行するデバイスドライバとミドルウェアに対応する(FMP-1.3.1
は Version 0.40 まで)。DE0-Nano-SoC には Arduino コネクタが実装されているが、これらは FPGA側に設定されている。FPGA 用サンプル・ドライバは Arduino コネクタに対応している。Arduino コネ
クタを使用するには FPGA の設定を行い、FPGA ドライバを使用する必要がある。
Cyclone V SoC 環境では、DRAM（または SRAM）上でプログラムを実行するのが、基本の実行形態である。また、BOOT のデフォルト設定は SD カードとなっている。Cyclone V SoC の標準的なブートシーケンスは以下の通りである。
① リセット→ブート ROM② →プリローダ③ →ブートローダ(uboot) ブートローダを RTOS に入れ替えれば、ここで実行可能④ →OS 等の立ち上げ
本環境では、FPGA の書き換えを行わず工場出荷時のブート手順でプラットフォームが起動する設定とする。加えてブートローダ部分を教育 WG の ROM モニタが起動するように設定し、FMP は ROM
モニタのダウロード機能を用いて実行する形態をとる。もちろん、ROM モニタをビルド済みの FMP
カーネルに入れ替えれば、カーネルの自動実行が可能となる。
なお、DK-DEV-5CSX6N ボードではプリローダでウォッチ・ドック・タイマーを起動しているため、OS 起動後、周期的にウォッチ・ドック・タイマーリセットを行う必要がある。

3.2 レイア構造
TOPPERS BASE PLATFORM(CV)のハードウェアドライバは下層から３層のレイヤ構造を持ち、その上に API 層、ライブラリの I/F 層をもつ。これらのプラットフォームは、Realtime Kernel TOPPERS
FMP1.3.1 または 1.4.0 上に構築する。また、FMP カーネルのもつデバッグ機能以外に、教育ＷＧで提供するタスクモニタを標準に装備し、システムデバッグ用にデバッグコマンドを用いて開発補助を行う。
図 3.2.1 に TOPPERS BASE PLATFORM (CV)の構造図を示す。Base Driver、Standard Driver、FPGA
Driver、GDIC、File Library、USB ミドルウェア等により、アプリケーションから以下の機能が使用可能になる。
① SD card File system(SDMMC)TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL
5

②
③
④
⑤
⑥
⑦

SPI/ FPGA SPI
Wire(I2C)UART / FPGA UARTQSPIUSB OTG
MAC

図 3.2.1 TOPPERS BASE PLATFORM(CV)構造図

以下に、レイア構造の概要を示す。
(1)basic driver ハードウェア仕様により API が変わるドライバ層(2)standard driver 拡張ボードの標準化により、API がある程度標準化されているドライバ層(3)FPGA driver FPGA に依存したサンプル・ドライバ層(4)GDIC driver 下位の driver を使用して構築する特定のデバイス用 driver(5)TOPPERS BASE PLATFORM で標準化している API 層(6)open source のライブラリ等

PLATFORM(CV)DeviceBasic
DriverDriverStandard
DriverFPGA
Driver (*1)
gdic
api
middlewarehigh driver
File
SystemGraphic UI(Opensource)library

ターゲットボード
gpio
dma
watch doc(timer)(uart)
i2c
spi
sdmmc
qspi
usb OTG
emac
pinmode
uart
spi
fatfs
file library
stdio
ui
USB
lwip (*2)

detail対象の講座
上級１(Reference
Manual)

CLCD/senser/eeprom
GLCD/SD card
SD card
MSC/HIDehernet/PHY driver
Arduino GPIO
Arduino UART
Arduino SPI
デバイス結合FATC language file
stdio
文字グラフィック表示
USB ミドルウェア
プロトコル・スタック

上級２(Reference
Manual)

上級１，２*1：FPGA Driver を使用するには、FPGA の arduino connector 対応が必要*2：一部パッチによる修正が必要：ソースコードは対応 Web からダウンロードする必要がある

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

6

3.3 開発環境
TOPPERS BASE PLATFORM は Windows7 以降のパソコンで cygwin または MIN-GW をインストー
ルし、コンパイラ環境は GCC-ARM の以下のバージョンをインストールし開発を行っている。
(1) gcc version 5.4(GCC ARM:2016q2-20160622)(2) gcc version 5.4(GCC ARM-2016q2-20160926)
V1.0.1 から Intel SOC EDS Command Shell も開発環境として対応可能とする
開発環境を SOC DES Command Shell に変更する場合は、
target/socfpga_cv_gcc/Makefile.target 中の GCC_TARGET 変数を以下のように変更すること
GCC_TARGET = arm-none-eabi↓
GCC_TARGET = arm-altera-eabi(1) Quartus Prime 18.0 用 SOC DES Command Shell

4 Device Driver 仕様
ハードウェア用デバイスドライバの仕様について記載を行う。本 PLATFORM では、３種類のデバイ
スドライバを提供する。

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

4.1.2 ドライバ一覧
Basic Driver として分類するドライバは以下の４つである。
(1) gpio
汎用ＩＯドライバ(2) dma
ダイナミック・メモリ・アクセスドライバ(3) timer
タイマードライバ(4) uart
シリアルドライバ

4.1.3 GPIO
GPIO は汎用のＩＯを制御するドライバである。GPIO はピン設定を入力または出力に設定し、ピンに対してデータを読み込むまたは書き込みことにより、外部のロジックとのデータ交換を行う機能を持つ。機能的には単純であるが、ピンアサイン、ベースの電圧設定、出力モード設定、割込みの対応等、初期化に関して SoC の設計により、設定仕様がまちまちであり、標準的な初期化手順を作ることが難しい。
Cyclone V SoC HPS では３つの GPIO ポートを持ち、ポート１，２では 29 ピン、ポート３では 23
ピンの GPIO ポートを制御可能となっている。

4.1.3.1 データ仕様
Cyclone V HPS の GPIO の初期化に用いるデータと構造体について記載する。GPIO の初期化には表TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

7

4.1.3.1 の GPIO_Init_t 型を使用する。
番号

項目

型

機能

1
2
3

mode
uint32_t
debounce
uint32_t
data
uint32_t
表 4.1.3.1 GPIO_Init_t 型①

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

対象のピンアサインの設定モード
出力 Pull-Up/Pull-Down 設定
出力タイプ Open-drain/Push-Pull 設定

定義

値

GPIO_MODE_INPUTGPIO_MODE_IT_FALLINGGPIO_MODE_IT_RISINGGPIO_MODE_IT_RISING_FALLINGGPIO_MODE_LEVEL_LOW
GPIO_MODE_LEVEL_HIGH
GPIO_MODE_OUTPUT
GPIO_MODE_AF
GPIO_MODE_ANALOG
表 4.1.3.2 mode 設定値

内容0x00000000
0x10010000
0x10110000
0x10210000
0x10000000
0x10100000
0x00000001
0x00000002
0x00000003

GPIO 入力モード
GPIO 入力フォーリングエッジ割込み
GPIO 入力ライジングエッジ割込み
GPIO 入力両エッジ割込み
GPIO 入力 LOW レベル割込み
GPIO 入力 HIGH レベル割込み
GPIO 出力モード
アルタネートピン設定
アナログピン設定② debounce
debounce は GPIO ピンの動作波形を緩やかに設定する機能である。GPIO をスイッチとして使用する場合、ある程度のチャタリングを除去できる。
定義

値

GPIO_NODEBOUNCEGPIO_DEBOUNCE
表 4.1.3.3 debounce 設定値

内容0x00000000
0x00000001

Debounce 機能無効
Debounce 機能有効

③ data
出力設定の場合、初期値を指定可能、値は０または１

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 の出力設定のフローチャートを以下に示す。

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

8図 4.1.1.3.1 GPIO の設定フローチャート
GPIO の入力データをポーリングで取り出す場合、PORT のデータレジスタはハードウェア上の信号レベルを反映しない。このドライバでは、割込みない入力設定でも HIGH-LEVEL 割込み設定で、割込みマスクを行って初期化する。そのため、入力データは割込みステータスレジスタのポーリングで取り出すことができる。

4.1.4 DMADMA は CPU を通さず、直接メモリとデバイスまたはメモリ間でデータ転送を行う機構である。HPSのデバイスは大きな FIFO を持つ場合が多く、デバイスとメモリ間で高速にデータ通信しても、オーバ
ーラン・エラーやアンダーラン・エラーが発生しない。本プラットフォームでは SPI が 256 フレーム
FIFO しか持たないため、FIFO を超えるデータ量が発生した場合用に FIFO モードと DMA モードの選
択実行可能なように実装を行った。
HPS では８チャネルの DMA チャネルを持ち、DMA デバイスドライバはチャネル単位に DMA 設定を行うことができる。

4.1.4.1

データ仕様

DMA ドライバは初期設定と管理用に表 4.1.4.1 の DMACH_Handle_t 型を持つ。このハンドラはチャネル初期化に必要な項目と、生成後入れ替え可能な項目がある。設定の項に○が入っている項目が、チャネルのオープン時に設定が必要な項目である。
番号

項目

型

機能

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

dmach_id
periph_info
periph_can
periph_sec
irq_sec
evt_req
event
dummy
phandlepbuff
xfersize
xfercounterrorcode
dma_start
dma_enduint8_tuint8_tuint8_tuint8_tuint8_tuint8_tuint8_tuint8_tuint32_t
void*
uint8_tuint32_t
uint32_t
ER (*)()
void (*)()

DMA のチャネル番号ペリフェラル番号
CAN/FPGA 選択
セキュア設定割込みセキュア設定
イベントの指定を行う
転送モード設定
リザーブ
ペリフェラルのハンドラへのポインタ
転送対象メモリアドレス
転送データ長
転送済カウンタ
DMA エラーコード
DMA 設定用のコールバック関数
DMA 終了時のコールバック関数

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

設定

○
○
○
○
○
○

9

16
17
18
19
20
21
22
23

①

flag
uint16_t
DMA コード管理領域：ユーザーの設定不要
code_size
uint16_t
DMA コード管理領域：ユーザーの設定不要
loop0
uint16_t
DMA コード管理領域：ユーザーの設定不要
loop1
uint16_t
DMA コード管理領域：ユーザーの設定不要
sar
uint16_t
DMA コード管理領域：ユーザーの設定不要
daruint16_t
DMA コード管理領域：ユーザーの設定不要
programuint8_t*
DMA コード管理領域：ユーザーの設定不要
bufferuint8_t[]
DMA コード管理領域：ユーザーの設定不要
表 4.1.4.1 DMACH_Handle_t 型

dmach_iddmach_id はチャネルのオープン時自動設定されるため、DMACH_Handle_t に直接設定を行う
必要はない。
定義

DMA1_CHANNELID
DMA2_CHANNELID
DMA3_CHANNELID
DMA4_CHANNELID
DMA5_CHANNELID
DMA6_CHANNELID
DMA7_CHANNELID
DMA8_CHANNELID
表 4.1.4.2 ChannelID

②

値

1
2
3
4
5
6
7
8

内容

チャネル１
チャネル２
チャネル３
チャネル４
チャネル５
チャネル６
チャネル７
チャネル８

periph_info
DMA がペリフェラルに対応する場合、ペリフェラル番号を設定する。4 から 7 は CAN モジュー
ルと FPGA の共用であるため、どちらを指定するか periph_can で再設定する必要がある。
定義

DMA_PERIPH_FPGA_0
DMA_PERIPH_FPGA_1
DMA_PERIPH_FPGA_2
DMA_PERIPH_FPGA_3
DMA_PERIPH_FPGA_4_OR_CAN0_IF1
DMA_PERIPH_FPGA_5_OR_CAN0_IF2
DMA_PERIPH_FPGA_6_OR_CAN1_IF1
DMA_PERIPH_FPGA_7_OR_CAN1_IF2
DMA_PERIPH_I2C0_TX
DMA_PERIPH_I2C0_RX
DMA_PERIPH_I2C1_TX
DMA_PERIPH_I2C1_RX
DMA_PERIPH_I2C2_TX
DMA_PERIPH_I2C2_RX
DMA_PERIPH_I2C3_TX
DMA_PERIPH_I2C3_RX
DMA_PERIPH_SPI0_MASTER_TX
DMA_PERIPH_SPI0_MASTER_RX
DMA_PERIPH_SPI0_SLAVE_TX
DMA_PERIPH_SPI0_SLAVE_RX
DMA_PERIPH_SPI1_MASTER_TX
DMA_PERIPH_SPI1_MASTER_RX

値

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

内容

FPGA0
FPGA1
FPGA2
FPGA3
FPGA4 または CAN0_IF1
FPGA5 または CAN0_IF2
FPGA6 または CAN1_IF1
FPGA7 または CON1_IF2
メモリから I2C0
I2C0 からメモリ
メモリから I2C1
I2C1 からメモリ
メモリから I2C2
I2C2 からメモリ
メモリから I2C3
I2C3 からメモリ
メモリから SPIM0
SPIM0 からメモリ
メモリから SPIS0
SPIS0 からメモリ
メモリから SPIM1
SPIM1 からメモリ

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

10

DMA_PERIPH_SPI1_SLAVE_TX
DMA_PERIPH_SPI1_SLAVE_RX
DMA_PERIPH_QSPI_FLASH_TX
DMA_PERIPH_QSPI_FLASH_RX
DMA_PERIPH_STM
DMA_PERIPH_UART0_TX
DMA_PERIPH_UART0_RX
DMA_PERIPH_UART1_TX
DMA_PERIPH_UART1_RX
表 4.1.4.3 periph_info 設定値

22
23
24
25
26
28
29
30
31

メモリから SPIS1SPIS1 からメモリ
メモリから QSPIQSPI からメモリ
System Trace Macrocell
メモリから UART0
UART0 からメモリ
メモリから UART1
UART1 からメモリ③ periph_can
periph_info が CAN モジュールと FPGA の共用の場合、どちらかを再定義する。0:FPGA、1:CAN④ periph_sec
セキュア設定を行うかどうかの指定、0:行わない、1:行う⑤ ireq_sec
割込みのセキュア設定を行うかどうかの指定、0:行わない、1:行う⑥ evt_req
イベント設定を行う。このドライバでは DMA_EVENT_INTREQ を設定してください。
定義

DMA_EVENT_NONE
DMA_EVENT_REQ
DMA_EVENT_INTREQ
表 4.1.4.4 evt_req 設定値

値

0
1
2

内容

イベントを発生させないイベントを要求する
割込みをイベントとして要求する⑦ event
発生イベントを指定する。本ドライバでは DMA チャネル ID に対応したイベントを指定してください。
定義

DMA_EVENT_0
DMA_EVENT_1
DMA_EVENT_2
DMA_EVENT_3
DMA_EVENT_4
DMA_EVENT_5
DMA_EVENT_6
DMA_EVENT_7
DMA_EVENT_ABOUT
表 4.1.4.5 Mode 設定値

値

0
1
2
3
4
5
6
7
8

対応

DMA1_CHANNELID
DMA2_CHANNELID
DMA3_CHANNELID モード
DMA4_CHANNELID
DMA5_CHANNELID
DMA6_CHANNELID
DMA7_CHANNELID
DMA8_CHANNELID⑧ phandle
DMA がペリフェラルに対応する場合、DMA チャネルハンドラをオープン後、ペリフェラルのハ
ンドラを登録する。
⑨ pbuff
ペリフェラルでデータ転送の対象となるメモリ領域の先頭ポインタ、dma_start 関数で設定する。
⑩ xfersize
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

11⑪ ペリフェラルでデータ転送の対象となるメモリ領域のバイトサイズ、dma_start 関数で設定する。
⑫ xfercount
DMA 転送時の転送カウンタ、xfersize と一致すれば、転送終了。
⑬ errorcode
DMA 転送エラー発生時のエラーコード
定義

値

DMA_ERROR_NONE
0x00000000
DMA_ERROR_CH_UNDEFINST
0x00000001
DMA_ERROR_CH_OPEINVALID
0x00000002
DMA_ERROR_CH_EVTERR
0x00000004
DMA_ERROR_CH_PERIPERR
0x00000008
DMA_ERROR_CH_RDWRERR
0x00000010
DMA_ERROR_CH_MFFOERR
0x00000020
DMA_ERROR_CH_DATAUNAVAL 0x00000040
DMA_ERROR_CH_INSTFETERR
0x00000080
DMA_ERROR_CH_DWRITEERR
0x00000100
DMA_ERROR_CH_DREADERR
0x00000200
DMA_ERROR_CH_DBGINST
0x00001000
DMA_ERROR_CH_LOCKUPERR
0x00002000
DMA_ERROR_MG_UNDEFINST
0x00010000
DMA_ERROR_MG_OPEIVALID
0x00020000
DMA_ERROR_MG_DMAGOERR
0x00040000
DMA_ERROR_MG_EVNTERR
0x00080000
DMA_ERROR_MG_INSTFETERR 0x00800000
DMA_ERROR_MG_DBGINST
0x01000000
表 4.1.4.6 errorcode 設定値

内容

エラーなし
チャネル・インストラクション未定義
チャネル・オペランド不良
チャネル・イベントエラー
チャネル・ペリフェラルエラー
チャネル・READ/WRITE エラー
チャネル・MFIFO エラー
チャネル・データアベーラベルエラー
チャネル・インストラクション・フェッチエラー
チャネル・データ WRITE エラー
チャネル・データ READ エラー
チャネル・デバッグインストラクションエラー
チャネル・ロックアップエラー
マネージャー・インストラクション未定義
マネージャー・オペランド不良
マネージャー・DMAGO エラー
マネージャー・パーミッションエラー
マネージャー・インストラクション・フェッチエラー
マネージャー・デバッグインストラクションエラー

⑭ dma_start
ペリフェラル用 DMA 初期化、スタート設定コールバック関数⑮ dma_end
DMA 転送終了時に呼び出されるコールバック関数、呼び出しには、イベントリクエスト設定を割込み(evt_req=DMA_EVENT_INTREQ)、イベント定義(event)をチャネルに対応したイベントに設定しなければならない。

4.1.4.2

インターフェイス仕様

DMA を制御するドライバ関数を以下に示す。HPS 用の DMA はメモリ上に DMA コードを記載し、
dma_channel_exe 関 数 に よ り 、 DMA を 起 動 す る 形 で 実 行 さ れ る 。 dma_program_start か ら
dma_program_end までの関数は、DMA チャネルハンドラ内の buffer 領域に DMA コードを記載する
ためのプログラムである。
関数名

型

引数

機能

dma_initvoid

intptr_t exinf

dma_deinit
dma_channel_open

void
ER

DMA デバイスの初期化を行う。
DMA を未使用状態に戻す
DMA チャネルをスタート

void
ID channelid
DMACH_Handler_t *hdmach
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

備考

12

dma_channel_close

ER

DMACH_Handler_t *hdmach

dma_periph_transfer

ER

DMACH_Handler_t *hdmach
void *addr
uint32_t size

dma_memory_to_memoryER

dma_zero_to_memoryER

dma_channel_exec
dma_channel_state
dma_hps_isr

ER
ER
void

DMACH_Handler_t *hdmach
void *dst
void *src
uint32_t size
DMACH_Handler_t *hdmach
void *buf
uint32_t size
DMACH_Handler_t *hdmach
DMACH_Handler_t *hdmach
intprt_t exinf

dma_program_start
dma_program_moveERER

dma_program_mode

ER

dma_program_lpstartER

dma_program_lpend

ER

dma_program_periphERdam_program_end

ER

DMACH_Handler_t *hdmach
DMACH_Handler_t *hdmach
uint8_t chan_reg
uimt32_t val
DMACH_Handler_t *hdmach
uint8_t mode
uint8_t inst
DMACH_Handler_t *hdmach
uint8_t iterations
DMACH_Handler_t *hdmach
uint8_t mode
uint8_t iteration
DMACH_Handler_t *hdmach
uint8_t mode
bool_t in
DMACH_Handler_t *hdmach
bool_t wmb

させる。
DMA チャネルを停止させる。
ペリフェラルの DMA 設定を行う。dma_start を設定する必要がある
メモリ to メモリのデータ転送メモリに ZERO フィルを行う
DMA コードを実行する
DMASTATE を取り出す
ストリーム DMA の割込み
ハンドラ
DMA コード：作成開始要求
DMA コード：MOVE 設定

DMA コード：モード設定

DMA コード：ループスタート
DMA コード：ループ終了

DMA コード：ペリフェラル
設定
DMA コード：終了要求

表 4.1.4.7 DMA 設定関数
DMA STATE の内容を表 4.1.4.8 に示す。
定義

値

内容

DMA_STATE_STOPPEDDMA_STATE_EXECUTINGDMA_STATE_CACHE_MISSDMA_STATE_UPDATING_PC
DMA_STATE_WFE
DMA_STATE_AT_BARRIERDMA_STATE_WFP
DMA_STATE_KILLINGDMA_STATE_COMPLETINGDMA_STATE_FAULTING_COMPLETINGDMA_STATE_FAULTING
表 4.1.4.8 DMA STATE 設定値

0
1
2
3
4
5
7
8
9
14
15

停止状態
実行状態
キャッシュミスが発生した
PC のアップデート
イベント待ち状態
At Barrier
ペリフェラル待ち状態
中断中
終了状態
エラーあり、終了状態
エラー状態

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

13

4.1.4.3

フローチャート

DMA 処理は DMA 全体の初期化と DMA チャネルを使用した転送処理に分けられる。HPS の場合、
DMA チャネルは８つ用意されており、DMA オープン時の DMA チャネルハンドラへの設定により、使用用途が決定する。DMA モジュールの初期化は dma_init 関数にて行う。DMA モジュールを使用しない場合は、dma_deinit 関数にて停止する。
初期化終了後、DMA チャネルを使用する場合は、DMA チャネル ID と DMA チャネルハンドラ（領域は自分で確保）へのポインタを渡して dma_channel_open 関数を呼び出す。正常終了ならば、指定のDMA チャネルは使用可能となる。DMA チャネルが不要となった場合は、dma_channel_close 関数にて DMA チャネルを解放する。
本 DMA モジュールを使用可能なペリフェラルは表 4.1.4.3 periph_info で設定可能なペリフェラルのみである。SPI モジュールを DMA 用いて使用する場合の設定手順をフローチャートで示す。SPI は送信、受信の両方に DMA を使用可能であるが、説明を簡略化するために受信で DMA を使用する手順の説明を行う。この場合、送信は FIFO を用いた割込み送信となる。DMA 用の割込みサービスルーチン
は device.cfg で設定済みなので新たに設定を行う必要はない。
SPI 受信 DMA 初期設定フローチャートを図 4.1.4.3.1 に示す。この設定で SPI の送信、受信処理を行えば受信側が DMA 実行となる。

図 4.1.4.3.1 SPI-DMA 初期化
現状、BASE PLATFORM(CV)では SPI 以外のドライバは DMA モードに対応していない注１）
periph_info に対応してペリフェラルを DMA 化するには、dma_start と dma_end 関数を自作しなけ
ればならない。
注１）USB OTG モジュールはモジュール自体に DMA 機能を持つ。

4.1.5 WATCH DOG
WATCH DOG はシステムに異常が発生した場合、リセットを行う機能である。システムは WATCH
DOG TIMER を起動し、一定周期でタイマーのリセットを行うことにより WATCH DOG に正常動作を通知する。Hps は複数の WATCH DOG 機能を持つが、このドライバは L4 Watch Dog Timer の制御を行う。

4.1.5.1

データ仕様

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

項目

値

機能

1
WDOG1_PORTID
1
L4 Watch Dog のポート 0 を示す
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

14

2

WDOG2_PORTID
2
L4 Watch Dog のポート 1 を示す
表 4.1.5.1.1 WATCH DOG ポート番号

4.1.5.2

インターフェイス仕様

WATCH DOG を制御するドライバ関数は以下の通りである。タイムアウトクロックは 2147483648
クロックに固定、regtim は 0～15 の範囲でレギュラータイムアウト値、inittim は 0～15 の範囲でイニシャルタイムアウト値を設定する。
関数名

型

引数

機能

wdog_initER

ID portid

wdog_deinit
wdog_start

ER
ER

指定ポート ID の WATCH DOG ペ
リフェラルを初期化する
WATCH DOG を未使用状態に戻す
WATCH DOG スタートさせる

ID portid
ID portid
uint8_t regtim
uint8_t initnum
wdog_stopER
ID portid
wdog_resetER
ID portid
表 4.1.5.2.1 WATCH DOG ドライバ関数

備考

WATCH DOG を停止させる
タイマーのリセットを行う

4.1.6 TIMER
TIMER は一般的に使用される周期タイマー割込み以外に特殊な機能を持つものもある。例えば PWM
出力の設定のようなクロック生成にも使用されるため、ドライバの API を統一することは難しい。RTOSのシステムタイマーとして使用する場合は、fmp カーネル内に記述があるため、それを参照して頂きたい。

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

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

4.2.1 概要
BASE PLATFORM (CV)として、スタンダードドライバとしたのは、以下の５つのペリフェラルである。いずれもインターフェイス用のペリフェラルであり、接続先にセンサー、LCD、GLCD、SD card、
ネットワークハードウェア等の機器の制御用に用いられる。個々のハードウェアのドライバは別途上位に用意しなければならない。（SPI 用は SPI xDriver を用意している）
① I2C
② SPI
③ SDMMC④ USB OTG
⑤ QSPI
スタンダードドライバは、基本的にポート ID を指定してハンドラを取り出しハンドラを用いてペリフ
ェラルを制御する構成を取る。
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

15

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

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

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

項目

型

機能

1
2
3
4
5
6
7
8
9
10

ClockSpeed
uint32_t
通信クロックスピード(bps)AddressingMode
uint32_t
アドレスモード(7bit or 10bit)
OwnAddress1
uint32_t
スレーブアドレス１(スレーブの場合のみ)
GenealCallModeuint32_t
ジェネラルコールモード設定
SdaHoldClockuint16_t
SDA のホールドクロック数
restart_enable
uint8_t
マスタ リスタート有効設定
fs_spklen
uint8_t
FS スパイク除去幅
nack_enable
uint8_t
スレーブモード NACK 生成有効設定
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.2.2.1.1 HPS I2C コンフィギュレーション型

コンフュギュレーション型は、TOPPERS BASE PLATFORM(ST)に合わせた設計を行ったが、かなりの差異がある。これは、hps 用 I2C ペリフェラルの設計が ST マイクロエレクトロニクス社の設計とは大きく異なるためである。
semid はセマフォ通信用のセマフォ番号、ゼロで設定なし。このセマフォは割込みとドライバ間の伝達用に使用するため、設定なしの場合、通信遅延が発生する。smlock は、ドライバの排他制御に使用するセマフォ番号を指定する。ゼロの設定で排他制御なしとなる。
番号

項目

型

機能

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

16

1
2
3
4
5

base
Init
pBuffPtr
XferSize
XferCount

6
7
8
9
10
11
12
13
14

uint32_t
I2C_Init_t
uint8_t *uint16_t
volatile
uint16_t
XferFifo
volatile
uint16_t
writecallback
void (*) ()readcallback
void (*) ()errorcallback
void (*) ()StatusID
ErrorCodevolatile
uint32_t
PortID
volatile
uint32_t
Statusuint8_t
ErrorCodeuint8_t
表 4.2.2.1.2 I2C ハンドラ型

I2C ベースアドレス
I2C コンフィギュレーション型
通信データ領域へのポインタ
通信バイト数
通信済みバイト数
転送 FIFO カウンタ
書き込みコールバック関数
読み込みコールバック関数
エラー発生時コールバック関数
I2C ドライバの状態
I2C エラーコード
I2C ポート ID
I2C リスタートモード(内部使用)
I2C ストップモード(内部使用)①

ClockSpeed
転送スピードを周波数で設定する②

AddressingModeI2C のアドレッシング・モードを設定する。
定義

値

I2C_ADDRESSINGMODE_7BIT0x00000000
I2C_ADDRESSINGMODE_10BIT
0x00000001
表 4.2.2.1.3 AddressingMode 設定値

内容

7 ビットモード
10 ビットモード③ OwnAddress
自分のアドレス、マスタならばゼロを設定(設定されない)、スレーブならばスレーブアドレスを設定する。
④ GeneralCallMode
ジェネラルコールモード設定、無効ならばゼロを設定、有効ならば１を設定。
⑤ SdaHoldClockSDA のホールドクロックを周波数で設定、レンジは 0～65535。
⑥ restart_enable
マスタ・リスタート設定(マスターのみ)、通常は有効。
定義

値

I2C_RESTART_DISABLE
0x00000000
I2C_RESTART_ENABLE
I2C_CON_IC_RESTART_EN
表 4.2.2.1.4 restart_enable 設定値

内容

リスタート無効
リスタート有効⑦ fs_spklen
FS スパイクの除去幅を設定、レンジは 0～255。
⑧ nack_enable
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

17

スレーブモードのみ、NACK 有効無効設定、無効ならばゼロを設定、有効ならば１を設定。

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

型

引数

機能

i2c_init

I2C_Handler*

ID portid
I2C_Init_t *ii2ci2c_deinit
i2c_slavewriteERER

i2c_slavereadER

i2c_memwriteER

i2c_memreadERi2c_int_enablei2c_int_disable
i2c_hps_isr

void
void
void

I2C_Handler* hi2c
I2C_Handler* hi2c
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
I2C_Handler* hi2c
intptr_t exinf

指定ポート ID の I2C ペリフェラルを初期化し、ハンドラへのポインタを返す
I2C を未使用状態に戻す
スレーブモードのデータ送信

備考

スレーブモードのデータ受信

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

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

I2C 割込み許可
I2C エラー禁止
I2C イベント割込みサービスルーチ
ン

表 4.2.2.2.1 I2C ドライバ関数

4.2.2.3 フローチャート
I2C の初期設定は、i2c_init 関数を指定して対象ポート番号と初期設定したコンフィギュレーション
構造体のポインタを指定します。BASE PLATFORM を使用する環境ではマスタとして使用しますので、マスタからペリフェラルとの通信方法について記載します。基本的に、このドライバでは割込みを使用
してデータの送受信を行います。また、スタート、ストップ、ACK 処理はペリフェラル側で処理しま
すので、マスタの場合、スレーブアドレスと送受信するデータ領域へのポインタと転送サイズを指定します。スレーブの場合、初期化でスレーブアドレスをセットして、送受信関数でバッファの設定を行います。PLATFORM はスレーブなることはないと思われますのでスレーブの説明は行いません。
図 4.2.2.3.1 に初期化のフローチャートを示します。i2c_init で取得した I2C ハンドラへのポインタは
以後、I2C の制御用に使用する。

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

18

図 4.2.2.3.1 初期化フローチャート
図 4.2.2.3.2 にマスタのデータ送信のフローチャート、図 4.2.2.3.3 に受信のフローチャートを示します。送信ならば i2c_memwrite、受信ならば i2c_memread 関数を呼び出せば指定サイズの送受信が行えます。送受信の結果は、関数の戻り値確認できます。E_OK 以外の戻り値の場合エラー処理を行ってください。ペリフェラルには、データアドレスを持つもの（EEPROM や RTC など）があり、送受信のとき、データアドレスの設定を行う必要があります。この場合、MemAddr でデータアドレス、
MemAddSize でデータアドレスのバイトサイズを指定します。データアドレスの設定を行わない場合は、
MemAddrSize をゼロして、送受信関数を呼び出します。
I2C ペリフェラルを終了させたい場合は、引数として I2C ハンドラへのポインタを指定して i2c_deinit関数を呼び出せば、ペリフェラルとハンドラは未使用状態に戻ります。
I2C の割込みはイベント割込みとエラー割込みがあり、イベント割込みは I2C 内部のデータ遷移用に使用され、エラー発生時のみエラー割込みが発生します。エラー内容は、ハンドラの ErrorCode に設定される。ErrorCode がゼロの場合はエラーなしで、エラーが発生した場合の ErrorCode の値は表
4.2.2.3.1 の ErrorCode の内容に示す。
定義

値

I2C_ERROR_NONE
0x00000000
I2C_ERROR_RXUNDR
0x00000001
I2C_ERROR_RXOVR
0x00000002
I2C_ERROR_TXABOUT
0x00000004
I2C_ERROR_TXOVR
0x00000008
I2C_ERROR_TIMEOUT
0x00000020
I2C_ERROR_SIZE
0x00000040
表 4.2.2.3.1 ErrorCode の内容

内容

エラーなし
受信アンダーラン
受信オーバーラン
送信アボート
送信オーバーラン
転送タイムアウト（未実装）
転送サイズエラー（未実装）

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

19

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

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

4.2.3 SPISPI はシリアル・ペリフェラル・インターフェイスの略で、I2C と同様にペリフェラル間の通信規格である。I2C が高速でも 400kbps であるのに比べ SPI は 1Mbps から 20Mbps まで高速転送が可能である。特に受信で使用する場合、HPS では FIFO フレームが 256 しかないため、それ以上のデータ受信
ではポーリングや割込みではオーバーラン・エラーとなってしまう場合が多い、そのため、本デバイス
ドライバでは、割込み FIFO と DMA 転送を選択できる設計とした。SPI は４本の信号で通信を行う。
スレーブが複数ある場合は、SS(Slave Select)を LOW にしたスレーブに対して通信を行う。そのため、
SS 信号はスレーブの数だけ必要となる。また、双方向通信時は MISO と MOSI は同時にデータ通信するので、同時にデータ交換が行われる形となる。
① SCLK
クロック信号
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

20

② MISO③ MOSI④ SS

スレーブからのデータ信号
マスタからのデータ信号
スレーブのセレクト信号

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

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

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

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11

DataSize
FrameMode
CLKPolarity
CLKPhase
XferMode
Speed
RxSampleDelay
LoopBack
SlaveOut
CtlFrameSize
MwModeuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

SPI 転送データサイズ
SPI 転送モード設定
SPI 転送クロックの極性
SPI クロック位相
SPI デフォルト転送モード
SPI 転送スピード設定
SPI Master：受信サンプルデレィ
SPI Master：ループバックモード設定
SPI Slave：アウトプット・イネーブル
SPI Microware：コントロールフレームサイズ
SPI Microware：転送モード

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

21

12
13
14
15

MwDir
uint32_t
SPI Microware：転送方向
MwHandshakeuint32_t
SPI Microware Master：ハンドシェーク設定
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.2.3.1.1 SPI コンフィギュレーション型

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

項目

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

base
Init
clock_freq
op_modexmode
ptxbuff
txxfersize
txxfercountprxbuff
rxxfersize
rxxfercounthdmachtx
hdmachrx
errorcode型

機能

uint32_t
SPI_Init_t
uint32_t
uint16_t
uint16_t
uint8_t *uint32_t
uint32_t
uint8_t *uint32_t
uint32_t
DMACH_Handle_t*
DMACH_Handle_t*volatile
uint32_t
表 4.2.3.1.2 SPI ハンドラ型

SPI ベースアドレス
SPI コンフィギュレーション型
送信データ領域へのポインタ
マスタ、スレーブ設定
現在のマスタ SPI 転送モード
送信データ領域へのポインタ
送信フレーム数
送信済みフレーム数
受信データ領域へのポインタ
受信フレーム数
受信済みフレーム数
送信用 DMA ハンドラ
受信用 DMA ハンドラ
SPI エラーコード① DataSize
SPI データ転送ビットサイズ、レンジは 4～16。
② FrameMode
SPI 通信方式のモード設定。
定義

値

内容

SPI_FRM_SPI
0x00000000
SPI_FRM_SSP
0x00000010
SPI_FRM_MICROWIRE
0x00000020
表 4.2.3.1.3 FrameMode 設定値

モトローラ SPI モード
TI 転送モード
Microwire 転送モード③ DataSize
SPI のフレーム中のビットサイズを指定する。レンジは 4 以上、16 以下。
④ CLKPolarity
SPI 転送クロック極性定義。
定義

値

SPI_POLARITY_LOW
0x00000000
SPI_POLARITY_HIGH
SPIM_CTLR0_SCPOL
表 4.2.3.1.4 CLKPolarity 設定値

内容

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

値

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

内容22

SPI_PHASE_1EDGE
0x00000000
SPI_PHASE_2EDGE
SPIM_CTLR0_SCPH
表 4.2.3.1.5 CLKPhase 設定値

前縁ラッチ
後縁ラッチ

⑥ XferMode
SPI のデフォルトの転送モードを設定する。マスタの場合、転送関数にて転送モードの切り替えが可能である。スレーブの場合は切り替え不可である。
定義

値

SPI_XMOD_TXRX
0x00000000
SPI_XMOD_TX
0x00000100
SPI_XMOD_RX
0x00000200
表 4.2.3.1.6 XferMode 設定値

内容

転送モード送受信
転送モード送信
転送モード受信⑦ Speed
SPI 転送周波数を設定する。
⑧ RxSampleDelay
マスタの場合、受信のサンプルデレィを設定する。レンジは 0 から 4 まで。
⑨ LoopBack
マスタの場合、ループバック設定を行える。
定義

値

SPI_LOOPBACKOFF
0x00000000
SPI_LOOPBACKON
SPIM_CTLR0_SRL
表 4.2.3.1.7 LoopBack 設定値

内容

TI モード無効
TI モード有効⑩ SlaveOut
スレーブの場合、アウトプット有効無効設定、マスタからのブロードキャスト送信に対する応答
動作を指定する。
定義

値

SPI_SLAVEOUTDISABLE
0x00000000
SPI_SLAVEOUTENABLE
SPIS_CTLR0_SLV_OE
表 4.2.3.1.8 SlaveOut 設定値

内容

アウトプット無効
アウトプット有効⑪ CtlFrameSize
FrameMode が Microwire 設定のみ有効、コントロールフレームサイズを設定する。レンジは 1
から 16 まで。
⑫ MwMode
FrameMode が Microwire 設定のみ有効、転送モードを設定する。
定義

値

SPI_MW_NON_SEQUENTIAL
0x00000000
SPI_MW_SEQUENTIAL
SPIM_MWCR_MWMOD
表 4.2.3.1.9 MwMode 設定値

内容

非シーケンシャルシーケンシャル

⑬ MwDir
FrameMode が Microwire 設定のみ有効、通信方向を指定する。
定義

値

SPI_MW_DIR_RX
0x00000000
SPI_MW_DIR_TX
SPIM_MWCR_MDD
表 4.2.3.1.10 MwDir 設定値⑭ MwHandshake
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

内容

受信
送信

23

FrameMode が Mirocwire 設定で、マスタの場合のみ有効、ハンドシェーク設定を行う。
定義

値

内容

SPI_MWHANDSHAKE_DISABLE 0x00000000
SPI_MWHANDSHAKE_ENABLE
SPIM_MWCR_MHS
表 4.2.3.1.12 MwHandshake 設定値

無効
有効4.2.3.2 インターフェイス仕様
SPI を制御するドライバ関数は以下の通りである。SS の設定は、GPIO を使って別途制御しなければ
ならない。
関数名

型

引数

機能

spi_init

SPI_Handle_t*

ID portid
SPI_Init_t *spii

spi_deinit
spi_transmit

ER
ER

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

SPI_Handle_t* hspi
SPI_Handle_t* hspi
uint32_t slave_selectuint8_t *tx_buf
uint32_t len
spi_receiveER
SPI_Handle_t* hspi
uint32_t slave_selectuint8_t *rx_buf
uint32_t len
spi_transrecv
ER
SPI_Handle_t* hspi
uint32_t slave_selectuint8_t *tx_buf
uint8_t *rx_buf
uint32_t len
spi_hps_isr
void
intptr_t exinf
表 4.2.3.2.1 SPI ドライバ関数

備考

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

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

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

4.2.3.3 フローチャート
SPI ドライバは、FIFO による通信と DMA による通信を指定できるように設計しています。SPI の
初期設定は、spi_init 関数を指定して対象ポート番号と初期設定したコンフィギュレーション構造体のポインタを指定します。
ハンドラ内の hdmachtx に送信用 DMA チャネルハンドラを設定した場合のみ、送信が DMA モードで行われます。また、ハンドラ内の hdmachrx に受信用 DMA ハンドラを設定した
場合のみ、受信が DMA モードで行われます。したがって、FIFO と DMA を混在させた通信も可能です。DMA を使用する場合、転送領域をキャッシュのアラインになるように設定してください。
ペリフェラルには受信のみ、送信のみ、送受信があり、それぞれの転送関数を用意しています。転送
待ちは各関数内で行われます。実際はほとんどの場合、spi_transsrev ですべての転送を行えます。転送の終了待ちを行う場合、spi_wait 関数を呼び出せば関数内で終了待ちを行います。マスタにてシリアル通信を行う場合、対象のペリフェラルの SS 信号の操作を、slave_select を用いて制御する。
（スレー
ブの場合、この引数は意味をもちません）
SPI ハンドラ内の errorcode は表 4.2.3.3.1 のように制御中に発生したエラーを格納する。
定義

SPI_ERROR_NONE
SPI_ERROR_TXOVR
SPI_ERROR_RXFUNDSPI_ERROR_RXFOVRSPI_ERROR_DMA

値

0x00000000
SPIS_ISR_TXOISSPIS_ISR_RXUISSPIS_ISR_RXOIS
0x00010000

内容

エラーなし
TX FIFO オーバーフロー・エラー
RX FIFO アンダーフロー・エラー
RX FIFO オーバーラン・エラー
DMA 転送エラー

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL24

SPI_ERROR_TIMEOUT
0x00020000
表 4.2.3.3.1 ErrorCode の内容

ステート変更タイムアウト

図 4.2.3.3.1 に SPI の初期化フローチャートを記載します。SPI 割込み、通信と排他制御用セマフォの静的 API を用いて登録する。

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

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

25

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

4.2.4 SDMMC
SDMMC(SD/SDIO/MMC card host interface)は SD カードメモリや SDIO とのインターフェイスを行うペリフェラルである。マイクロ SD カードソケットは各ボードに実装されているため SD カード、
SDHC カードとのインターフェイスを行うように設計している。SD カードとの通信には送受信ともFIFO を使用する設定と受信のみ DMA を使用する設定がある（SDMMC_READ_INNER_DMA コンパ
イルスイッチによる選択）。しかし、SDMMC 非常に大きな FIFO があり、DMA を使用しない場合、キャッシュ操作やアラインを考慮する必要なくデバイス制御を行えるため、FIFO モード（デフォルト）を推奨する。

4.2.4.1 データ仕様
SDMMC ドライバは SD カード用に設計している。表 4.2.4.1.1 に SDMMC ドライバ用のハンドラ型
SDMMC_Handle_t を示す。ハンドラの設定は管理、参照用であり、ユーザーによる設定変更は許可しない。表 4.2.4.1.2 に SD カード情報を設定する SDMMC_CardInfo_t 型を定義する。また、受信 DMAを使用する場合、SDMMC_DMA_BUF_DESC_t 型の DMA 管理領域を確保なければならないが、ここでは詳細を記載しない。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12

base
ClockMode
BusWideRetryCount
cardtype
RCA
CSD[4]
CID[4]
SCR[2]
CCC
block_size
high_speed

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
bool_t

SDMMC レジスタベースアドレス
指定クロックモード（未使用）
指定バス幅
リトライ回数
カード種類(保存用)RCA 値(保存用)
CSD 値(保存用)
CID 値(保存用)
SCR 値(保存用)
CCC 値(保存用)
READ/WRITE のブロックサイズ
50MHz の high speed の許可不許可

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

26

13
14
15

dma_enablepBuffPtr
pCurDescbool_tuint8_t *SDMMC_DMA_BUF_DESC_t *

16
17
18
19
20
21

istatus
volatile uint32_t
dstatus
volatile uint32_t
statusvolatile uint32_t
SdCmd
volatile uint32_t
ErrorCodevolatile uint32_t
semidID
表 4.2.4.1.1 SDMMC_Handle_t 型

番号

項目

1
2
3
4
5
6

capacity
uint64_t
容量(バイト)blocksize
uint32_t
ブロックサイズmaxsector
uint32_tブロックの数
RCA
uint16_t
SD RCA 値
cardtype
uint8_t
カード種類
statusuint8_t
ステータス
表 4.3.5.1.2 SDMMC_CardInfo_t 型

型

DMA の有効無効
SDMMA 通信バッファへのポインタ
現在の DMA_BUF へのポインタ（DMA 使用時の
み有効）
割込み状態
DMA 実行状態
転送状態
転送指定コマンドエラーコード通信用セマフォ値機能① BusWidth
SDMMC の使用データバス幅を指定する。
定義

値

SDMMC_BUS_WIDE_1B
1
SDMMC_BUS_WIDE_4B
4
SDMMC_BUS_WIDE_8B
8
表 4.3.5.1.3 BusWidth 設定値

内容

1 ビット
4 ビット（設定値）
8 ビット② RetryCount
エラー発生時のリトライカウントを設定する。32 回を設定している。

③ cardtype
カード情報取得後判定したカード種類
定義

値

SD_CARD_V11
0
SD_CARD_V20
1
SD_CARD_HC
2
MMC_CARD
3
SD_IO_CARD
4
HS_MM_CARD
5
SD_IO_COMBO_CARD
6
MMC_CARD_HC
7
表 4.3.5.1.4 cardtype 設定値

内容

SD CARD V1.1
SD CARD V2.0
SDHC CARD
MMC CARD(未対応)
SD IO CARD(未対応)
HS MMC CARD(未対応)
SD IO CARD(未対応)
MM HC CARD(未対応)

ドライバの返り値を ER コードで設定しているが、SDMMC 独自エラーが発生した場合の拡張定義を表
4.3.5.1.6 に示す。
定義

値

E_SDCOM-80
表 4.3.5.1.5 エラーコード拡張

内容

コマンドエラーTOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

27

4.2.4.2

インターフェイス仕様

SDMMC を設定するドライバ関数を以下に示す。ドライバは表 4.3.5.2.1 に示す基本動作を行うドラ
イバと、表 4.3.5.2.2 の SD カードの初期設定を行うドライバがある。初期設定ドライバは後述の Storage
Device Manager からカード検知時、一定の手順で呼び出しを行う。
関数名

型

引数

機能

sdmmc_init
sdmmc_sensevoid
bool_tintptr_t exinf
int idsdmmc_open

SDMMC_
Handle_t*

int idsdmmc_close

ER

SDMMC_handle_t *hsd

sdmmc_erase

ER

SDMMC ハード初期化
指定 ID の SD card をセンスする。ある場合 true を返す
指定 ID の SDMMC ドライバ
をオープンする。戻り値はハンドラへのポインタ
SDMMC ドライバをクローズする
SD card のイレーズを行う

SDMMC_handle_t *hsd
uint64_t startaddr
uint64_t endaddr
sdmmc_blockread
ER
SDMMC_handle_t *hsd
uint32_t *pbuff
uint32_t ReadAddr
uint32_t blocksize
uint32_t num
sdmmc_blockwrite
ER
SDMMC_handle_t *hsd
uint32_t *pbuff
uint32_t WriteAddr
uint32_t blocksize
uint32_t num
sdmmc_wait_transfar ER
SDMMC_handle_t *hsd
uint32_t Timeout
sdmmc_hps_handler
void
void
表 4.3.5.2.1 SDMMC 基本ドライバ関数

備考

SD card からブロック単位でREAD する

SD card へブロック単位でWRITE する

READ/WRITE 転送待ちを行う
割込みハンドラ

関数名

型

引数

機能

sdmmc_getcardinfoER

sdmmc_checkCID
sdmmc_setaddress

ER
ER

SDMMC_handle_t *hsd
SDMMC_CardInfo_t *pCinfo
SDMMC_handle_t *hsd
SDMMC_handle_t *hsd

sdmmc_sendCSD
sdmmc_select_cardERERsdmmc_configuration

ER

SDMMC_handle_t *hsd
SDMMC_handle_t *hsd
uint32_t addr
SDMMC_handle_t *hsd

sdmmc_set_widebus
sdmmc_getstatus

ER
ER

SDMMC_handle_t *hsd
SDMMC_handle_t *hsd

コネクトした SD card の情報を取り出すCID を取得する
相対アドレス(RCA)を取得する。
CSD を取得する。
カードセレクトコマンドを発行する
コンフィギュレーション設
定を行う
バス幅を設定する
SD カードステートを取り込む。

備考

表 4.3.5.2.2 SDMMC 初期化ドライバ関数

4.2.4.3

設定手順

SDMMC のハードウェアの初期化は電源投入時、リセット後に sdmmc_init 関数を用いて行う。SD
カードの場合、スロットにメディアがあるかないかで初期化手順が異なる。メディアの管理は後述のStorage Device Manager が行う。挿抜処理が可能なメディアの場合、Storage Device Manager は
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

28

500ms 周期に mci_ses_por 関数（仮想関数で SDMMC の場合、sdmmc_init が呼び出される）を呼び出してメディアの有無をチェックする。これ以降は、図 4.3.5.3.1 の初期化フローに従い、メディアが挿入された場合は、初期化処理を行う。初期化処理中にエラーが発生した場合は、メディア使用不可の設定が行われ、すべて正常に終了した場合、メディアが使用可能になる。使用可能な状態の場合、ファイ
ルシステムを用いて、ファイル処理が可能になる。メディアが抜かれた場合は、mci_cls_por 関数（仮想関数で SDMMC の場合、sdmmc_close が呼び出される）を呼び出し、メディアを使用不可にする。
メディアの初期化が終了したと、FATFs のドライバ層を経由して、メディアに対するブロック単位の
READ/WRITE と IO アクセスが発生する。図 4.3.5.3.2 に FATFs のドライバからのブロックリードのフローを示す。ブロックライトは実行関数を mci_wri_blk(sdmmc_block_write)に置き換えればよい。
なお、ブロックリード、ライトのバッファ領域のポインタが 4 バイトアラインとなっているが、FATFsのブロックリード、ライトドライバは 1 バイトアラインの領域にデータの読み書きを指定する。そのため、SDMMC ドライバのブロックリード、ライトは 1 バイトアラインの読み書きを有効にしている。

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

29

図 4.3.5.3.1 初期化フロー
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

30

ブロックリードretry = 0

mci_red_blk(sdmmc_read_block)
ブロックリードを行う
結果を保存

エラーあり

エラー
エラーなし

Mci_wai_trn(sdmmc_wait_transfar)
転送待ち
結果を保存

retryカウントアップ

retry <RETRAY_COUN
T

No

Yes

結果

エラーあり

エラーなし
正常終了

エラー終了

図 4.3.5.3.2 ドライバーブロックリード

4.2.5 USB OTG
USB OTG は、ホスト、デバイスの USB 管理を行うドライバである。USB ホストとして動作させるためには USB ホストクラスドライバ、USB デバイスとして動作させるためには USB デバイスライブ
ラリを上位のモジュールとして用意する必要がある。

4.2.5.1 データ仕様
USB OTG ドライバは初期化用の型として、表 4.2.5.1.1 の USB OTG 初期設定定義型と、ハンドラ
として表 4.2.5.1.4 の USB OTG ハンドラ型を持つ。内部の型としてエンドポイントを管理するための表 4.2.5.1.2 のエンドポイント定義型と、ホストチャネルを管理するための表 4.2.5.1.3 のホストクラス
定義型をもつ。エンドポイントとホストクラス定義は、USB の上位層のモジュールで設定を行う必要がある。この実装では、TOPPERS USB ミドルウェアが設定を行っている。
初期設定定義型の有効無効設定は、1 が有効、0 が無効の設定となる。
番号

項目

型

機能

1
2
3

usb_otg_mode
dev_endpoints
host_channels

uint32_t
uint32_t
uint32_t

USB OTG の実行モード指定
デバイス用のエンドポイントの数(1-15)
ホストチャネルの数(1-15)

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

31

4
5
6
7
8

speed
uint32_t
USB コアスピード
dma_enable
uint32_t
USB DMA 機能の有効無効設定
phy_itface
uint32_t
PHY の指定
sof_enable
uint32_t
デバイスモードでの SOF 割込みの有効無効設定
spnlockid
uint32_t
スピンロック用の ID 指定
表 4.2.5.1.1 USB OTG 初期設定定義型

番号

項目

1
2
3
4
5
6
7
8
9
10
11
12

num
uint8_t
is_in
uint8_t : 1
is_stalluint8_t : 1
type
uint8_t : 2
data_pid_start
uint8_t : 1
even_off_frame
uint8_t : 1
tx_fifo_num
uint16_t
maxpacket
uint16_t
xfer_buff
uint8_t *dma_addr
uint32_t
xfer_lenuint32_t
xfer_countuint32_t
表 4.2.5.1.2 エンドポイント定義型

番号

項目

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

dev_addr
uint8_tch_numuint8_tep_numuint8_tep_is_in
uint8_t
speed
uint8_tdo_ping
uint8_tprocess_ping
uint8_tep_typeuint8_tmax_paket
uint16_t
data_pid
uint8_txfer_buff
uint8_t *xfer_lenuint32_t
xfer_countuint32_t
toggle_in
uint8_ttoggle_out
uint8_tdma_addr
uint32_t
err_countuint32_t
urb_state
uint8_t
state
uint8_t
表 4.2.5.1.2 ホストクラス定義型

番号

項目

型

機能

1
2
3
4
5
6
7

base
Init
hc[15]
IN_ep[15]OUT_ep[15]Setup[12]BESL

uint32_t
USB_OTG_Init_t
USB_OTG_HCTypedef
USB_OTG_EPTypedef
USB_OTG_EPTypedef
uint32_t
uint32_t

USB-OTG ペリフェラルのベースアドレス
USB-OTG 初期化設定パラメータ
ホストチャネル領域
IN エンドポイント領域
OUT エンドポイント領域
セットアップパケット保存領域
BESL データの保存領域

型

型

機能

エンドポイント番号(0-15)
エンドポイントのディレクション(1:IN 0:OUT)
スティール状態(1:スティール状態)
通信タイプ
スタートの PID(0 または 1)
フレームのパリティ(0:EVEN 1:ODD)
送信 FIFO 番号
最大パケットサイズ(64KB 以内)
送受信バッファへのポインタ
DMA アドレス(4 バイトのアライン値)
現在転送サイズ
指定の転送サイズ

機能

デバイスアドレス(1-255)
ホストチャネル番号(1-15)
エンドポイント番号(1-15)
エンドポイントのディレクション(1:IN 0:OUT)
USB ホストのスピード
HS モード時の PING プロトコルの有効無効設定
PING プロトコル実行状態
エンドポイントの型
最大パケットサイズ(64KB 以内)
初期設定データ PID
通信バッファ領域へのポインタ
現在の通信サイズ
指定通信サイズIN 通信のトグルフラグ
OUT 通信のトグルフラグ
DMA モードでのデータアドレス(4 バイトのアライン)
エラー発生数URB ステータス
ホストステータス

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

32

8
9
10
11
12
13
14

lpm_state
lpm_active
hostsofcallback
hostconnectcallback
hostdisconnectcallback
hostchangeurbcallback
devsetupstagecallback

uint8_tuint8_tvoid (*) ()void (*) ()void (*) ()void (*) ()void (*) ()15

devdataoutstagecallback

void (*) ()16

devdatainstagecallback

void (*) ()

17
18
19
20
21
22
23
24
25
26
27

devsofcallback
void (*) ()devresetcallback
void (*) ()devsuspendcallback
void (*) ()devresumecallback
void (*) ()devisooutcallback
void (*) ()devisoincallback
void (*) ()devconnectcallback
void (*) ()devdisconnectcallback
void (*) ()devlpmcallback
void (*) ()pHostvoid *
pDev
void *
表 4.2.5.1.4 USB OTG ハンドラ型

LPM の状態
LPM 機能有効無効設定
ホスト用 SOF 割込みコールバック関数
ホストコネクト時コールバック関数
ホストディスコネクト時コールバック関数
ホスト URB 変更時コールバック関数
デバイスセットアップステージコールバッ
ク関数
デバイスデータアウトステージコールバッ
ク関数
デバイスデータインステージコールバック
関数
デバイス SOF 割込みコールバック関数
デバイスリセットコールバック関数
デバイスサスペンドコールバック関数
デバイスレジュームコールバック関数
デバイス ISOOUT コールバック関数
デバイス ISOIN コールバック関数
デバイスコネクトコールバック関数
デバイスディスコネクトコールバック関数
デバイス LPM コールバック関数
上位ホストハンドラ格納領域
上位デバイスハンドラ格納領域① usb_otg_mode
USB OTG の設定モードを指定する。
定義

値

USB_OTG_MODE_DEVICE0
USB_OTG_MODE_HOST
1
USB_OTG_MODE_DRD2
表 4.2.5.1.5 usb_otg_mode 設定値

内容

USB DEVICE 固定
USB HOST 固定
OTG モード② speed
USB の転送スピードを設定する。
定義

値

USB_SPEED_HIGH
0
USB_SPEED_HIGH_IN_FULL
3
USB_SPEED_LOW
USB_SPEED_FULL
表 4.2.5.1.6 speed 設定値

内容

HIGH スピード指定
FULL スピード許可の HIGH スピード設定
LOW スピード
FULL スピード③ phy_inface
PHY 種別設定を行う。
定義

値

USB_PHY_ULPI
1
USB_PHY_EMBEDDED2
表 4.2.5.1.7 phy_inface 設定値

内容

ULPI-PHY
EMBEDDED-PHY④ spnlockid
スピンロックを行う場合、スピンロック ID を設定する。ゼロでスピンロックを行わない。

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

33

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

型

引数

機能

usbo_init

USB_OTG_
Handle_t*

ID portid
USB_OTG_Init_t *piniusbo_deinit

ER

USB_OTG_Handle_t* husb

usbo_getcurrentframeusbo_setcurrentmodeuint32_t

USB_OTG_Handle_t* husb

ER

USB_OTG_Handle_t* husb

usbo_coreinit

ER

USB_OTG_Handle_t* husb

usbo_enableglobalintER

USB_OTG_Handle_t* husb

usbo_disableglobalintER

USB_OTG_Handle_t* husb

usbo_flushTxFifo

ER

usbo_flushRxFifo

ER

USB_OTG_Handle_t* husb
uint32_t num
USB_OTG_Handle_t* husb

usbo_initFifo
usbo_hc_initERER

指 定 ポ ー ト ID の
USB-OTG ペ リ フ ェ ラ
ルを初期化
USB モジュールの無効化
現在実行中のフレーム
番号を取りだず
USB-OTG の モ ー ド 設
定を行う
USB-OTG コ ア の 初 期
化
USB-OTG グ ロ ー バ ル
割込みを有効に設定
USB-OTG グ ロ ー バ ル
割込みを無効に設定
送信 FIFO をフラッシュする
受信 FIFO をフラッシュする
送信 FIFO 初期化設定
ホストチャネルを初期化する

usbo_hc_startxfer

ERusbo_hc_haltERusbo_resetportER

usbo_drivevbus

ERusbo_hostinit
usbo_starthostusbo_stophostusbo_gethostspeed

ER
ER
ER
uint32_t

USB_OTG_Handle_t* husb
uint8_t state
USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb

usbo_hcd_irqhandler

void

USB_OTG_Handle_t* husb

usbo_devconnect
usbo_devdisconnect
usbo_activateEndpoi
nt
usbo_disactivateEnd
point
usbo_epsetStall

ER
ER
ER

usbo_epclearStallER

USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handle_t* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handle_t* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handle_t* husb
USB_OTG_EPTypedef *ep

ERER

USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb
uint8_t ch_num
uint8_t epnum
USB_OTG_Handle_t* husb
uint8_t ch_num
USB_OTG_Handle_t* husb
uint8_t ch_num
USB_OTG_Handle_t* husb

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

備考

ホストチャネル送信要求
ホ ス トチャ ネ ルを
HALT 状態にする
ホストポートをリセッ
トする
ホスト用 VBUS のオン
オフ設定を行う
ホストの初期化を行う
ホストを開始する
ホストを停止する
ホストのコアスピード
を取り出す
USB-OTG ホ ス ト 割 込
み処理
USB デバイス接続要求
USB デバイス切断要求
エンドポイントアクテ
ィベイト要求エンドポイントディス
アクティベイト要求
エンドポイントをステ
ィール状態に設定
エンドポイントのスティール状態解除34

usbo_setDevAddress

ER

USB_OTG_Handle_t* husb
uint8_t address
USB_OTG_Handle_t* husb

usbo_getDevSpeed

uint8_tusbo_ep0_outstartER

usbo_ep0startxfer

ERusbo_epstartxfer

ERusbo_devinit
usbo_stopdevice
usbo_init_lpm

ER
ER
ER

USB_OTG_Handle_t* husb
uint8_t *psetup
USB_OTG_Handle_t* husb
USB_OTG_EPTypedef* ep
USB_OTG_Handle_t* husb
USB_OTG_EPTypedef* ep
USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb
USB_OTG_Handle_t* husb

usbo_pcd_irqhandler

void

USB_OTG_Handle_t* husb

usb_otg_isr

void

intptr_t exinf

デバイスアドレスを設定する
USB デバイススピードを取り出す
エンドポイント 0-OUT
開始要求
エンドポイント 0 の転送
開始要求
エンドポイントの転送
開始要求
USB デバイス初期化
USB デバイス停止
LPM の初期化

未実
装USB デバイスの割込み処理
USB-OTG 割 込 み サ ー
ビスルーチン

表 4.2.5.2.1 USB-OTG ドライバ関数

4.2.5.3 フローチャート
USB-OTG はホスト機能とデバイス機能をもつペリフェラルである。ホスト機能をデバイスの接続を待って以下の機能を実行する。
(1) ホスト初期化
USB-OTG ハードウェア、上位モジュールの初期化を行い、USB ホストをスタートする。USB の状態遷移は割込み関数からのコールバックで実行される。
USBホスト初期化

usbo_init関数でハード初期化とハンドラの取り出し

上位モジュールの初期化要求
usbo_hostinit関数でUSBホスト初期化
上位モジュールにスタート要求
usb_starthost関数でス
タート要求
usbo_enableglobalint関数でグローバル割込みを許可

usbo_resetport関数でポートリセットを行う

接続待ち

図 4.2.5.3.1 USB ホスト初期化
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

35

(2) ホスト接続とエナミュネーション
USB ホストの初期化が終了すると、デバイスの接続待ち状態に移行する。状態遷移は割込み関数中のコールバック関数で上位モジュールに伝達される。USB ホストで使用されるコールバック関数は以下の４つである① hostsofcallback
SOF のタイミングで割込みを発生する。USB は 1ms 単位に SOF を発行するため 1ms 間隔に
コールバックされる。
② hostconnectcallback
ホストのポート変化割込み(USB_OTG_GINTSTS_HPRTINT)が発生し、ポート接続チェックを行いコールバックする。
③ hostdisconnectcallback
ホストのディスコネクト割込み(USB_OTG_GINTSTS_DISCINT)が発生時、コールバックする。
④ hostchangeurbcallback
ホストチャネル割込み(USB_OTG_GINTSTS_HCINT)が発生時、コールバックする。
接続の検知は hostconnectcallback 関数呼び出しから開始する。コールバック関数はイベント通知
のみで、処理はタスクレベルで実行される。

図 4.2.5.3.2 接続処理

(3) ホストクラスの選択と確認
上位モジュールでエナミュネーションにより取得した bInterfaceClass からクラスモジュールを選択する。対応するクラスモジュールがない場合は処理中止となる。クラスモジュールが決定された場
合は、クラスモジュールで定めらえた手順で Init（通信用のエンドポイントの設定等）→Requests（クラスで使用するパラメータの取得等）を実行し、正常終了すればクラスモジュールの通常プロセスを
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

36

実行する。これらの処理はクラスモジュール毎に異なるので、統一したフローチャートで記載はできない。ここで状態遷移に用いるコールバック関数は hostchangeurbcallback 関数である。
(4)ホスト切断
切断が行われた場合、USB ホストの割込みから hostdisconnectcallback が行われる。このコールバックにより、上位モジュールが呼ばれ上位モジュールの切断手順が行われる。手順は以下のフローチャートの通りである。クラスモジュールの Deinit 移行はタスクレベルで行われ、終了後接続待ちとなる。

図 4.2.5.3.3 切断処理
デバイス側はホスト機能に対応する動作を行う。また、設定によっては、USB 割込み内で処理を完結可能である。状態の遷移は USB デバイスからのコールバックによって行われる。
① devsetupstagecallback
OUT エンドポイントの SETUP パケット通知割込み(USB_OTG_DOEPINT_STUP)からのコー
ルバック② devdataoutstagecallback
OUT エンドポイントの転送割込み(USB_OTG_DOEPINT_XFRC)からのコールバック③ devdatainstagecallback
IN エンドポイントの送信終了割込み(USB_OTG_DIEPINT_XFRC)からのコールバック④ devsofcallback
SOF 割込み(USB_OTG_GINTSTS_SOF)からのコールバック⑤ devresetcallback
ENUMERATION 終了割込み(USB_OTG_GINTSTS_ENUMDNE)からのコールバック⑥ devsuspendcallback
SUSPEND 割込み(USB_OTG_GINTSTS_USBSUSP)からのコールバック⑦ devresumecallback
RESUME 割込み(USB_OTG_GINTSTS_WKUINT)からのコールバック⑧ devisooutcallback
ISO-OUT 未完結割込み(USB_OTG_GINTSTS_PXFR_INCOMPISOOUT)からのコールバック⑨ devisoincallback
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL
37

ISO-IN 未完結割込み(USB_OTG_GINTSTS_IISOIXFR)からのコールバック⑩ devconnectcallback
コネクション割込み(USB_OTG_GINTSTS_SRQINT)からのコールバック⑪ devdisconnectcallback
ディスコネクション割込み(USB_OTG_GINTSTS_OTGINT)からのコールバック⑫ devlpmcallback
LPM をサポートする場合の状態遷移コールバック(5)デバイス初期化
USB デバイスの初期化手順を以下の表に示す。

図 4.2.5.3.4 USB デバイスの初期化(6) デバイス接続とエナミュネーション
USB の接続は、SUSPEND、RESUME のコールバックが何度か続いた後、リセットコールバック(devresetcallback)により、接続を開始する。これも、接続の状態で何度と発生する可能性がある。まず、エナミュレーションを行うためにエンドポイント 0 の IN/OUT を作成する。作成後、以下のコールバッ
クが発生し、内容に従って、デバイス情報の通信を行う。
① devsetupstagecallback
SETUP ステージの要求② devdataoutstagecallback
データ受信要求③ devdatainstagecallback
データ送信要求
最後に、SET CONFIGURATION を受信したら、USB クラスの通信に移行する。

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

38

図 4.2.5.3.5 USB デバイスの接続(7)SUSPEND と RESUMEUSB デバイスの場合、通信確立後も SUSPEND と RESUME の要求により、必要な電源操作を行わなければならない。これらの移行は以下のコールバック関数によって要求される。切断、接続時も、これらのコールバック関数が呼ばれるので注意が必要である。
① devsuspendcallback
省エネモード要求② devresumecallback
省エネ復帰要求(8)デバイス切断
USB デバイスの切断は切断コールバック(devdisconnectcallback)の呼び出しにより行う。このコール
バックの前に SUSPEND もコールバックも発生する。

図 4.2.5.3.6 USB デバイスの切断

4.2.6

QSPI

QSPI は、フラッシュ ROM 等に用いられる SPI ドライバである。

4.2.6.1

データ仕様

QSPI ドライバは初期化用の型として、表 4.2.6.1.1 の QSPI コンフィギュレーション構造体と、ハンドラとして表 4.2.6.1.2 の QSPI ハンドラ型を持つ。QSPI コンフィグレーション構造体は QSPI 対応のフラッシュ ROM の処理属性を設定する。
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

39

番号

項目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

mauf_id
uint16_t
マニュファクチャ ID
type_capacity
uint16_t
キャパシティタイプ ID
clk_phaseuint32_t
クロックフェーズ
clk_pol
uint32_t
QSPI 転送クロックの極性
max_frq_mhz
uint32_t
最大周波数(MHZ)
tshsl_ns
uint32_ttshsl(ns)tsd2d_ns
uint32_t
tsd2f(ns)tchsh_ns
uint32_ttchsh(ns)tslch_ns
uint32_ttslch(ns)page_size
uint32_t
ページサイズ
addr_size
uint32_t
アドレスサイズ
inst_typeuint8_t
インストラクションタイプ
read_op_code
uint32_t
読み出し用オペコード
read_addr_xfer_type
uint8_t
読み出しアドレス転送タイプ
read_data_xfer_type
uint8_t
読み出しデータ転送タイプ
read_dummy_cycles
uint32_t
読み出しダミーサイクル値
write_op_code
uint32_t
書き込み用オペコード
write_addr_xfer_type
uint8_t
書き込みアドレス転送タイプ
write_data_xfer_type
uint8_t
書き込みデータ転送タイプ
write_dummy_cycles
uint32_t
書き込みダミーサイクル値
erase_countuint8_t
消去オペレーション数
erase_size[4]uint32_t
消去最小サイズerase_cmds[4]uint8_t
消去コマンドerase_sector_idx
uint8_t
消去セクタインデックス
support_chip_erase
bool_tチップ消去機能の有無
device_size
uint32_t
デバイスサイズmicron_multi_die
bool_tdie_sizeuint32_t
ダイサイズ
init_func
QSPI_INIT_FUNC_T
初期化関数
wait_func
QSPI_WAIT_FUNC_T
待ち関数
friendly_namecost char *デバイス名へのポインタ
表 4.2.6.1.1 QSPI コンフィギュレーション構造体

型

番号

項目

1
2
3
4
5
6
7
8
9

base
uint32_t
clk_req
uint32_t
Init
QSPI_Init_t
pBuffPtr
uint32_t *XferSizeuint32_t
XferCount
volatile uint32_t
istatus
volatile uint32_t
semid
int
errorcode
volatile uint32_t *表 4.2.6.1.2 QSPI ハンドラ型

型

機能

機能

QSPI モジュールベースアドレス
QSPI モジュール実行クロック
QSPI 初期設定値保存領域
QSPI 通信バッファへのポインタ
QSPI 通信サイズ
QSPI 通信カウンタ
QSPI 割込みステータス
通信用セマフォ ID
QSPI エラーコード① manuf_id
マニュファクチャ ID を指定する。
定義

値

内容

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL40QSPI_STIG_RDID_JEDECID_MICRONQSPI_STIG_RDID_JEDECID_SPANSIONQSPI_STIG_RDID_JEDECID_MACRONIX
表 4.2.6.1.3 manuf_id 設定

0x20
0x01
0xC2

MicronSpansion
Macronix 拡張② type_capacity
キャパシティタイプを指定する。
例) Micron N25Q128
0x18BaMicron N25Q00AA 0x21Ba
Micron N25Q512A 0x20BA③ clk_phase
クロックフェーズを指定する。0:アクト、1:インアクト。
④ clk_polQSPI 転送クロック極性定義。0:HIGH、1:LOW。
⑤ inst_type
インストラクションタイプを指定する。
定義

値

QSPI_MODE_SINGLE0QSPI_MODE_DUAL
1
QSPI_MODE_QUAD2
表 4.2.6.1.4 inst_type 設定値

内容

シングルモード
デュアルモード
クアッドモード⑥ read_op_code
デバイス依存の読み出しフラッシュコマンド設定。
⑦ read_addr_xfer_type/read_data_xfer_type
デバイス依存の読み出しのアドレスタイプとデータタイプを指定する。設定は inst_type と同じ属性。
⑧ read_dummy_cycles
デバイス依存の読み出しダミーサイクルを指定する。レンジは 0 から 31 まで。
⑨ write_op_code
デバイス依存の書き込みフラッシュコマンド設定。
⑩ write_addr_xfer_type/write_data_xfer_type
デバイス依存の読み出しのアドレスタイプとデータタイプを指定する。設定は inst_type と同じ属性。
⑪ write_dummy_cycles
デバイス依存の読み出しダミーサイクルを指定する。レンジは 0 から 31 まで。
⑫ erase_count消去コマンド数を指定。(4 以下)⑬ erase_sizes
消去最小単位を指定。
⑭ erase_cmds
消去用のフラッシュコマンドを指定

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

41

⑮ erase_sector_idx
セクタ消去用のインデックスを指定。
⑯ init_func
フラッシュデバイスの初期化関数を設定。NULL ならば初期化処理を行わない。
⑰ wait_func
書き込み、または、消去時の待ち関数を指定。NULL ならば待ち処理を行わない。

4.2.6.2 インターフェイス仕様
QSPI を用いてフラッシュ ROM の制御するドライバ関数は以下の通りである。このドライバ関数に加えて init_func や wait_func からフラッシュコマンドを発行するためのドライバを表 4.2.6.2.2 に示す。
関数名

型

引数

機能

qspi_init

QSPI_Handle_t*

ID portid
QSPI_Init_t *spii

qspi_deinit
qspi_readERER

qspi_writeERqspi_eraseERqspi_erase_exec

ERqspi_direct_disable
qspi_direct_enable

void
void

qspi_ahb_remap_ad
dress_get

uint32_t

QSPI_Handle_t* hqspi
QSPI_Handle_t* hqspi
void *dest
uint32_t src
uint32_t size
QSPI_Handle_t* hqspi
uint32_t dest
const void *src
uint32_t size
QSPI_Handle_t* hqspi
uint32_t address
uint32_t size
QSPI_Handle_t* hqspi
uint32_t address
uint32_t idx
QSPI_Handle_t* hqspi
QSPI_Handle_t* hqspi
uint32_t map_addr
QSPI_Handle_t* hqspi

指定ポート ID の QSPI ペリ
フェラルを初期化し、ハン
ドラへのポインタを返す
QSPI を未使用状態に戻す
非ダイレクトモードでフラッシュ ROM のデータを読み出す

spi_hps_isr

void

intptr_t exinf

備考

フラッシュ ROM にデータの書き込みを行う

フラッシュ ROM の消去。

インデックス単位にフラッシュ ROM を消去する
ダイレクト読み出し無効ダイレクト読み出し有効
現在のダイレクト読み出しのベースオフセットを取り出す
QSPI 割込みサービスルーチン

表 4.2.6.2.1 QSPI ドライバ関数
関数名

型

引数

機能

qspi_chip_select_config_get

ER

現在の CS モードの取り出
し

qspi_chip_select_config_set

ERqspi_mode_bit_disable
qspi_mode_bit_enable
qspi_mode_bit_config_set

void
void
ER

QSPI_Handle_t* hqspi
uint32_t *pcs
uint8_t pcmodeQSPI_Handle_t* hqspi
uint32_t cs
uint8_t cs_mode
QSPI_Handle_t* hqspi
QSPI_Handle_t* hqspi
QSPI_Handle_t* hqspi
const uint32_t mode_bit

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

備考

CS モード設定

モードビットを無効化
モードビットを有効化
フラッシュ ROM の消去。

42

qspi_sram_partition_set

ER

QSPI_Handle_t* hqspi
const uint32_t part_size

SRAM 中の読み出しパーテ
ィション数を設定する

表 4.2.6.2.2 QSPI 拡張ドライバ関数

4.2.6.3 フローチャートQSPI ドライバは、FIFO による通信のみをサポートする。QSPI の初期設定は、qspi_init 関数を指定して対象ポート番号（１のみ）と初期設定したコンフィギュレーション構造体のポインタを指定します。コンフィギュレーション構造体は実装されたフラッシュ ROM の属性にあった設定を行わなければならない。QSPI の初期化フローチャートを図 4.2.6.3.1 に示す。
初期化後は、非ダイレクト読み込み、書き込み、消去機能が有効となる。ダイレクト読み込み機能は
qspi_direct_enable 関数の実行で有効となる。フラッシュ ROM が参照できるメモリアドレスは HPSの仕様で固定となっており、アドレスが 0xffa00000 から 1MB である。
QSPI初期化

初期化データとQSPIのポートIDを引数としてqspi_initを呼び出しハンドラ
へのポインタを取得

QSPIの割込み設定を事前におこなう初期化データQSPI_Init_tはハンドラ内にコピーされるため自動変数上に確保し初期データを
設定する

終了

図 4.2.6.3.1 QSPI 初期化

4.2.7

EMAC

EMAC は、有線インサーネット用ドライバである。EMAC ドライバはパケットのインターフェイス
として LWIP 用 PBUF を想定して、設計している。パケット・インターフェイスを修正すれば、他の
TCP/IP プロトコル・スタックに対応可能である。

4.2.7.1

データ仕様

EMAC ドライバは初期化用の型として、表 4.2.7.1.1 の EMAC コンフィギュレーション構造体と、ハンド ラ と し て 表 4.2.7.1.2 の EMAC ハ ン ド ラ 型 を 持 つ 。 EMAC コ ン フ ィ グ レ ー シ ョ ン 構 造 体 は
DESCRIPTOR キューと送受信バッファ等の設定を定義する。EMAC ドライバは、この設定に従って
DESCRIPTOR を設定する。
番号

項目

1
2
3
4
5
6

packetbufsize
uint32_t
パケットバッファ長
rxquecountuint32_t
受信キューの数
txquecountuint32_t
送信キューの数
quebuffervoid *
キューバッファ領域へのポインタ
databuffer
void *
データ領域へのポインタ
semidID
mdio 用セマフォ ID(LOCK 用)
表 4.2.7.1.1 EMAC コンフィギュレーション構造体

型

機能

番号

項目

型

機能

1

base

uint32_t

EMAC モジュールベースアドレス

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

43

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Init
EMAC_Init_t
tx_waituint8_t
intno
uint8_t *macid
uint8_tphy_addr
uint8_tphy_features
uint32_t
linkvalue
uint32_ttx_top_desc
volatile uint32_t *tx_cur_desc
volatile uint32_t *rx_top_desc
volatile uint32_t *rx_cur_desc
volatile uint32_t *emacevent
void (*) ()phy_opt_init
void (*) ()ifShortPkts
uint32_t
mmc_tx_irq_n
uint32_t
mmc_rx_irq_n
uint32_t
mmc_rx_csum_offload_irq_n uint32_t
irq_receive_pmt_irq_n
uint32_t
irq_tx_path_in_lpi_mode_n
uint32_t
irq_tx_path_exit_lpi_mode_n uint32_t
irq_rx_path_in_lpi_mode_n
uint32_t
irq_rx_path_exit_lpi_mode_n uint32_t
normal_irq_n
uint32_t
fatal_bus_error_irq
uint32_ttx_undeflow_irq
uint32_ttx_jabber_irq
uint32_ttx_early_irq
uint32_ttx_process_stopped_irq
uint32_trx_normal_irq_n
uint32_trx_early_irq
uint32_t
rx_overflow_irq
uint32_trx_buf_unav_irq
uint32_trx_process_stopped_irq
uint32_trx_watchdog_irq
uint32_t
表 4.2.7.1.2 EMAC ハンドラ型

EMAC 初期設定値保存領域
送信終了待ちフラグ
EMAC 割り込み番号
PORTID 番号（保存用）
PHY アドレス番号
PHY の機能ステータス
要求 LINK 値
送信キュー(DESCRIPTOR)の先頭アドレス
現在の送信キューのアドレス
受信キュー(DESCRIPTOR)の先頭アドレス
現在の受信キューのアドレス
EMAC 状態のコールバック関数
PHY のオプション設定関数
ショートパケットの受信回数
MMC 割り込み MMCTIS の発生回数
MMC 割り込み MMCRIS の発生回数
MMC 割り込み MMCCSUM の発生回数
PMT 割り込みの発生回数
LPI 割り込み TLPEN の発生回数
LPI 割り込み TLPEX の発生回数
LPI 割り込み RLPIEN の発生回数
LPI 割り込み RLPIEX の発生回数
TX/RX NORMAL 割り込みの発生回数
ABNORMAL/FBI の発生回数
ABNORMAL/UNF の発生回数
ABNORMAL/TJT の発生回数
ABNORMAL/ETI の発生回数
ABNORMAL/TPS の発生回数
TX/RX NORMAL/RIE の発生回数
TX/RX NORMAL/ERI の発生回数
ABNORMAL/OVF の発生回数
ABNORMAL/RU の発生回数
ABNORMAL/RPS の発生回数
ABNORMAL/RWT の発生回数① packetbufsize
パケットバッファサイズを指定する。キャッシュアラインサイズ出なければならない。
② rxquecount
受信用のキュー(DESCRIPTOR)の数を指定する。
③ txquesize
送信用のキュー(DESCRIPTOR)の数を指定する。
④ quebuffer
EMAC で使用するキュー(DESCRIPTOR)領域のポインタを指定する。この領域はキャッシュア
ライン・アドレスでなければならない。quebuffer のバイトサイズは以下の計算による。
que_size = (rxquecount + txreqcount) × 4⑤ databuffer

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

44

EMAC で使用する通信用のバッファ領域のポインタを指定する。この領域はキャッシュアライ
ン・アドレスでなければならない。databuffer のバイトサイズは以下の計算による。
data_size = (rxquecount + txreqcount) × packetbufsize⑥ semid
PHY との通信時、排他制御を行うためのセマフォ ID。ゼロなら排他制御を行わない。

4.2.7.2 インターフェイス仕様
EMAC を用いてイーサネット通信を行うためのドライバ関数は以下の通りである。
関数名

型

引数

機能

emac_init

EMAC_Hand_t*

ID portid
EMAC_Init_t *ini

emac_deinit
emac_sendERER

emac_recv_length
emac_recv

intER

emac_startER

emac_stopER

emac_link_detect
emac_link_mode_set

uint16_tER

emac_resetER

emac_hps_isr

void

EMAC_Handle_t* hmac
EMAC_Handle_t* hmac
struct emac_pkt *pktp
EMAC_Handle_t* hmac
EMAC_Handle_t*hmac
struct emac_pkt *pktp
EMAC_Handle_t* hmac
uint32_t link
EMAC_Handle_t* hmac
int disable
EMAC_Handle_t* hmac
EMAC_Handle_t* hmac
uint32_t link
EMAC_Handle_t* hmac
uint8_t *mac_addr
intptr_t exinf

指定ポート ID の EMAC ペリフ
ェラルを初期化し、ハンドラへのポインタを返す
EMAC を未使用状態に戻す
パケットのデータを送信する

備考

受信パケット長を取り出す
受信パケットを取り出す
EMAC と PHY をスタートする
EMAC を停止する
LINK 情報を取り出す
LINK 情報を EMAC に設定する
EMAC をリセットする
EMAC 割込みサービスルーチ
ン

表 4.2.7.2.1 EMAC ドライバ関数

4.2.7.3 フローチャート
EMAC ドライバは、TCP/IP プロトコル・スタックから呼び出されることを前提に設計している。
TCP/IP プロトコル・スタックとの依存性が高い部分は、送受信用のパケットの受け渡し処理である。
このドライバでは、LWIP 用の pbuf を使用してパケットを受け渡すことを前提に設計している。
EMAC の初期化フローを図 4.2.7.3.1 に示す。ここで特に注意が必要なのは、EMAC モジュールはリ
セット後、割り込みマスクが許可に以降するため、必ず、EMAC の割り込みコントローラは割り込み禁止の状態でシステム起動しなければならない。emac_init にて EMAC の初期化を行う。このとき、
EMAC_Init_t 構造体にて、キューや送受信バッファ領域の設定を行う。Socfpga_cv は、ノンキャッシ
ュメモリはないため、キューや送受信制御にキャッシュコントロールを伴う。これらの領域はキャッシュアライン・アドレスの設定でなければならない。初期化後、emac_reset 関数にて EMAC のリセットを行う。この関数は通信中に EMAC のハードエラー等が発生した場合、EMAC のリセットに使用かのうである。リセット後、emac_start 関数にて LINK 情報を設定して、PHY のスタート、EMAC のスタートを設定する。emac_start を実行しても、LINK していない場合、通信動作が開始できないばかりでな く 、 PHY の 設 定 が AUTO NEGOTIATION の 場 合 、 EMAC の 通 信 設 定 も 確 定 し な い 。
emac_link_detect 関数にて接続情報を取得できる。AUTO NEGOTIATION の場合、接続情報を EMACに反映するために、emac_link_mode_set 関数を使用する。
送信処理のフローを図 4.2.7.3.2 に示す。pbuf に送信データをつめて、emac_send 関数を呼び出せばよい。
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL
45

受信処理のフローを図 4.2.7.3.3 に示す。受信データの有無は、emac_recv_length 関数で受信データ
サイズを取り出せる。受信データがある場合は、サイズ分の pbuf を用意して emac_recv 関数にて、受信データの取得を行う。受信の有無はコールバック関数のイベントでも通知されるので、常に
emac_recv_length 関数でポーリングを行う必要はない。

図 4.2.7.3.1 QSPI 初期化

図 4.2.7.3.2 EAC 送信

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

46

受信処理

0で受信なしemac_recv_length0より大きな数で受信データ長

受信データ長のpbufを用意する

emac_rev

受信データを取得

リターン値

リターン値でエラー判定

E_OK以外
エラー終了

E_OK
正常終了

図 4.2.7.3.3 EMAC 受信
図 4.2.7.3.4 に EMAC の終了処理を示す。

図 4.2.7.3.4 EMAC 終了処理

4.3 FPGA Driver
4.3.1 概要FPGA ドライバは、Ardiuno connector をもつ DE0-Nano-SoC ボードのみ対応している。このボード用に QSYS でサンプル実装したデバイスドライバの仕様について記載する。ドライバとして以下のドラ
イバをサポートする。このドライバを使用するには、Arduino connecter に対応した FPGA 設計と FPGAの初期化が必要である。
(1) FPGA pinmode
Arduino connecter に対応した GPIO 設定
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

47

Arduino D0,D1 ピンを使用した FPGA-UART デバイスドライバ
Arduino D10,D11,D12,D13 ピンを使用した FPGA-SPI デバイスドライバ
Arduino A0,A1,A2,A3,A5 入力をデジタル変換(2) FPGA uast(3) FPGA spi(4) FPGA adc

4.3.2 FPGA pinmode
Arduino connecter の デジタル・ピンに対応した GPIO 設定を行う。

4.3.2.1 データ仕様(1) mode
モードは GPIO の設定を指定する。
定義

値

INPUT
INPUT_PULLUPOUTPUT
表 4.3.2.1 mode 設定値

0
1
2

内容

GPIO 入力モード
GPIO 入力モードと同等
GPIO 出力モード

4.3.2.2 インターフェイス仕様
GPIO に割り当てられたデジタル・ピンの初期化、制御を行う。
関数名

型

引数

機能

pinModevoid

digitalRead

int

uint8_t pinno
uint8_t mode
uint8_t pinno

digitalWrite

void

デジタル・ピンの GPIO の初期設定を行う
デジタル・ピンのデータを読み取る
デジタル・ピンの出力値を設定する。sw は０または１

uint8_t pinno
int
sw

備考

表 4.3.2.2 GPIO 設定関数

4.3.2.3 設定手順
pinMode 関数にて、入力、出力の初期化を行った後、digitalRead 関数、または digitalWrite 関数にGPIO の入力、出力を行う。FPGA 上の GPIO のベースアドレスが変更となった場合は、デファイン宣言 TADR_PIO0_BASE を外部からのデファイン宣言に置き換えることが可能である。

4.3.3 FPGA uart
FPGA uart は、QSYS の UART(altera_avalon-uart)を使用してシリアル通信ドライバを提供する。
Arduino connecter 上 の 実 装 を 想 定 す る た め 、 ハ ー ド ウ ェ ア フ ロ ー 制 御 用 の CTS/RTS 処 理 はaltera_avalon-uart で提供しているモジュールを使用せず。
デジタル・ピンの GPIO を用いて実装する。
また、ボーレート等の初期設定は QSYS で設定するため、設定用のインターフェイスはない。

4.3.3.1 データ仕様
FPGA uart で使用するハンドラ型：FPGAUART_Handle_t を表 4.3.3.1.1 に示す。FPGA uart のハードウェア設定構造体として FPGAUART_PortControlBlock 型をもつ。この型の設定を表 4.3.3.1.2 に示す。加えて FPGA uart のバッファ領域を管理する型として queue_t 型を使用する。この型を表4.3.3.1.2 に示す。queue_t 型はバッファ位置アイテムが 16 ビットであるため最大のバッファサイズは
64K byte -1 となる。
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

48

番号

項目

1
2

base
pcb

3
4
5
6

型

機能

uint32_t
const
FPGAUART_PortControlBlock*
ctrl
uint32_t
rxquequeue_t*txquequeue_trxcallback
void (*)(FPGAUART_Handl_t*)
表 4.3.3.1.1 FPGAUART ハンドラ型

FPGA uart レジスタのベースアドレス
FPGA uart コンフィギュレーション型
コントロール・レジスタの保存領域
受信データ管理キューへのポインタ
送信データ管理キューへのポインタ
受信発生時のコールバック関数

本ドライバは CTS/RTS を用いたハードウェアフロー制御に対応する。rtspin、ctspin は Arduino
connecter 上のデジタル・ピンのピン番号。
番号

項目

型

1
2
3
4

Base
uint32_t
FPGA uart レジスタのベースアドレス
intno
uint32_t
HPS 上の割込み番号
rtspinuint32_t
RTS 用 GPIO ピン番号(0 の場合、RTS 機能を使用しない)
ctspinuint32_t
CTS 用 GPIO ピン番号(0 の場合、CTS 機能を使用しない)
表 4.3.3.1.2 SPI コンフィギュレーション型

番号

項目

1
2
3
4
5

size
uint16_t
top
uint16_t
tailuint16_t
limit
uint16_t
bufferuint8_t*
表 4.3.3.1.3 queue_t 型

型

機能

機能

バッファ領域のバイトサイズ
データ設定位置管理番号
データ取り出し位置管理番号
スレッシュ値（未使用）
バッファ領域へのポインタ

4.3.3.2 インターフェイス仕様
FPGA uart を制御するドライバ関数は以下の通りである。fpgauart_cts_sens ハードウェアフロー制
御時に有効。この関数は送信可能チェックを行い、送信可能で、送信データが残っている場合、送信再
開を行う。
関数名

型

引数

機能

fpgauart_init

FPGAUART_Handler*

ID portid

fpgauart_deinit
fpgauart_send

ER
int

FPGAUART_Handler* huart
FPGAUART_Handler* huart
unsigned char *buf
int len

fpgauart_recev

int

FPGAUART_Handler* huart
unsigned char *buf
int len

fpgauart_recsize

int

FPGAUART_Handler* huart

fpgauart_cts_sensfpgauart_isr

bool_tFPGAUART_Handl_t* huart

void

intptr_t exinf

指定ポート ID の UART を初期化し、ハンドラへのポイン
タを返す
UART を未使用状態に戻す
UART 送信キューに送信デー
タをセットし、送信可能ならば送信を行う。返り値はキューに設定したデータサイズ。
UART 受信キューから受信データを取り出す。取り出した
データサイズを返す。
受信バッファに蓄積された受信データサイズを返す。
送信可能用センスtrue なら可能
FPGA uart 割込みサービスル
ーチン

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

備考

49

表 4.2.3.2.1 SPI ドライバ関数

4.3.3.3 フローチャート
まず、FPGA の割込み設定を有効にするために、fpgauart.cfg をコンフィギュレーションファイルに取り込む必要がある。割込み番号は fpgauart.h に記載がるため、これを書き換えれよい。図 4.3.3.3.1に初期化フローを示す。初期化は fpgauart_init 関数にポート番号を引数として呼び出し、ハンドラのポインタを取り出す。ハンドラのポインタが NULL の場合、初期化エラーが発生したことを示す。そのあと、ハンドラの rxcallback に受信用コールバック関数を設定する。コールバック関数が呼び出されとセマフォやイベントフラグを用いて受信プログラムにイベントを発生するように設計する。図
4.3.3.3.2 に受信のフローを記載する。受信イベントが発生すると、fpgauart_recsize 関数を用いて受信
データサイズを取り出し、fpgauart_recev 関数を用いてキューバッファから受信データを取り出す。図4.3.3.3.3 に送信フローを示す。fpgauart_send 関数を用いて送信データをキューバッファにセットする。
返り値に実際にセットされたバイト数が返される。キューバッファにオーバーフローが発生した場合は設定数より少ない値が返されるため、時間をおいて、送信できなかったデータは再送信する必要がある。

図 4.3.3.3.1 初期化

図 4.3.3.3.2 データ受信

図 4.3.3.3.3 データ受信

4.3.4 FPGA SPIFPGA SPI は、QSYS の SPI(3 Wire serial)を使用して SPI 通信ドライバを提供する。
初期設定は QSYS
で設定するため、コンフィギュレーション型はない。

4.3.4.1 データ仕様
FPGA SPI で使用するハンドラ型：FPGASPI_Handle_t を表 4.3.4.1.1 に示す。SPI 通信は割込みを使用し FIFO を用いてデータ通信を行うため、大容量の高速データ受信には不向きである。ハンドラ型
は割込みハンドラとの通信用データを確保するために使用する。また、割込みとのイベント通信用に
semid、排他制御用に semlock を初期化後に設定した方が、効率的に通信を行うことができる。
flags 転送時の SS の制御を指定する。
AVALON_SPI_COMMAND_MERGE：転送終了後も SS を落とさない。
AVALON_SPI_COMMAND_TOGGLE_SS_N：強制 SS 設定モードを指定しない。
番号

項目

型

機能

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

50

1
2
3
4
5
6
7
8
9
10

base
uint32_t
portiduint32_t
txBuffuint8_t *rxBuffuint8_t *size
uint32_t
txCount
uint32_t
flags
uint32_ttimeout
uint32_t
semid
int
semlockint
表 4.3.4.1.1 FPGASPI ハンドラ型

FPGA SPI レジスタのベースアドレス
FPGA SPI ポート ID
送信データ格納領域のポインタ
受信データ格納領域のポインタ
転送データのバイトサイズ
送信済みデータカウント
受信済みデータカウント
タイムアウト時間(ms)
転送イベント通知用セマフォ ID
排他制御用セマフォ ID

4.3.4.2 インターフェイス仕様
FPGA uart を制御するドライバ関数は以下の通りである。fpgauart_cts_sens ハードウェアフロー制
御時に有効。この関数は送信可能チェックを行い、送信可能で、送信データが残っている場合、送信再
開を行う。
関数名

型

引数

機能

fpgaspi_init

FPGASPI_andler*

ID portid

fpgaspi_deinit
fpgaspi_transrec
v

ER
ER

spim_fpga_isr

void

FPGASPI_Handler* hspi
FPGASPI_Handler* hspi
uint32_t slave
uint8_t *tx_buf
uint8_t *rx_buf
uint32_t len
intptr_t exinf

指定ポート ID の SPI ハンドラを初期化し、ハンドラへのポ
インタを返すSPI を未使用状態に戻す
slave に対して、tx_buf から送
信し、rx_buf に受信する。転送長は len。バッファがない場
合は NULL を指定する。

備考

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

表 4.3.4.2.1 FPGASPI ドライバ関数

4.3.4.3 フローチャート
まず、FPGASPI の割込み設定を有効にするために、ユーザーのコンフィギュレーションファイルに割込みサービスルーチンで INTNO_F2S_FPGA_IRQ32 を有効にする必要がある（割込み番号は QSYSの設定で変更が可能）。図 4.3.4.3.1 に初期化フローを示す。初期化は fpgaspi_init 関数にポート番号を引数として呼び出し、ハンドラのポインタを取り出す。ハンドラのポインタが NULL の場合、初期化
エラーが発生したことを示す。semid と semlock にセマフォを設定後、fpgaspi_transrecv 関数を用いてデータ転送を行う。転送のフローチャートを図 4.3.4.3.2 に示す。バッファがない場合はバッファへのポインタに NULL をセットする。

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

51

初期化

データ送受信fpgaspi_init関数を用
いてハンドラを取り出す

送信バッファにデー
タをセット

ハンドラ

fpgaspi_transrev関数でデータ転送== NULL!= NULL
ハンドラの属性
semidとsemlockに
セマフォIDを登録

戻り値≠ E_OK= E_OK
正常終了

エラー終了

図 4.3.4.3.1 初期化

4.3.5

正常終了

エラー終了

図 4.3.4.3.2 データ転送

FPGA ADCFPGA ADC は、QSYS の ADC Controller for DE-series Boards を FPGA IP として使用し、AD ピンのアナログ値をデジタル変換して ADC コントローラのレジスタに取り込みを行う。初期設定は QSYS
で設定するため、コンフィギュレーション型はない。この機能は DE ボードの固有機能である。

4.3.5.1 データ仕様
FPGA ADC は、FPGA のアドレスに以下のようにマッピングされる。このレジスタを直接読み込むことにより、変換データを取り込むことができる。
番号

項目

1
2
3
4
5
6
7

ADC_CH0_REG
uint32_t0(read)ADC_UPDATE
uint32_t0(write)
ADC_CH1_REG
uint32_t4(read)ADC_CH2_REG
uint32_t8(read)ADC_CH3_REG
uint32_t12(read)
ADC_CH4_REG
uint32_t16(read)
ADC_CH5_REG
uint32_t20(read)
表 4.3.5.1.1 FPGA ADC レジスタマップ

型

オフセット

機能

CH0/A0 のアナログデータ読み込み
データ書き込みで ADC スタート設定
CH1/A1 のアナログデータ読み込み
CH2/A2 のアナログデータ読み込み
CH3/A3 のアナログデータ読み込み
CH4/A4 のアナログデータ読み込み
CH5/A5 のアナログデータ読み込み

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

5.1 概要タスクモニタはタスク上で動作し、デバッグ用のコマンドを用いてプラットフォーム部の機能確認やテストを行う。デバックコマンドは設定によりコマンド追加が可能である。これによりアプリケーショ
ンでも、アプリケーション用デバッグコマンドを追加することができる。タスクモニタの入出力は標準
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

52

入出力に対して行う、デフォルトの標準入出力は FMP カーネルにて実装されているシリアルデバイス
であるが、入出力の切り替えにより、telnet の端末等に切り替えが可能である。

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

項目

型

機能

1
2
3
4
5
6
7
8

_flags_file_func_in_func_ins_func_out_func_outs_func_flush_dev
表 5.2.1 FILE 型

int
int
int
int
void
int
int
void *

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

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

型

引数

機能

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

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

備考

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

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

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

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

結果は num数

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

結果は num数

ファイルへプリント

結果は項目

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

53

putc

int

getchargetc

const char *const…
int c
FILE *fp

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

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

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

DISPLAY

SET

TASK

LOG

HELP

BYTE
start address[hex]
HALF
start address[hex]
WORD
start address[hex]TASK
REGISTER
BYTE
set address[hex]
HALF
set address[hex]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 標準デバッグコマンド

機能

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

ファイルライブラリが追加された場合、以下のコマンドを追加でサポートする。
第１コマンド第２コマンド

引数

VOLUMEFORMAT
drive
DIR
path
MKDIR
path
RMDIR
path
ERASE
path
表 5.3.2 ファイルデバッグコマンド機能

ドライブのフォーマット(未サポート)
ディレクトリの表示
ディレクトリの作成
ディレクトリの消去
ファイルの消去

RTC ドライバをサポートした場合、以下のコマンドを追加でサポートする。
第１コマンド第２コマンド

引数

機能

RTC

DATE
TIME
CLOCK

year month day
hour min sec-

日にちを設定する
時間を設定する
現在の日にちと時間を表示する

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

54

表 5.3.3 RTC デバッグコマンド

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

6.1 概要TOPPERS BASE PLATFORM でサポートするストレージ機能で使用するファイルシステムと時刻の管理を行う時間管理の２つの API について説明を行う。

6.2 ファイルシステム
ファイルシステムは TOPPERS BASE PLATFORM で提供するストレージ機能である。ファイルシ
ステムは以下の３つのモジュールで構成される。
① ファイルライブラリ
Ｃ言語標準のファイル関数をサポートするライブラリ② ストレージデバイスマネージャー
ストレージデバイスの管理モジュール③ FATFs
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

55

赤松武史氏が開発し、フリーソフトウェアとして公開されている、FAT 仕様準拠のローカルファイルシステム
TOPPERS BASE PLATFORM アプリケーション、ハードウェアを除く部分を供給している。
アプリケーション
C言語標準ファイル関数
STDIOインターフェイス

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

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

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

MCI部
USB
MIDDLE

SDMMC
ドライバ

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 仕様であるが、以下の規定に従って関数の選択を行った。
・Ｃ言語標準のもの（C89,C99）
・POSIX.1-2001 でよく使われるもの
・LINUX 固有であるが、通常使用に必要なもの
関数名

型

引数

機能

備考

open

int

close
fstat

int
int
off_t

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

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

lseek

read

long

write

long

mmap

void *

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-1 でエラー

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

-1 でエラー

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

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

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

56

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

mumap

int

fopen

FILE*

fclose
fseek

int
int

stat

int

lstat

int

access

int

mkdir

int

rmdir

int

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
struct statfs2*stat

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

成功０、失敗-1

ファイルの状態の取出し

成功０、失敗-1

ファイルの状態の取出し

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

ディレクトリの作成
ディレクトリの削除
ファイルモードの変更
ファイル削除ファイル削除ファイル名の変更

成功０、失敗-1

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

エラー時 NULL

成功０、失敗-1

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

表 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 型は、ファイルライブラリを作成するために、ローカル
ファイルシステムのファイル関数をテーブル化するための型である。
番号

項目

型

機能

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

57

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
8
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 がオンになっていないデバイスでは、メディアの挿抜チェックを行わない。この場合、初期化時のメディアの状態でメディアの有無を決定する。
番号

項目

1
2
3
4
5
6
7
8
9
10
11

_sdev_attributeuint16_t_sdev_devno
uint8_t_sdev_port
uint8_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

_num_activedev_sdev_active_default_device

uint16_t
uint8_tuint8_t

登録済ストレージデバイスの数
デバイスマネージャの有効無効
デフォルトデバイス番号

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

58

4
5

_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<<8)
デバイス動作中
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

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 ストレージデバイスマネージャー関数
定義

内容

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

59

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
8
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)

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 USB ミドルウェア
USB ミドルウェアとして、TOPPERS USB MIDDLEWARE を対応する。これは USB OTG デバイ
ス用の USB ホスト、デバイス機能、USB デバイスに対して USB デバイス機能を提供する。

6.4.1 USB ホスト機能
USB ホスト機能は、マルチデバイスを対応して HUB クラスに対して複数のクラスを同時管理可能である USB ホストは以下の５つのクラスをサポートする。
TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

60

ID

クラス名

機能

HUB
0x09
HUB のサポート
HID
0x03
MOUSE/KEYBOAED
MSC
0x08
USB メモリ
PRT
0x07
プリンタ
CDC/SERIAL 0x02
USB シリアル
BLUETOOTH 0xE0
Bluetooth クラス
表 6.4.1.1 USB ホストクラス

アプリとの通信機能

備考

コールバック関数設定
API による関数コール
API による関数コール/コールバック関数
API による関数コール/コールバック関数
API による関数コール/コールバック関数

1.3.1

6.4.2 USB デバイス機能
USB デバイス機能は、指定のクラスに対してのデバイス機能を提供する。
ID

クラス名

HID
MSC

機能

備考

0x03
MOUSE/KEYBOAED
0x08
USB メモリ
表 6.4.1.1 USB デバイスクラス

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

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

フォント

1 バイトフォント高さ

漢字フォント高さ

備考

東雲フォント

9,12,1612,16

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

表 6.5.1.1 UI ディレクトリ
東雲フォントの漢字ビットマップデータは以下のヘッダを持つ、ファイルといて参照する。
TOPPERS BASE PLATFORM(CV)で使用するには、SD カードのルートディレクトリ上に東雲フォン
トビットマップファイルコピーすれば、アクセス可能になる。フォントビットマップファイルは
ui/snfont_disp/shinonome_font12.fnt(高さ 12)、ui/snfont_disp/shinonome_font16.fnt(高さ 16)である。
以下に漢字フォントビットマップファイルのヘッダを示す。数値はリトルエンディアンとなる。
番号

項目

1
2
3
4
5
6
7
8

magic
name
fsize
csize
isize
off_cnv_table1
siz_cnv_table1
off_cnv_table2

0
4
36
40
44
48
52
56

型

機能

char [4]char [32]unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int“FONT”
フォント名
ファイルサイズ
ビットマップデータのコード部のバイト数
ビットマップデータのイメージ部のバイト数
UTF-8N 2 バイトコード検索テーブルへのオフセット
UTF-8N 2 バイトコード検索テーブルへのコード数
UTF-8N 3-1 バイトコード検索テーブルへのオフセット

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

61

9
10
11
12
13
14
15

siz_cnv_table2 60
unsigned int
UTF-8N 3-1 バイトコード検索テーブルへのコード数
off_cnv_table3
64
unsigned int
UTF-8N 3-2 バイトコード検索テーブルへのオフセット
siz_cnv_table3 68
unsigned int
UTF-8N 3-2 バイトコード検索テーブルへのコード数
off_2byte_font72
unsigned int
UTF-8N 2 バイトコード＋イメージへのオフセット
siz_2byte_font
76
unsigned int
UTF-8N 2 バイトコード＋イメージのアイテム数
off_3byte_font
80
unsigned int
UTF-8N 3 バイトコード＋イメージへのオフセット
siz_3byte_font84
unsigned int
UTF-8N 3 バイトコード＋イメージのアイテム数
表 6.5.1.2 東雲フォントファイルのヘッダ部構造体

7 ファイルの構成
TOPPERS BASE PLATFORM のソースファイル構造について記載する。共通部はファイルシステム
やタスクモニタ等共通となる部分について記載する。BASE PLATFORM のソフトウェア部品は fmpのベースディレクトリ上に配置する。

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

files
monitorsyssvcusb
jpeg-9b

ファイルシステムのソースとインクルードファイル
タスクモニタと標準入手力のソースとインクルードファイル
malloc,calloc,free 関数
USB ホスト、デバイスのミドルウェア
JPEG ライブラリ、Web より jpeg-9b をダウンロードセットし、ディレクトリ中の Makefile でライブラリをビルドしてください
libmad-0.15.1b
MAP3 でコードライブラリ、Web より libmad-0.15.1b をダウンロー
ドセットし、ディレクトリ中の Makefile でライブラリをビルドしてください
表 7.1.1 共通部ディレクトリ

備考

ソースなし
ソースなし

7.2 Cyclone V hps ドライバ
Cyclone V hps 用ドライバ部は pdic/hps_cv にソースファイルがある。
ファイル

内容

備考

device.cdevice.cfg
device.h
i2c.c
i2c.h
mcicmd.h
qspi.cqspi.hspi.c
spi.h
sdmmc.hsdmmc.cfg
sdmmc.c
socfpga_cv.h
usb_otg.c
usb_otg.h
emac.cemac.hGPIO,DMA,LED,SW ドライバ・ソースファイル
LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
ファイルシステム用インクルードファイル
QSPI ドライバ・ソースファイルQSPI ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
SD-card ドライバ・ソースファイル
SD-card ドライバの RTOS リソースファイル
SD-card インクルード・ソースファイル
HPS 用 SIL 記載インクルードファイル
USB-OTG ドライバ・ソースファイル
USB-OTG ドライバ・インクルードファイル
LWIP 用 EMAC ドライバ・ソースファイル
LWIP 用 EMAC ドライバ・インクルードファイル

Base
Base
Base

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

62

phyreg.h

PHY レジスタ定義・インクルードファイル
表 7.2.1 Cyclone V hps ドライバファイル

7.3 FPGA ドライバ
FPGA ドライバ部は pdic/fpga にソースファイルがある。FPGA の実装は QSYS の設定に従うため、IP のベースアドレスは、実装により修正を行う必要がある。ベースアドレスの定義は fpga.h インクルードファイル中に記載している。
ファイル

内容

備考

fpga.hpinmode.cpinmode.h

FPGA の定義用インクルードファイル
Arduino デジタル・ピンの GPIO 設定ドライバ・ソースファイル
Arduino デジタル・ピンの GPIO 設定ドライバ・インクルードファイ
ルfpgauart.c
FPGA UART ドライバ・ソースファイル
fpgauart.cfg
FPGA UART ドライバ・ コンフィギュレーションファイル
fpgauart.h
FPGA UART ドライバ・インクルードファイル
fpgaspi.c
FPGA SPI ドライバ・ソースファイル
fpgaspi.h
FPGA SPI ドライバ・インクルードファイル
表 7.3.1 FPGA ドライバファイル

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

備考

usb_otg

usb_otg(DWC2-OTG ドライバ)上に位置し、USB ミドルウェアにOTG 機能を提供する
adafruit_st7735
SPI インターフェイスの Adafruit 1.8”LCD に対して、グラフィック
API を提供する
aqm1284_st7565
SPI インターフェイスの AQM1284 LCD に対して、
グラフィック APIを提供
表 7.4.1 GDIC ディレクトリ

fpga 用fpga 用1.3.1

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

functions

1.1.0

06/25/2018

リードオンリーの fopen で open エラーとならない不具合対応(プログラムのみ)
usb host SERIAL/PRT 送受信を並行処理できるよう修正
BLUETOOTH CLASS の対応
I2C スレーブアドレス切り替え時の障害対応、I2C メモリ READ 変更
SOC EDS Command shell を開発環境として追加
ui ディレクトリ追加、gdic/aqm1284_st7565 を追加
Watch doc ドライバを追加/gpio 割込みの不具合対応

07/05/2018
08/24/2018
09/12/2018
10/17/2018
11/07/2018

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

63

Appendix A DE0-Nano-SoC Development Kit(Atlas-SoC Kit)/DE10-Nano
DE0-Nano-Soc/DE10-Nano のボード依存仕様を記載する。このコネクタを使用するには QSYS の設定と FPGA のコンフィギュレーションを行う必要がある。
(1)Arduino connectors 定義
CN No.

CN6
power

CN8
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
8
VIN
VCC9
1
A0
2
A1
3
A2
4
A3
5
A4
6
A5
表 A.1.1 左 Arduino connector 設定
Pin No.

Pin 名

MCU pin10
D15
PIN_AG11(FPGA)9
D14
PIN_AH9(FPGA)
8
AREF
7
GND
6
D13
PIN_AH12(FPGA)5
D12
PIN_AH11(FPGA)4
D11
PIN_AG16(FPGA)3
D10
PIN_AF15(FPGA)2
D9
PIN_AE15(FPGA)1
D8
PIN_AF17(FPGA)8
D7
PIN_AH8(FPGA)7
D6
PIN_AG8(FPGA)6
D5
PIN_U13(FPGA)5
D4
PIN_U14(FPGA)4
D3
PIN_AG9(FPGA)3
D2
PIN_AG10(FPGA)2
D1
PIN_AF13(FPGA)1
D0
PIN_AG13(FPGA)
表 A.1.2 右 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
-

機能

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

(2) LTC Connector
CN No.

Pin No.

J17

1
2
3
4
5
6
7
8
9
10
11

Pin 名

MCU pin

機能

VCC9
VCC3C3GND
SCK_SCL
HPS_SPIM1_MISO
HPS_SPIM1_SS
MOSI_SDAGND
HPS_I2C1 SDATVCC3P3
HPS_I2C1_SCLKPower input
3.3V
Ground
CLK/SCLMISO
SS
MOSI/SDA
Ground
SDA
3.3V
SCL

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

64

12
GND
13
GND
14
HPS_LTC_GPIO
表 A.1.3 LTC connector 設定

GroundGroundSelect SPIM1/I2C1

SPI のデバッグを LTC Connector を用いループバック接続して行った。

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

detailmedia
sdcardFPGALCD

Adafruit 1.8 TFT

RAM
RAM
RAM

MAC

-

RAM

USBH
ADXL345

-

RAM
RAM

SD カードと USB メモリ(MMC)のテストプログラム
SD カード用のファイルシステムのテストプログラム
グラフィック LCD 表示テストプログラム
但し、FPGA に arduion connector 用の設計が必要
LWLP の DHCP クライアント、ping テストが可能な実装
但 し 、 デ ィ レ ク ト リ lwip に LWIP の ソ ー ス 設 定(lwip-2.0.3/cntrib-2.0.1)が必要
また、設定ソースに数か所のパッチが必要
USB ホストテストプログラム
ADXL345 との I2C 通信

このボードを使用して開発したデバイスドライバ
GPIO, SDMMC, SPI, I2C,DMA, USB-OTG

Appendix B

DK-DEV-5CSX6N

DK-DEV-5CSX6N 開発キット依存仕様を記載する。
(1)Arduino connectors 定義
コネクタなし(2)サンプルプログラム
Program nameshieldenvironment

detailI2C_DEMO
QSI

-

RAM
RAM

ボードに付属の LCD/EEPROM 等のテストプログラム
QSPI テストプログラム

このボードを使用して開発、デバッグしたデバイスドライバ
I2C, QSPII2C はスレーブ側のポートが、アクティブとなっておらずスレーブのデバッグをしていない

TOPPERS BASE PLATFORM (CV) REFERENCE MANUAL

65