SNSへはこちら

Atmel SAMの開発環境を整える on Terminal

そういえばこのマイコンの記事放置していましたね。開発環境を整えるための情報があまり無いので使われる方は苦労したと思います。この記事では実際に使えるようになるまでの手順を示したいと思います。

Windows の方は Atmel Studio という素晴らしく良くできた IDE がありますのでそちらをお使いください。以下はLinux ユーザ、Mac ユーザ向けの苦労の記録です。。。

開発環境を得る

自分で CMSIS をダウンロードして、メモリマップに従ってヘッダファイルを作っても良いのですが、そんなことはせずに(したい)公式の環境をゲットします。

gccのインストール

まずその前に arm-none-eabi-gcc をインストールしましょう。Mac で Homebrew が入っている方は tap した後にインストールできます。

$ brew tap PX4/homebrew-px4
$ brew install gcc-arm-none-eabi

インストールできたかは -v をつけて確認しましょう。

$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/local/Caskroom/gcc-arm-embedded/7-2017-q4-major/gcc-arm-none-eabi-7-2017-q4-major/bin/../lib/gcc/arm-none-eabi/7.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: /Users/build/work/GCC-7-build/src/gcc/configure --target=arm-none-eabi --prefix=/Users/build/work/GCC-7-build/install-native --libexecdir=/Users/build/work/GCC-7-build/install-native/lib --infodir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/Users/build/work/GCC-7-build/install-native/arm-none-eabi --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 --with-gmp=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-mpfr=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-mpc=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-isl=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-libelf=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-lstdc++ -lm' --with-pkgversion='GNU Tools for Arm Embedded Processors 7-2017-q4-major' --with-multilib-list=rmprofile
Thread model: single
gcc version 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] (GNU Tools for Arm Embedded Processors 7-2017-q4-major)

公式ライブラリをゲット

さて実際に入手しておきましょう。まず以下の Atmel Start にアクセスします。会員登録無しで使えるんです。いいですね〜〜〜〜

そこで CREATE NEW PROJECT をクリックしてプロジェクトを作りましょう。本当はこのプロジェクト内で設定初期化用のファイルやらミドルウェアやらを入れていくのですが、そんなことは僕の正義に反するのでやりません。

さて、続いてマイコンの型番を入力してサーチしましょう。秋月の SAMD21 を買った場合は画像のとおり打ち込めば出てきます。一番上が合致するので選択、CREATE NEW PROJECT しましょう。

んで、色々とロードするので待ち時間があります。ここから、某 STM32 CubeMX のように設定できるのですが、それを颯爽とスルーしてそのままコード生成とします。上側ツールバー的なところから EXPORT PROJECT を選択。Makefile (Standalone) チェックを入れて DOWNLOAD PACK をポチッと。すると atzip 形式なる謎のファイルがダウンロードされます。なんでしょうこれ。ということで正体を見てみます…

$ file ~/Downloads/My\ Project.atzip
/Users/yuki/Downloads/My Project.atzip: Zip archive data, at least v2.0 to extract

アッハイ, ただの zip ファイルですね。解凍解凍。中身はこんな感じです。

$ ls
AtmelStart.env_conf  CMSIS/  atmel_start.c  atmel_start_config.atstart  config/        driver_init.h  gcc/  hpl/  main.c
AtmelStart.gpdsc     armcc/  atmel_start.h  atmel_start_pins.h          driver_init.c  examples/      hal/  hri/  samd21a/

あれ、main.c が裸で出ているのが癪ですねぇ…まあそれは後で解決するとして、この中の Makefile が Mac ユーザ仕様になっていない ので改変する必要があるのです。

Makefile を Mac に対応させる

編集していきましょう。場所は gcc/Makefile です。とは言っても改変する箇所は1箇所なのですが。その場所はファイル冒頭です。ifeq ($(shell uname), Linux) 付近に追加です。

    ifeq ($(shell uname), Linux)
        MK_DIR = mkdir -p
    endif
    ifeq ($(shell uname), Darwin) # ADD
        MK_DIR = mkdir -p
    endif

main.c をフォルダに入れてあげる

プロジェクトルートで src/ を作って入れてあげましょう。

$ mkdir src
$ mv main.c src/

そうして Makefile を編集します。以下に列挙しておきます。

  1. 変数 SUB_DIRSsrc を追加。
  2. 変数 OBJS にある main.osrc/main.o にする。
  3. 変数 OBJS_AS_ARGS にある "main.o""src/main.o" にする。
  4. 変数 DEPS_AS_ARGS にある"main.d""src/main.d" にする。

以上でできます。ちょっと面倒ですが。あと他のファイルを追加する時は上のそれぞれにそれっぽく追加してやってください。面倒なので wildcard とかの make にある関数を使うのが良いんでしょうけれど、それさえも面倒なので僕は素直に追加しています。

さて、終わったら gcc ディレクトリに移動して make を実行しましょう!

$ make
...
"arm-none-eabi-objdump" -h -S "AtmelStart.elf" > "AtmelStart.lss"
"arm-none-eabi-size" "AtmelStart.elf"
   text    data     bss     dec     hex filename
    780       0    8224    9004    232c AtmelStart.elf

はい、ということでデバッグ情報を含んだ AtmelStart.elf、そして素のプログラムのみが入っている AtmelStart.bin が出来上がりました!

書き込み方法

SAMD21 ちゃんは UART ブートローダーがありません。確か他のシリーズではあるものがあったと思います。なので書き込み手段は SWD とします。ですので openocd を使って

$ openocd -f interface/cmsis-dap.cfg -f target/at91samdXX.cfg -c "program AtmelStart.elf; reset; exit"

とすれば良いのではないでしょうか。

以上、開発環境の入れ方と設定でした。
また気が向いたらレジスタの打ち方とかご説明します。それでは〜