マイコンでTensorFlow!? (3)

今回はサンプルコードのビルドとボードへの書き込みをやってみます。以下の2つを試します。

  1. Edge Test:GPIO、UART、ADC、I2Cなどのハードウェア機能のデモ。
  2. Makefile Project Template : 自分でプロジェクトを作るためのテンプレート。

(1) Edge Test

4つのLEDを点灯し、マイクと加速度センサからの取得したデータを115200ボーのシリアル通信で送信します。ボタン14を押すと省電力のためにオフします。4つのLEDはGoogleカラーの赤・青・緑・黄ですね。

f:id:licheng:20190410075144j:plain:w500

プロジェクトのディレクト
~/AmbiqSuite/boards/SparkFun_Edge_AmbiqSDK_BSP/examples/example1_edge_test
シリアルポートの接続とデバイスノードの確認

SparkFun FTDI Basic Breakoutを介してSparkFun EdgeボードをPCのUSBポートに接続します。必ず3.3Vのものを使うことと、向きを間違えないように気を付けてください。向きは「GRN」「BLK」のシルクを目印にして合わせます。SparkFun EdgeボードをPCに接続する前後でシリアルポートを一覧して、追加されたものがSparkFun Edgeボードのシリアルポートです。

  • Macの場合、ls /dev/cu* でシリアルポートのデバイスノードを一覧できます。
  • Linuxの場合、ls /dev/tty* でシリアルポートのデバイスノードを一覧できます。
Makefileの修正

上記プロジェクトディレクトリの gcc/Makefileテキストエディタで開き、「SERIAL_PORT ?= 」の行を修正します。たとえば、SparkFun Edgeボードのシリアルポートが /dev/ttyUSB0 であれば、下記のように修正します。

#### Bootloader Configuration
SERIAL_PORT ?= /dev/ttyUSB0
ビルド

以下のコマンドを実行します。

cd ~/AmbiqSuite/boards/SparkFun_Edge_AmbiqSDK_BSP/examples/example1_edge_test/gcc
make clean
make
ボードへの書き込み

SparkFun Edgeボードのボタン14を押しながらリセットボタンを押し、ボタン14を押したままリセットボタンを離します。これでSparkFun Edgeボードはプログラム書き込み待ちになります。ボタン14を押したまま下記のコマンドを実行すると、SparkFun Edgeボードにプログラムが書き込まれます。組込みマイコンではおなじみのシリアル書き込みの作法ですが、書き込み中もボタン14を押し続けないといけない点が要注意です。ちょっと操作しにくいですね。片手でボタン14を押して片手でEnterキーを叩きましょう。

sudo make bootload
動作確認

お好みのシリアルターミナルでSparkFun Edgeボードのシリアルポートを開き、出力を確認します。ボーレートは115200です。Windowsならここは仮想マシン上ではなくWindows側でTera Termなどを使うのが簡単でしょう。ボタン14を押すとオフし、リセットボタンを押すと再起動します。

ライブラリの使い方

src/main.c をながめてみます。ライブラリを使うために以下のヘッダファイルをインクルードしています。

#include "am_mcu_apollo.h"
#include "am_bsp.h"
#include "am_util.h"

ライブラリ関数の使い方は、以下のディレクトリのヘッダファイルを見て感じ取ります。組込み系のライブラリなんてそういうものです。

  • ~/AmbiqSuite/mcu/apollo3/hal
  • ~/AmbiqSuite/boards/SparkFun_Edge_BSP/bsp
  • ~/AmbiqSuite/utils

(2) Makefile Project Template

プロジェクトのディレクト
~/AmbiqSuite/boards/SparkFun_Edge_AmbiqSDK_BSP/examples/SparkFun_Edge_Project_Template
Makefile

gcc/Makefile をながめてみます。

  • TARGET : 生成されるバイナリ名
  • COM_PORT : 'make bootload'コマンドでプログラムを書き込むときに使うシリアルポート
  • SDKPATH : SDKのパス
  • BOARDPATH : BSPのパス
  • USER_INCLUDEDIRS : ユーザーのインクルードディレクトリ (複数)
  • USER_SOURCEDIRS : ユーザーのソースディレクトリ (複数)
  • USER_MAIN_SRC : ユーザーのメインのソースファイル
  • USER_SOURCE_FILES : ユーザーのソースファイル (複数)
ビルドと書き込みのコマンド

gccディレクトリで以下のコマンドを実行します。

プロジェクトのクリーン

make clean

プロジェクトのビルド

make

ボードへのプログラム書き込み

sudo make bootload
ブートローダについて

このような便利なシリアル書き込みのために、Sparkfun EdgeボードではブートローダがApollo3マイコンに書き込み済みです。生のApollo3マイコンを買ってきた場合はJTAGかSWDでプログラムを書く必要があります。

参考URL

この記事は下記のSparkFunのページをもとに書きました。
learn.sparkfun.com