開発編

目次

3.1. アプリケーション開発の流れ
3.2. 開発前に知っておくべき Armadillo Base OS の機能・特徴
3.2.1. 一般的な Linux OS 搭載組み込み機器との違い
3.2.2. Armadillo Base OS 搭載機器のソフトウェア開発手法
3.2.3. アップデート機能について
3.2.3.1. SWUpdate とは
3.2.3.2. SWU イメージとは
3.2.3.3. A/Bアップデート(アップデートの2面化)
3.2.3.4. ロールバック(リカバリー)
3.2.3.5. SWU イメージのインストール
3.2.4. ファイルの取り扱いについて
3.2.4.1. 電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)
3.2.5. インストールディスクについて
3.2.5.1. 初期化インストールディスクの作成
3.2.5.2. インストールディスクを使用する
3.3. 開発の準備
3.3.1. 準備するもの
3.3.2. Armadillo-610 開発セットを使用する場合
3.3.2.1. Armadillo-610 開発セットの組み立て
3.3.3. 開発環境のセットアップ
3.3.3.1. VMwareのインストール
3.3.3.2. ATDEのアーカイブを取得
3.3.3.3. ATDEのアーカイブを展開
3.3.3.4. WindowsでATDEのアーカイブ展開する
3.3.3.5. Linuxでtar.xz形式のファイルを展開する
3.3.3.6. ATDEの起動
3.3.3.7. 取り外し可能デバイスの使用
3.3.3.8. コマンドライン端末(GNOME端末)の起動
3.3.3.9. シリアル通信ソフトウェア(minicom)の使用
3.3.4. Armadilloの起動
3.3.4.1. Armadilloと開発用PCを接続
3.3.5. ジャンパピンの設定について
3.3.6. スライドスイッチの設定について
3.3.6.1. 起動
3.3.6.2. ログイン
3.3.6.3. 終了方法
3.3.7. VSCodeのセットアップ
3.3.7.1. ソフトウェアのアップデート
3.3.7.2. VSCode に開発用エクステンションをインストールする
3.3.8. VSCode を使用して Armadillo のセットアップを行う
3.3.8.1. initial_setup.swu の作成
3.3.9. ユーザー登録
3.3.9.1. 購入製品登録
3.4. ハードウェアの設計
3.4.1. 信頼性試験データについて
3.4.2. 放射ノイズ
3.4.3. ESD/雷サージ
3.4.4. 放熱
3.4.5. 拡張ボードの設計
3.4.5.1. 電源
3.4.5.2. 起動デバイスの設定
3.4.5.3. LAN(Ethernet)
3.4.5.4. 無線LAN/BT
3.4.5.5. USB
3.4.5.6. シリアル(UART)
3.4.5.7. SD
3.4.5.8. スイッチ、LED、リレー
3.4.5.9. リアルタイムクロック
3.4.5.10. LCD
3.4.5.11. オーディオ
3.4.5.12. リセットスイッチ
3.4.5.13. ONOFFスイッチ
3.4.5.14. 基板形状
3.4.5.15. CON2(拡張インターフェース)の概要
3.4.5.16. LAN(Ethernet)
3.4.5.17. USB
3.4.5.18. UART
3.4.5.19. SD/SDIO/MMC
3.4.5.20. LCD
3.4.5.21. I2S(SAI)
3.4.5.22. MQS
3.4.5.23. S/PDIF
3.4.5.24. I2C
3.4.5.25. SPI
3.4.5.26. CAN
3.4.5.27. A/D
3.4.5.28. PWM
3.4.5.29. GPIO
3.4.5.30. リアルタイムクロック
3.4.6. 電気的仕様
3.4.6.1. 絶対最大定格
3.4.6.2. 推奨動作条件
3.4.6.3. 入出力インターフェースの電気的仕様
3.4.6.4. 電源回路の構成
3.4.6.5. リセット回路の構成
3.4.6.6. 外部からの電源制御
3.4.7. 形状図
3.4.7.1. 基板形状図
3.4.8. オプション品
3.5. Device Treeをカスタマイズする
3.5.1. Linux カーネルソースコードの取得
3.5.2. at-dtweb のインストール
3.5.3. at-dtweb の起動
3.5.4. Device Tree をカスタマイズ
3.5.4.1. 機能の選択
3.5.4.2. 信号名の確認
3.5.4.3. プロパティの設定
3.5.4.4. 機能の削除
3.5.4.5. Device Tree のファイルの生成
3.5.5. DT overlay によるカスタマイズ
3.5.5.1. 提供している DT overlay
3.6. インターフェースの使用方法とデバイスの接続方法
3.6.1. SDカードを使用する
3.6.1.1. ハードウェア仕様
3.6.1.2. microSDカードの挿抜方法
3.6.1.3. ソフトウェア仕様
3.6.1.4. 使用方法
3.6.2. Ethernet を使用する
3.6.2.1. ハードウェア仕様
3.6.2.2. ソフトウェア仕様
3.6.2.3. 使用方法
3.6.3. UART を使用する
3.6.3.1. ハードウェア仕様
3.6.3.2. ソフトウェア仕様
3.6.3.3. 使用方法
3.6.4. USB デバイスを使用する
3.6.4.1. ハードウェア仕様
3.6.4.2. ソフトウェア仕様
3.6.4.3. 使用方法
3.6.5. 音声出力を行う
3.6.6. GPIO を制御する
3.6.6.1. ハードウェア仕様
3.6.6.2. ソフトウェア仕様
3.6.6.3. 使用方法
3.6.7. I2C デバイスを使用する
3.6.7.1. ハードウェア仕様
3.6.7.2. ソフトウェア仕様
3.6.7.3. 使用方法
3.6.8. SPI デバイスを使用する
3.6.8.1. ハードウェア仕様
3.6.8.2. 使用方法
3.6.9. CAN デバイスを使用する
3.6.9.1. ハードウェア仕様
3.6.9.2. 使用方法
3.6.10. PWM を使用する
3.6.10.1. ハードウェア仕様
3.6.10.2. 使用方法
3.6.11. JTAG デバッガを使用する
3.6.12. LCD を使用する
3.6.12.1. ハードウェア仕様
3.6.12.2. ソフトウェア仕様
3.6.12.3. 使用方法
3.6.13. ユーザースイッチを使用する
3.6.13.1. ハードウェア仕様
3.6.13.2. ソフトウェア仕様(Armadillo-610 拡張ボードの場合)
3.6.13.3. 使用方法
3.6.14. LED を使用する
3.6.14.1. ハードウェア仕様
3.6.14.2. ソフトウェア仕様
3.6.14.3. 使用方法
3.6.15. RTC を使用する
3.6.15.1. ハードウェア仕様
3.6.15.2. ソフトウェア仕様
3.6.15.3. 使用方法
3.6.16. BT デバイスを使用する
3.6.17. Wi-SUN デバイスを扱う
3.6.18. EnOcean デバイスを扱う
3.6.19. Thread デバイスを扱う
3.7. ソフトウェアの設計
3.7.1. 開発者が開発するもの、開発しなくていいもの
3.7.2. ユーザーアプリケーションの設計
3.7.3. ログの設計
3.7.3.1. ログの保存場所
3.7.3.2. 保存すべきログ
3.7.4. ウォッチドッグタイマー
3.8. ネットワーク設定
3.8.1. ABOS Web とは
3.8.2. ABOS Web へのアクセス
3.8.3. ABOS Web のパスワード登録
3.8.4. ABOS Web の設定操作
3.8.5. ログアウト
3.8.6. WWAN設定
3.8.7. WLAN 設定
3.8.7.1. WLAN 設定(クライアントとしての設定)
3.8.7.2. WLAN 設定(アクセスポイントとしての設定)
3.8.8. 各接続設定(各ネットワークインターフェースの設定)
3.8.8.1. LAN 接続設定
3.8.8.2. WWAN 接続設定
3.8.8.3. WLAN 接続設定
3.8.9. DHCPサーバー設定
3.8.10. NAT設定
3.8.10.1. NAT 設定
3.8.10.2. ポートフォワーディング設定
3.8.10.3. VPN設定
3.8.11. 状態一覧
3.9. Network Time Protocol (NTP, ネットワーク・タイム・プロトコル) の設定
3.10. CUI アプリケーションの開発
3.10.1. CUI アプリケーション開発の流れ
3.10.2. ATDE 上でのセットアップ
3.10.2.1. プロジェクトの作成
3.10.3. アプリケーション開発
3.10.3.1. VSCode の起動
3.10.3.2. ディレクトリ構成
3.10.3.3. 初期設定
3.10.3.4. アプリケーション実行用コンテナイメージの作成
3.10.4. Armadillo 上でのセットアップ
3.10.4.1. アプリケーション実行用コンテナイメージのインストール
3.10.4.2. ssh 接続に使用する IP アドレスの設定
3.10.4.3. アプリケーションの実行
3.10.5. リリース版のビルド
3.10.6. 製品への書き込み
3.10.7. Armadillo 上のコンテナイメージの削除
3.11. システムのテストを行う
3.11.1. ランニングテスト
3.11.2. 異常系における挙動のテスト

3.1. アプリケーション開発の流れ

Armadillo-610 では基本的に ATDE という Armadillo 専用開発環境と、 Visual Studio Code 向け Armadillo 開発用エクステンションを用いてアプリケーション開発を行っていきます。

基本的な Armadillo-610 でのアプリケーション開発の流れを図3.1「アプリケーション開発の流れ」に示します。

本章では、図3.1「アプリケーション開発の流れ」に示す開発時の流れに沿って手順を紹介していきます。

images/common-images/development-flow.png

図3.1 アプリケーション開発の流れ


3.2. 開発前に知っておくべき Armadillo Base OS の機能・特徴

「Armadillo Base OSとは」にて Armadillo Base OS についての概要を紹介しましたが、開発に入るにあたってもう少し詳細な概要について紹介します。

3.2.1. 一般的な Linux OS 搭載組み込み機器との違い

images/abos-images/development-abos-debian-diff.png

Linux OS 搭載組み込み機器ではアプリケーションの実行環境をユーザーランド上に直接用意し、Systemdなどでアプリケーションを自動実行させるのが一般的です。 Armadillo Base OS 搭載機器では、アプリケーションの実行環境をコンテナ内に用意して、コンテナ起動用設定ファイルを所定の場所に配置することでコンテナ(=アプリケーション)を自動実行させます。

また、Linux OS 搭載組み込み機器では、ストレージの保護のために overlayfs で運用するのが一般的です。 そのため、アプリケーションが出力するログや画像などのデータは、 USBメモリなどの外部デバイスに保存する必要があります。 Armadillo Base OS 搭載機器もルートファイルシステムが overlayfs 化されていますが、内部に USBメモリなどと同じように使用できるユーザーデータディレクトリを持っており、別途外部記録デバイスを用意しておく必要はありません。

Armadillo Base OS 搭載機器は、標準でセキュアエレメントを搭載しており、対応した暗号化方式の認証鍵や証明書を安全に保存・利用することが可能です。

3.2.2. Armadillo Base OS 搭載機器のソフトウェア開発手法

images/abos-images/development-abos-app.png

Armadillo Base OS 搭載機器上で動作するソフトウェアの開発は、基本的に作業用PC上で行います。

ネットワークの設定は ABOS Web という機能で、コマンドを直接打たずとも設定可能です。

開発環境として、ATDE(Atmark Techno Development Environment)という仮想マシンイメージを提供しています。 その中で、ABOSDE(Armadillo Base OS Development Environment)という、Visual Studio Code にインストールできる開発用エクステンションを利用してソフトウェア開発を行います。

ABOSDE を使用することで、コンテナ及びコンテナ自動起動用設定ファイルの作成、コンテナ内におけるパッケージのインストール、コンテナ内で動作するアプリケーション本体の開発をすべてVSCode内で行うことができます。

3.2.3. アップデート機能について

Armadillo-610 では、開発・製造・運用時にソフトウェアを書き込む際に、 SWUpdate という仕組みを利用します。

3.2.3.1. SWUpdate とは

SWUpdateは、デバイス上で実行されるプログラムで、ネットワーク/ストレージ経由でデバイスのソフトウェアを更新することができます。 Stefano Babic, DENX software engineering, Germany によってオープンソースで開発が進められています。

Armadillo-610 では、 SWUpdateを利用することで次の機能を実現しています。

  • A/Bアップデート(アップデートの2面化)
  • リカバリーモード
  • ソフトウェアの圧縮、暗号化、署名付与
  • Web サーバーでのリモートアップデート対応
  • hawkBit でのリモートアップデート対応
  • ダウングレードの禁止

3.2.3.2. SWU イメージとは

swuパッケージは、SWUpdate独自のソフトウェアの配布フォーマットです。 SWUpdateでは、1回のアップデートは1つのswuパッケージで行われます。

swuパッケージには、次のような様々なものを含めることができます。

  • アップデート対象のイメージファイル
  • アップデート対象のイメージファイルのチェックサム
  • アップデート前後に実行するスクリプト
  • 書き込み先ストレージの情報
  • U-Boot 環境変数の書き換え情報
  • ソフトウェアのバージョン情報
  • etc…

SWU イメージは swupdate (https://sbabic.github.io/swupdate/swupdate.html) によって Armadillo Base OS上で検証とインストールが実行されます。 SWU イメージを Armadillo に転送するための方法は、用途や状況に合わせて様々な方法を用意しています。例えば、 USB メモリから読み取る、ウェブサーバーからダウンロードする、 hawkBit という Web アプリケーションを使うなどです。

3.2.3.3. A/Bアップデート(アップデートの2面化)

A/B アップデートは、 Flash メモリにパーティションを2面確保し、 アップデート時には交互に利用する仕組みです。

常に使用していない方のパーティションを書き換えるため次の特徴を持ちます。

  • ○ アップデートによって動作中のソフトウェアは破壊されない
  • ○ 書き込みが電源断などで中断後しても、すぐに復帰出来る
  • ○ 機器が動作中に書き込みが出来る
  • × 使用Flashメモリ量が増える

3.2.3.4. ロールバック(リカバリー)

システムが起動できなくなった際に、自動的にアップデート前のシステムにロールバックします。

ロールバック状態の確認は 「ロールバック状態を確認する」 を参照してください。

ロールバックする条件は次の通りです:

  • rootfs にブートに必要なファイルが存在しない場合(/boot/Image, /boot/armadillo.dtb)
  • 3回起動を試して「bootcount」サービスが1度も起動できなかった場合は、次の起動時にロールバックします。

    bootcount 機能は uboot の「upgrade_available」変数で管理されています。 bootcount 機能を利用しないようにするには、「u-boot の環境変数の設定」 を参照して変数を消します。

  • ユーザーのスクリプトなどから、「abos-ctrl rollback」コマンドを実行した場合。

ロールバックが実行されると /var/at-log/atlog にログが残ります。

3.2.3.5. SWU イメージのインストール

イメージをインストールする方法として以下に示すような方法があります。 もし、作成した SWU イメージのインストールに失敗する場合は、「swupdate がエラーする場合の対処」をご覧ください。

  • USBメモリまたはSDカードからの自動インストール

    Armadillo-610にUSBメモリを接続すると自動的にアップデートが始まります。 アップデート終了後にArmadillo-610は自動で再起動します。

    USBメモリやSDカードをvfatもしくはext4形式でフォーマットし、作成した.swuのファイルをディレクトリを作らずに配置してください。

    [ティップ]

    ATDE上でUSBメモリ/microSDカードのパーティションを作成・フォーマットする方法

    https://armadillo.atmark-techno.com/howto/atde-partition-howto

    [ATDE ~/mkswu]$ df -h
    Filesystem           Size  Used Avail Use% Mounted on
    : (省略)
    /dev/sda1        15G  5.6G  9.1G  39% /media/USBDRIVE 1
    [ATDE ~/mkswu]$ cp initial_setup.swu /media/USBDRIVE/ 2
    [ATDE ~/mkswu]$ umount /media/USBDRIVE 3

    1

    USBメモリがマウントされている場所を確認します。

    2

    ファイルをコピーします。

    3

    /media/USBDRIVEをアンマウントします。コマンド終了後にUSBメモリを取り外してください。

    エラーの場合、/var/log/messageに保存されます。例えば、コンソールで証明の間違ったイメージのエラーを表示します:

    [armadillo ~]# tail /var/log/messages
    Nov 19 10:48:42 user.notice swupdate-auto-update: Mounting sda0 on /mnt
    Nov 19 10:48:42 user.notice swupdate-auto-update: Trying update /mnt/initial_setup.swu
    Nov 19 10:48:42 user.info swupdate: START Software Update started !
    Nov 19 10:48:42 user.err swupdate: FAILURE ERROR : Signature verification failed 1
    Nov 19 10:48:42 user.err swupdate: FAILURE ERROR : Compatible SW not found
    Nov 19 10:48:42 user.err swupdate: FATAL_FAILURE Image invalid or corrupted. Not installing ...

    1

    証明が間違ったメッセージ。

  • 外部記憶装置からイメージのインストール(手動)

    USBメモリやmicroSDカード等の外部記憶装置のルートディレクトリ以外にswuイメージを保存して、イメージのインストールを行います。 ルートディレクトリに保存すると自動アップデートが行われますので、/var/log/messagesを確認してください。

    以下は外部記憶装置が/dev/mmcblk1p1(microSDカード)として認識された場合に、イメージのインストールを行う例です。

    [armadillo ~]# mount /dev/mmcblk1p1 /mnt
    [armadillo ~]# swupdate -i /mnt/swu/initial_setup.swu
    SWUpdate v5f2d8be-dirty
    
    Licensed under GPLv2. See source distribution for detailed copyright notices.
    
    [INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
    [INFO ] : SWUPDATE started :  Software Update started !
    [INFO ] : SWUPDATE running :  [read_lines_notify] : No base os update: copying current os over
    [INFO ] : SWUPDATE running :  [read_lines_notify] : Removing unused containers
    [INFO ] : SWUPDATE running :  [read_lines_notify] : swupdate triggering reboot!
    Killed
  • ウェブサーバーからイメージのインストール(手動)

    swuイメージをウェブサーバーにアップロードして、イメージのインストールを行います。 以下は、http://server/initial_setup.swu のイメージをインストールする例です。

[armadillo ~]# swupdate -d '-u http://server/initial_setup.swu'
SWUpdate v5f2d8be-dirty

Licensed under GPLv2. See source distribution for detailed copyright notices.

[INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
[INFO ] : SWUPDATE running :  [channel_get_file] : Total download size is 25 kB.
[INFO ] : SWUPDATE started :  Software Update started !
[INFO ] : SWUPDATE running :  [read_lines_notify] : No base os update: copying current os over
[INFO ] : SWUPDATE running :  [read_lines_notify] : Removing unused containers
[INFO ] : SWUPDATE running :  [read_lines_notify] : swupdate triggering reboot!
Killed
  • ウェブサーバーからの定期的な自動インストール

    swupdate-urlを有効にしたら、定期的にチェックしてインストールします。 以下はサービスの有効化とタイミングの設定の例です。

    [armadillo ~]# rc-update add swupdate-url 1
    [armadillo ~]# persist_file /etc/runlevels/default/swupdate-url 2
    [armadillo ~]#
        echo https://download.atmark-techno.com/armadillo-640/image/baseos-640-latest.swu \
                            > /etc/swupdate.watch 3
    [armadillo ~]# echo 'schedule="0 tomorrow"' > /etc/conf.d/swupdate-url
    [armadillo ~]# echo 'rdelay="21600"' >> /etc/conf.d/swupdate-url 4
    [armadillo ~]# persist_file /etc/swupdate.watch /etc/conf.d/swupdate-url 5

    1

    swupdate-urlサービスを有効します。

    2

    サービスの有効化を保存します。

    3

    イメージのURLを登録します。一行ごとにイメージのURLを設定することができ、複数行にイメージのURLを設定することができます。

    4

    チェックやインストールのスケジュールを設定します。

    5

    変更した設定ファイルを保存します。

    USBメモリからのアップデートと同様に、ログは/var/log/messagesに保存されます。

    [ティップ]

    initial_setupのイメージを作成の際に /usr/share/mkswu/examples/enable_swupdate_url.desc を入れると有効にすることができます。

  • hawkBit を使用した自動インストール

    hawkBit で Armadillo-610 を複数台管理してアップデートすることができます。 「hawkBitサーバーから複数のArmadilloに配信する」を参考にしてください。

3.2.4. ファイルの取り扱いについて

Armadillo Base OS ではルートファイルシステムに overlayfs を採用しています。

その為、ファイルを変更した後 Armadillo の電源を切ると変更内容は保持されません。 開発中などに rootfs の変更内容を保持するには、変更したファイルに対して persist_file コマンドを使用します。

[armadillo ~]# echo test > test
[armadillo ~]# persist_file -v test
'/root/test' -> '/mnt/root/test'

図3.2 persist_file コマンド実行例


persist_file コマンドの詳細については、「persist_file について」を参照してください。

また、 SWUpdate によってルートファイルシステム上に配置されたファイルについては、 persist_file を実行しなくても保持されます。 開発以外の時は安全のため、 persist_file コマンドではなく SWUpdate による更新を実行するようにしてください。

3.2.4.1. 電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)

「ファイルの取り扱いについて」 にて、 Armadillo Base OS 上のファイルは通常、 persist_file コマンドを実行せずに電源を切ると変更内容が保存されないと紹介しましたが、表3.1「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」に示すディレクトリ内にあるファイルはこの限りでありません。

表3.1 電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)

ディレクトリ 備考

/var/app/volumes

SWUpdate の最中や後も保持され続けます。ロールバックが発生しても、アップデート前の状態には戻りません。ログやデータベースなど、アプリケーションが動作中に作成し続けるようなデータの保存に向いています。

/var/app/rollback/volumes

SWUpdate の最中や後も保持され続けます。ロールバックが発生すると、アップデート前の状態に戻ります。コンフィグファイルなど、アプリケーションのバージョンに追従してアップデートするようなデータの保存に向いています。


[ティップ]

コンテナを前のバージョンに戻した場合(ロールバック)、/var/app/rollback/volumes/ のデータの前のバージョンに戻ります。

その為、アプリケーションのバージョンに依存するようなデータは /var/app/rollback/volumes/ に入れることを推奨します。

mkswuswdesc_files (--extra-os 無し)と podman_startadd_volumes では、相対パスはそのディレクトリをベースにします。 /var/app/rollback/volumes/myvolumemyvolume で簡潔に指定できます。

[警告]

Copy-on-Write (CoW) について。

この二つの volumes ディレクトリは btrfs と呼ばれるファイルシステムに保存されています。 btrfs ではデータは Copy on Write(CoW)を使ってデータ完全性を保証しますが、その保証にはコストがあります。

数百 MB のファイルに小さな変更を頻繁に行う場合 CoW を無効化することを推奨します。 CoW を無効化されたファイルにチェックサムが入らなくなりますので、極端な場合以外に残してください。

[armadillo ~]# cd /var/app/volumes/
[armadillo /var/app/volumes]# mkdir database
[armadillo /var/app/volumes]# chattr +C database 1
[armadillo /var/app/volumes]# echo example data > database/example
[armadillo /var/app/volumes]# lsattr database/ 2
---------------C---- database/example

図3.3 chattr によって copy-on-write を無効化する例


1

chattr +C でディレクトリに NoCow を設定します。これから作成されるファイルが NoCow で作成されます。すでに存在していたファイルに影響ないのでご注意ください。

2

lsattr 確認します。リストの C の字があればファイルが「no cow」です。

3.2.5. インストールディスクについて

インストールディスクは、 Armadillo の eMMC の中身をまとめて書き換えることのできる microSD カードを指します。 インストールディスクは、インストールディスクイメージを microSD カードに書き込むことで作成できます。

インストールディスクには以下の2つの種類があります。

  • 初期化インストールディスク

    Armadillo を初期化する際に使用されます。

  • 開発が完了した Armadillo-610 をクローンするためのインストールディスク

    量産時など、特定の Armadillo を複製する際に使用されます。 詳しくは、4章量産編で説明します。

3.2.5.1. 初期化インストールディスクの作成

  1. 512 MB 以上の microSD カードを用意してください。
  2. 標準のインストールディスクイメージを使用する場合は、 Armadillo Base OS対応 Armadillo-610 インストールディスクイメージ から 「Armadillo Base OS」をダウンロードしてください。

    「Armadilloのソフトウェアをビルドする」 でビルドしたイメージを使用してインストールディスクを作成したい場合は、 以下のコマンドを実行して、インストールディスクイメージを作成してください。

    [ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh \
            --firmware ~/at-imxlibpackage/imx_lib.img
    : (省略)
    [ATDE ~/build-rootfs-[VERSION]]$ ls baseos-a640*img
    baseos-640-[VERSION].img
    [ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh --board a600 \
            --boot ~/u-boot-[VERSION]/u-boot-dtb.imx \
            --installer ./baseos-640-[VERSION].img

    コマンドの実行が完了すると、baseos-640-[VERSION]-installer.img というファイルが作成されていますので、 こちらを使用してください。

  3. ATDE に microSD カードを接続します。詳しくは「取り外し可能デバイスの使用」を参考にしてください。
  4. microSD カードのデバイス名を確認します

    [ATDE ~]$ ls /dev/sd?
    /dev/sda  /dev/sdb
    [ATDE ~]$ sudo fdisk -l /dev/sdb
    Disk /dev/sdb: 7.22 GiB, 7751073792 bytes, 15138816 sectors
    Disk model: SD/MMC
    : (省略)
  5. microSD カードがマウントされている場合、アンマウントします。

    [ATDE ~]$ mount
    : (省略)
    /dev/sdb1 on /media/52E6-5897 type ext2 (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks)
    [ATDE ~]$ sudo umount /dev/sdb1
  6. ダウンロードしたファイルを展開し、imgファイルをmicroSDカードに書き込んでください。

    Linux PCの場合、以下のようにmicroSDカードに書き込むことができます。

    [ATDE ~]$ unzip baseos-600-installer-[VERSION].zip
    [ATDE ~]$ sudo dd if=baseos-600-installer-[VERSION].img \
                      of=/dev/sdb bs=1M oflag=direct status=progress

    また、Windowsの場合、エクスプローラー等でZipファイルからimgファイルを取り出し、「Win32 Disk Imager」などを使用してmicroSDカードに書き込むことができます。

3.2.5.2. インストールディスクを使用する

  1. JP1とJP2を共にジャンパーでショート(SDブートに設定)し、microSDカードをCON1に挿入します。
  2. 電源を投入すると、1分程度でeMMCのソフトウェアの初期化が完了します。
  3. 完了すると電源が切れます(全てのLEDが消灯、コンソールに reboot: Power down が表示)。
  4. 電源を取り外し、続いてJP1とJPジャンパーとmicroSDカードを外してください。
  5. 10秒以上待ってから再び電源を入れると、初回起動時と同じ状態になります。

3.3. 開発の準備

3.3.1. 準備するもの

Armadilloを使用する前に、次のものを必要に応じて準備してください。

作業用PC
LinuxまたはWindowsが動作し、ネットワークインターフェースと 1つ以上のUSBポートを持つPCです。
ネットワーク環境
Armadilloと作業用PCをネットワーク通信ができるようにしてください。
SDカード
SDスロットの動作を確認する場合などに利用します。
microSDカード
microSDスロットの動作を確認する場合などに利用します。
USBメモリ
USBの動作を確認する場合などに利用します。
tar.xz形式のファイルを展開するソフトウェア
開発/動作確認環境を構築するために利用します。Linuxでは、tar で展開できます。Windowsでは、7-Zip や Lhazなどが対応しています。

3.3.2. Armadillo-610 開発セットを使用する場合

Armadillo-610 開発セット同梱の Armadillo-610 拡張ボードで試しに動かしてみたい場合は、以下の手順を参照して Armadillo-610 拡張ボードに Armadillo-610 を組み付けてください。

Armadillo-610 拡張ボードを使用しない場合は、本節は読み飛ばして、「開発環境のセットアップ」に進んでください。

3.3.2.1. Armadillo-610 開発セットの組み立て

Armadillo-610 拡張ボードの4隅のねじ穴は、スペーサー固定用です。 Armadillo-610 開発セットに同梱されているM3のねじとスペーサーを取り付けてください。

[警告]コネクタ嵌合時の注意

コネクタの中心を合わせて嵌合してください。

images/con-in1.svg

位置合わせをする際は、無理な力を加えることなく誘い込み口を探してください。 無理な力を加えると、モールドの破損、削れが発生し、 接触抵抗の不具合等に繋る場合があります。

images/con-in2.svg

コネクタが誘い込まれると、コネクタ間の距離が近くなり、 平行になって前後左右に動かなくなります。 この状態からまっすぐに嵌合してください。

images/con-in3.svg
images/a610dev-assembly.svg

図3.4 Armadillo-610 開発セットの組み立て


[注記]

Armadillo-610 開発セットでは、Armadillo-610はArmadillo-610 拡張ボードに搭載した状態で出荷されます。 M2のねじが同梱されていますが、こちらはArmadillo-WLAN(AWL13)固定用としてご使用ください。

[警告]コネクタ抜去時の注意

コネクタは平行に抜去してください。

images/con-out1.svg

平行に抜去することが困難な場合、 コネクタ幅の狭い方向から斜めに抜去してください。

images/con-out2.svg

コネクタが損傷する可能性が高いため、 コネクタのコーナー方向や幅の広い方向から斜めに抜去しないでください。

images/con-out3.svg

3.3.3. 開発環境のセットアップ

アットマークテクノ製品のソフトウェア開発や動作確認を簡単に行うために、VMware仮想マシンのデータイメージを提供しています。このVMware仮想マシンのデータイメージをATDE(Atmark Techno Development Environment)と呼びます。ATDEの起動には仮想化ソフトウェアであるVMwareを使用します。ATDEのデータは、tar.xz圧縮されています。環境に合わせたツールで展開してください。

[ティップ]

仮想化ソフトウェアとして、VMwareの他にOracle VM VirtualBoxが有名です。 Oracle VM VirtualBoxには以下の特徴があります。

  • GPL v2(General Public License version 2)で提供されている [4]
  • VMware形式の仮想ディスク(.vmdk)ファイルに対応している

Oracle VM VirtualBoxからATDEを起動し、ソフトウェア開発環境として使用することができます。

ATDEは、バージョンにより対応するアットマークテクノ製品が異なります。本製品に対応しているATDEは、ATDE9 の v20230328 以降です。

ATDE9 は Debian GNU/Linux 11 (コードネーム bullseye) をベースに、Armadillo-610 のソフトウェア開発を行うために必要なクロス開発ツールや、Armadillo-610 の動作確認を行うために必要なツールが事前にインストールされています。

3.3.3.1. VMwareのインストール

ATDEを使用するためには、作業用PCにVMwareがインストールされている必要があります。 VMware社 Webページ(http://www.vmware.com/)を参照し、利用目的に合うVMware製品をインストールしてください。 また、ATDEのアーカイブは tar.xz圧縮されていますので、環境に合せたツールで展開してください。

[警告]

VMwareは、非商用利用限定で無償のものから、商用利用可能な有償のものまで複数の製品があります。製品ごとに異なるライセンス、エンドユーザー使用許諾契約書(EULA)が存在するため、十分に確認した上で利用目的に合う製品をご利用ください。

[警告]

VMwareやATDEが動作しないことを未然に防ぐため、使用するVMwareのドキュメントから以下の項目についてご確認ください。

  • ホストシステムのハードウェア要件
  • ホストシステムのソフトウェア要件
  • ゲストOSのプロセッサ要件

VMwareのドキュメントは、VMware社 Webページ(http://www.vmware.com/)から取得することができます。

3.3.3.2. ATDEのアーカイブを取得

ATDEのアーカイブは Armadillo サイト(http://armadillo.atmark-techno.com)から取得可能です。

[注記]

本製品に対応している ATDE のバージョンは ATDE9 v20230328 以降です。

[警告]

作業用PCの動作環境(ハードウェア、VMware、ATDEの対応アーキテクチャなど)により、ATDEが正常に動作しない可能性があります。VMware社 Webページ(http://www.vmware.com/)から、使用しているVMwareのドキュメントなどを参照して動作環境を確認してください。

3.3.3.3. ATDEのアーカイブを展開

ATDEのアーカイブを展開します。ATDEのアーカイブは、tar.xz形式の圧縮ファイルです。

Windowsでの展開方法を「WindowsでATDEのアーカイブ展開する」に、Linuxでの展開方法を手順「Linuxでtar.xz形式のファイルを展開する」に示します。

3.3.3.4. WindowsでATDEのアーカイブ展開する

  1. 7-Zipのインストール

    7-Zipをインストールします。7-Zipは、圧縮解凍ソフト 7-Zipのサイト(http://sevenzip.sourceforge.jp)からダウンロード取得可能です。

  2. 7-Zipの起動

    7-Zipを起動します。

    images/common-images/atde8/7-zip1.png
  3. xz圧縮ファイルの選択

    xz圧縮ファイルを展開して、tar形式のファイルを出力します。tar.xz形式のファイルを選択して、「展開」をクリックします。

    images/common-images/atde8/7-zip2.png
  4. xz圧縮ファイルの展開先の指定

    「展開先」を指定して、「OK」をクリックします。

    images/common-images/atde8/7-zip3.png
  5. xz圧縮ファイルの展開

    展開が始まります。

    images/common-images/atde8/7-zip4.png
  6. tarアーカイブファイルの選択

    xz圧縮ファイルの展開が終了すると、tar形式のファイルが出力されます。tarアーカイブファイルを出力したのと同様の手順で、tarアーカイブファイルからATDEのデータイメージを出力します。tar形式のファイルを選択して「展開」をクリックし、「展開先」を指定して、「OK」をクリックします。

    images/common-images/atde8/7-zip5.png
  7. 展開の完了確認

    tarアーカイブファイルの展開が終了すると、ATDEアーカイブの展開は完了です。「展開先」に指定したフォルダにATDEのデータイメージが出力されています。

    images/common-images/atde8/7-zip6.png

3.3.3.5. Linuxでtar.xz形式のファイルを展開する

  1. tar.xz圧縮ファイルの展開

    tarxf オプションを使用して tar.xz 圧縮ファイルを展開します。

    [PC ~]$ tar xf atde9-amd64-[VERSION].tar.xz
  2. 展開の完了確認

    tar.xz圧縮ファイルの展開が終了すると、ATDEアーカイブの展開は完了です。 atde9-amd64-[VERSION] ディレクトリにATDEのデータイメージが出力されています。

    [PC ~]$ ls atde9-amd64-[VERSION]/
    atde9-amd64-s001.vmdk  atde9-amd64-s008.vmdk
    atde9-amd64-s002.vmdk  atde9-amd64-s009.vmdk
    atde9-amd64-s003.vmdk  atde9-amd64.nvram
    atde9-amd64-s004.vmdk  atde9-amd64.vmdk
    atde9-amd64-s005.vmdk  atde9-amd64.vmsd
    atde9-amd64-s006.vmdk  atde9-amd64.vmx
    atde9-amd64-s007.vmdk  atde9-amd64.vmxf

3.3.3.6. ATDEの起動

ATDEのアーカイブを展開したディレクトリに存在する仮想マシン構成(.vmx)ファイルをVMware上で開くと、ATDEを起動することができます。ATDE9にログイン可能なユーザーを、表3.2「ユーザー名とパスワード」に示します [5]

表3.2 ユーザー名とパスワード

ユーザー名パスワード権限

atmark

atmark

一般ユーザー

root

root

特権ユーザー


[ティップ]

ATDEを起動する環境によっては、GUIログイン画面が表示されずに以下のようなエラー画面が表示される場合があります。

images/common-images/atde9/atde_error.png

この場合は、VMwareの設定で「3D グラフィックスのアクセラレーション」をONにした後、ATDEを起動すると 正常にGUIログイン画面が表示されます。設定箇所を以下に示します。

images/common-images/atde9/vmware_setting.png
images/common-images/atde9/vmware_setting_3d.png
[ティップ]

ATDEに割り当てるメモリおよびプロセッサ数を増やすことで、ATDEをより快適に使用することができます。仮想マシンのハードウェア設定の変更方法については、VMware社 Webページ(http://www.vmware.com/)から、使用しているVMwareのドキュメントなどを参照してください。

3.3.3.7. 取り外し可能デバイスの使用

VMwareは、ゲストOS (ATDE)による取り外し可能デバイス(USBデバイスやDVDなど)の使用をサポートしています。デバイスによっては、ホストOS (VMwareを起動しているOS)とゲストOSで同時に使用することができません。そのようなデバイスをゲストOSで使用するためには、ゲストOSにデバイスを接続する操作が必要になります。

[ティップ]

取り外し可能デバイスの使用方法については、VMware社 Webページ(http://www.vmware.com/)から、使用しているVMwareのドキュメントなどを参照してください。

Armadillo-610の動作確認を行うためには、表3.3「動作確認に使用する取り外し可能デバイス」に示すデバイスをゲストOSに接続する必要があります。

表3.3 動作確認に使用する取り外し可能デバイス

デバイスデバイス名

USBシリアル変換アダプタ

Future Devices FT232R USB UART

作業用PCの物理シリアルポート

シリアルポート


3.3.3.8. コマンドライン端末(GNOME端末)の起動

ATDEで、CUI (Character-based User Interface)環境を提供するコマンドライン端末を起動します。ATDEで実行する各種コマンドはコマンドライン端末に入力し、実行します。コマンドライン端末にはいくつかの種類がありますが、ここではGNOMEデスクトップ環境に標準インストールされているGNOME端末を起動します。

GNOME端末を起動するには、図3.5「GNOME端末の起動」のようにデスクトップ左上のアプリケーションの「ユーティリティ」カテゴリから「端末」を選択してください。

images/common-images/open-gnome_terminal-on-atde/gnome_terminal_menu.png

図3.5 GNOME端末の起動


図3.6「GNOME端末のウィンドウ」のようにウィンドウが開きます。

images/common-images/open-gnome_terminal-on-atde/gnome_terminal_open.png

図3.6 GNOME端末のウィンドウ


3.3.3.9. シリアル通信ソフトウェア(minicom)の使用

シリアル通信ソフトウェア(minicom)のシリアル通信設定を、表3.4「シリアル通信設定」のように設定します。また、minicomを起動する端末の横幅を80文字以上にしてください。横幅が80文字より小さい場合、コマンド入力中に表示が乱れることがあります。

表3.4 シリアル通信設定

項目設定

転送レート

115,200bps

データ長

8bit

ストップビット

1bit

パリティ

なし

フロー制御

なし


  1. 図3.7「minicomの設定の起動」に示すコマンドを実行し、minicomの設定画面を起動してください。

    [ATDE ~]$ sudo LANG=C minicom --setup

    図3.7 minicomの設定の起動


  2. 図3.8「minicomの設定」が表示されますので、「Serial port setup」を選択してください。

                +-----[configuration]------+
                | Filenames and paths      |
                | File transfer protocols  |
                | Serial port setup        |
                | Modem and dialing        |
                | Screen and keyboard      |
                | Save setup as dfl        |
                | Save setup as..          |
                | Exit                     |
                | Exit from Minicom        |
                +--------------------------+

    図3.8 minicomの設定


  3. 図3.9「minicomのシリアルポートの設定」が表示されますので、Aキーを押してSerial Deviceを選択してください。

        +-----------------------------------------------------------------------+
        | A -    Serial Device      : /dev/ttyUSB0                              |
        | B - Lockfile Location     : /var/lock                                 |
        | C -   Callin Program      :                                           |
        | D -  Callout Program      :                                           |
        | E -    Bps/Par/Bits       : 115200 8N1                                |
        | F - Hardware Flow Control : No                                        |
        | G - Software Flow Control : No                                        |
        |                                                                       |
        |    Change which setting?                                              |
        +-----------------------------------------------------------------------+

    図3.9 minicomのシリアルポートの設定


  4. Serial Deviceに使用するシリアルポートを入力してEnterキーを押してください。

    [ティップ]USB to シリアル変換ケーブル使用時のデバイスファイル確認方法

    LinuxでUSB to シリアル変換ケーブルを接続した場合、コンソールに以下のようなログが表示されます。 ログが表示されなくても、dmesgコマンドを実行することで、ログを確認することができます。

    usb 2-1.2: new full-speed USB device number 5 using ehci-pci
    usb 2-1.2: New USB device found, idVendor=0403, idProduct=6001
    usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 2-1.2: Product: FT232R USB UART
    usb 2-1.2: Manufacturer: FTDI
    usb 2-1.2: SerialNumber: A702ZLZ7
    usbcore: registered new interface driver usbserial
    usbcore: registered new interface driver usbserial_generic
    usbserial: USB Serial support registered for generic
    usbcore: registered new interface driver ftdi_sio
    usbserial: USB Serial support registered for FTDI USB Serial Device
    ftdi_sio 2-1.2:1.0: FTDI USB Serial Device converter detected
    usb 2-1.2: Detected FT232RL
    usb 2-1.2: Number of endpoints 2
    usb 2-1.2: Endpoint 1 MaxPacketSize 64
    usb 2-1.2: Endpoint 2 MaxPacketSize 64
    usb 2-1.2: Setting MaxPacketSize 64
    usb 2-1.2: FTDI USB Serial Device converter now attached to ttyUSB0

    図3.10 例. USB to シリアル変換ケーブル接続時のログ


    上記のログからUSB to シリアル変換ケーブルがttyUSB0に割り当てられたことが分かります。

  5. Fキーを押してHardware Flow ControlをNoに設定してください。
  6. Gキーを押してSoftware Flow ControlをNoに設定してください。
  7. キーボードのEキーを押してください。 図3.11「minicomのシリアルポートのパラメータの設定」 が表示されます。

                          +---------[Comm Parameters]----------+
                          |                                    |
                          |     Current: 115200 8N1            |
                          | Speed            Parity      Data  |
                          | A: <next>        L: None     S: 5  |
                          | B: <prev>        M: Even     T: 6  |
                          | C:   9600        N: Odd      U: 7  |
                          | D:  38400        O: Mark     V: 8  |
                          | E: 115200        P: Space          |
                          |                                    |
                          | Stopbits                           |
                          | W: 1             Q: 8-N-1          |
                          | X: 2             R: 7-E-1          |
                          |                                    |
                          |                                    |
                          | Choice, or <Enter> to exit?        |
                          +------------------------------------+

    図3.11 minicomのシリアルポートのパラメータの設定


  8. 図3.11「minicomのシリアルポートのパラメータの設定」では、転送レート、データ長、ストップビット、パリティの設定を行います。
  9. 現在の設定値は「Current」に表示されています。 それぞれの値の内容は図3.12「minicomシリアルポートの設定値」を参照してください。

    minicomシリアルポートの設定値

    図3.12 minicomシリアルポートの設定値


  10. Eキーを押して、転送レートを115200に設定してください。
  11. Qキーを押して、データ長を8、パリティをNone、ストップビットを1に設定してください。
  12. Enterキーを2回押して、図3.8「minicomの設定」に戻ってください。
  13. 図3.8「minicomの設定」から、「Save setup as dfl」を選択し、設定を保存してください。
  14. 「Exit from Minicom」を選択し、minicomの設定を終了してください。

minicomを起動させるには、図3.13「minicom起動方法」のようにしてください。

[ATDE ~]$ sudo LANG=C minicom --wrap --device /dev/ttyUSB0

図3.13 minicom起動方法


[注記]

デバイスファイル名は、環境によって /dev/ttyS0/dev/ttyUSB1 など、本書の実行例とは異なる場合があります。

[ティップ]

minicomがオープンする /dev/ttyS0/dev/ttyUSB0 といったデバイスファイルは、 root または dialout グループに属しているユーザーしかアクセスできません。

ユーザーを dialout グループに入れることで、以降、sudoを使わずにminicomで /dev/ttyUSB0 をオープンすることができます。

[ATDE ~]$ sudo usermod -aG dialout atmark
[ATDE ~]$ LANG=C minicom --wrap --device /dev/ttyUSB0

minicomを終了させるには、まず Ctrl-a に続いて q キーを入力します。その後、以下のように表示されたら「Yes」にカーソルを合わせてEnterキーを入力するとminicomが終了します。

+-----------------------+
| Leave without reset? |
|     Yes       No     |
+-----------------------+

図3.14 minicom終了確認


[注記]

Ctrl-a に続いて z キーを入力すると、minicomのコマンドヘルプが表示されます。

3.3.4. Armadilloの起動

3.3.4.1. Armadilloと開発用PCを接続

Armadillo-610 開発セットと周辺装置の接続例を図3.15「Armadillo-610 開発セットの接続例」に示します。

images/a610dev-connection.svg

図3.15 Armadillo-610 開発セットの接続例


images/common-images/callouts/1.svg
Armadillo-610 開発セット
images/common-images/callouts/2.svg
ACアダプタ(12V/2A)
images/common-images/callouts/3.svg
作業用PC
images/common-images/callouts/4.svg
USBシリアル変換アダプタ
images/common-images/callouts/5.svg
USB2.0ケーブル(A-miniBタイプ)
images/common-images/callouts/6.svg
LAN HUB
images/common-images/callouts/7.svg
Ethernetケーブル
images/common-images/callouts/8.svg
USBメモリ
images/common-images/callouts/9.svg
microSDカード
images/common-images/callouts/10.svg
SDカード
images/common-images/callouts/11.svg
スピーカー
[警告]

ACアダプタから電源を供給する際、DCプラグをArmadillo-610 拡張ボードのDCジャックに接続してから、ACプラグをコンセントに接続してください。 突入電流により、故障する可能性があります。

[警告]

シリアルインターフェース(Armadillo-610 拡張ボード: CON3)にUSBシリアル変換アダプタを接続する際は、 ケーブルの根本を軽く握り、指先でコネクタを押すようにして挿入してください。 取り外しの際は、全ケーブルが均等に引きぬかれるようにケーブルをつかみ、引き抜いてください。 また、両コネクタを水平にして挿入・抜去してください。 30°以上傾けた状態での斜め挿入・抜去は、端子変形、ケース破損の原因となります。

images/usb-serial-insert-caution.svg

図3.16 USBシリアル変換アダプタの挿抜角度


[警告]

Armadillo-610 開発セットに同梱されているスピーカーを直接端子台に取り付ける場合、 8~9mmワイヤーストリッパー等で剥いてください。 剥かずに取り付けた場合、音がでない等のトラブルの原因となる可能性があります。

images/speaker-lead.svg

図3.17 スピーカーのリード線


[ティップ]

作業用PCがWindowsの場合、一部のBluetoothデバイスドライバがUSBコンソールインターフェースと 同じポート番号のCOMを重複して取得し、USBコンソールインターフェースが利用できないことがあります。

images/windows-comport-1.png

図3.18 COM7が競合している状態


この場合は、デバイスマネージャーからBluetoothのデバイスを選択して「ポートの設定→詳細設定」 からCOMの番号を変更するか、Bluetoothデバイスを無効にしてください。

images/windows-comport-2.png

図3.19 Bluetoothに割当のCOMを変更した状態


仮想マシンであるATDEにUSBコンソールインターフェースデバイスを接続する場合は、この影響はありません。

3.3.5. ジャンパピンの設定について

ジャンパの設定を変更することで、Armadillo-610の動作を変更することができます。

ジャンパの機能については「JP1(起動デバイス設定ジャンパ)」を参照してください。

ジャンパピンの位置は図3.20「JP1の位置」で確認してください。

images/a610-ext-board-jp.svg

図3.20 JP1の位置


各ジャンパは必要に応じて切り替えの指示があります。ここでは、JP1をオープンに設定しておきます。

[ティップ]ジャンパのオープン、ショートとは
images/common-images/jumper_open.svg
「オープン」とはジャンパピンにジャンパソケットを接続していない状態です。
images/common-images/jumper_short.svg
「ショート」とはジャンパピンにジャンパソケットを接続している状態です。

3.3.6. スライドスイッチの設定について

USBシリアル変換アダプタのスライドスイッチを操作することで、ブートローダーの起動モードを変更することができます。

images/common-images/usb-serial-slide-switch.svg

図3.21 スライドスイッチの設定


images/common-images/callouts/1.svg
ブートローダーは保守モードになります。保守モードでは、ブートローダーのコマンドプロンプトが起動します。
images/common-images/callouts/2.svg
ブートローダーはオートブートモードになります。オートブートモードでは、ブートローダーのコマンドプロンプトが表示されず、OSを自動起動します。
[注記]

USBシリアル変換アダプタが未接続の場合オートブートモードとなり、Linuxが起動します。

3.3.6.1. 起動

電源入力インターフェース (Armadillo-610 拡張ボード: CON12) に電源を接続すると Armadillo-610 が起動します。

[注記]

USB シリアル変換アダプタのスライドスイッチやユーザースイッチ(Armadillo-610 拡張ボード: SW1)によって起動モードが変わります。 詳しくは 「Armadilloと開発用PCを接続」「スライドスイッチの設定について」 を参照してください。

以下に起動ログの例を示します。

U-Boot 2020.04-at16 (Jun 28 2023 - 16:16:51 +0900)

CPU:   i.MX6ULL rev1.1 at 396 MHz
Model: Atmark Techno Armadillo-600 Series
DRAM:  512 MiB
setup_rtc_disarm_alarm: Can't find bus
WDT:   Started with servicing (10s timeout)
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    mxc_serial
Out:   mxc_serial
Err:   mxc_serial
switch to partitions #0, OK
mmc0(part 0) is current device
flash target is MMC:0
Net:
Warning: ethernet@2188000 using MAC address from ROM
eth0: ethernet@2188000
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0(part 0) is current device
6861600 bytes read in 157 ms (41.7 MiB/s)
Booting from mmc ...
36414 bytes read in 4 ms (8.7 MiB/s)
Loading fdt boot/armadillo-610.dtb
111 bytes read in 2 ms (53.7 KiB/s)
1013 bytes read in 2 ms (494.1 KiB/s)
Applying fdt overlay: armadillo-610-onboard-usdhc2.dtbo
5870 bytes read in 2 ms (2.8 MiB/s)
Applying fdt overlay: armadillo-610-extboard-eva.dtbo
4587 bytes read in 3 ms (1.5 MiB/s)
Applying fdt overlay: armadillo-640-lcd70ext-l00.dtbo
## Booting kernel from Legacy Image at 80800000 ...
   Image Name:   Linux-5.10.185-0-at
   Created:      2023-06-27   9:42:52 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    6861536 Bytes = 6.5 MiB
   Load Address: 82000000
   Entry Point:  82000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 83500000
   Booting using the fdt blob at 0x83500000
   Loading Kernel Image
   Loading Device Tree to 9ef1e000, end 9ef49fff ... OK

Starting kernel ...


   OpenRC 0.45.2 is starting up Linux 5.10.185-0-at (armv7l)

 * Mounting /proc ... [ ok ]
 * Mounting /run ... * /run/openrc: creating directory
 * /run/lock: creating directory
 * /run/lock: correcting owner
 * Caching service dependencies ... [ ok ]
 * Clock skew detected with `/etc/init.d/devfs'
 * Adjusting mtime of `/run/openrc/deptree' to Wed Jun 28 13:26:59 2023

 * WARNING: clock skew detected!
 * Remounting devtmpfs on /dev ... * Mounting /sys ... [ ok ]
 * Mounting security filesystem ... [ ok ]
 * Mounting config filesystem ... [ ok ]
 * Mounting /dev/mqueue ... [ ok ]
 * Mounting /dev/pts ... [ ok ]
 * Mounting /dev/shm ... [ ok ]
fsck_atlog               | * Checking at-log filesystem /dev/mmcblk0gp1 ... [ ok ]
udev                     | * Starting udev ... [ ok ]
fsck                     | * Checking local filesystems  ... [ ok ]
root                     | * Remounting filesystems ... [ ok ]
localmount               | * Mounting local filesystems ... [ ok ]
overlayfs                | * Preparing overlayfs over / ... [ ok ]
 * WARNING: clock skew detected!
hostname                 | * Setting hostname ... [ ok ]
sysctl                   | * Configuring kernel parameters ... [ ok ]
udev-trigger             | * Generating a rule to create a /dev/root symlink ... [ ok ]
udev-trigger             | * Populating /dev with existing devices through uevents ... [ ok ]
bootmisc                 | * Migrating /var/lock to /run/lock ... [ ok ]
bootmisc                 | * Creating user login records ... [ ok ]
bootmisc                 | * Wiping /var/tmp directory ... [ ok ]
syslog                   | * Starting busybox syslog ... [ ok ]
dbus                     | * /run/dbus: creating directory
dbus                     | * /run/dbus: correcting owner
micron-emmc-reten        | * Starting micron-emmc-reten
dbus                     | * Starting System Message Bus ... [ ok ]
micron-emmc-reten        |Device not supported.
klogd                    | * Starting busybox klogd ... [ ok ]
networkmanager           | * Starting networkmanager ... [ ok ]
dnsmasq                  | * /var/lib/misc/dnsmasq.leases: creating file
dnsmasq                  | * /var/lib/misc/dnsmasq.leases: correcting owner
dnsmasq                  | * Starting dnsmasq ... [ ok ]
 * WARNING: clock skew detected!
buttond                  | * Starting button watching daemon ... [ ok ]
reset_bootcount          | * Resetting bootcount in bootloader env ... [ ok ]
podman-atmark            | * Starting configured podman containers ... [ ok ]
zramswap                 | [ ok ]
zramswap                 | * Creating zram swap device ... [ ok ]
avahi-daemon             | * Starting avahi-daemon ... [ ok ]
Environment OK, copy 1
reset_bootcount          | [ ok ]
chronyd                  | * Starting chronyd ... [ ok ]
abos-web                 |-----
abos-web                 | * Starting abos-web ... [ ok ]
local                    | * Starting local ... [ ok ]

Welcome to Alpine Linux 3.17
Kernel 5.10.185-0-at on an armv7l (/dev/ttymxc0)

armadillo login:

3.3.6.2. ログイン

起動が完了するとログインプロンプトが表示されます。 初期状態では「root」ユーザーと、一般ユーザーである「atmark」ユーザーが存在しますが、「atmark」ユーザーは初期状態ではロックされていますので、「root」ユーザーでログインしてください。 「root」ユーザーは初回ログイン時にパスワードを入力せずに新しいパスワードを促されます。

「root」ユーザーでログインし、 passwd atmark コマンドで「atmark」ユーザーのパスワードを設定することで、「atmark」ユーザーのロックが解除されます。 設定するパスワードには大文字のアルファベット、小文字のアルファベット、0から9までの数字、その他(記号・句読点など)を含める事ができます。

  1. root でログイン

    初期パスワードを変更します。

    armadillo login: root
    You are required to change your password immediately (administrator enforced).
    New password: 1
    Retype new password: 2
    Welcome to Alpine!

    1

    新しいパスワードを入力します

    2

    新しいパスワードを再入力します

  2. atmark でログイン

    初期状態でロックされてますので、rootで一度パスワードを設定してからログインします。

    armadillo:~# passwd atmark 1
    New password:
    Retype new password:
    passwd: password updated successfully
    armadillo:~# persist_file /etc/shadow 2
    armadillo:~# exit
    
    Welcome to Alpine Linux 3.17
    Kernel 5.10.180-1-at on an armv7l (/dev/ttymxc0)
    
    armadillo login: atmark
    Password: 3
    Welcome to Alpine!

    1

    atmarkユーザーのパスワード変更コマンドです。

    2

    パスワードファイルを永続化します。

    3

    設定したパスワードでログインすることができます。

[警告]

Armadillo BaseOS ではルートファイルシステムに overlayfs を採用しており、そのままではシステムが OFF すると内容は消えてしまいます。そのため persist_file コマンドが用意されています。このコマンドを利用することでファイル単位で変更を反映することができます。パスワードを設定した後には以下のコマンドを実行してください。

[armadillo ~]# persist_file /etc/shadow

persist_file コマンドに関する詳細は「persist_file について」を参照してください。

3.3.6.3. 終了方法

eMMC や USB メモリ等に書き込みを行っている時に電源を切断すると、データが破損する可能性が有ります。 安全に終了させる場合は、次のように poweroff コマンドを実行し、「reboot: Power down」と表示されたのを確認してから電源を切断します。

armadillo:~# poweroff
 * WARNING: clock skew detected!
zramswap                 | * Deactivating zram swap device ... [ ok ]
local                    | * Stopping local ... [ ok ]
podman-atmark            | * Stopping all podman containers ... [ ok ]
avahi-daemon             | * Stopping avahi-daemon ... [ ok ]
chronyd                  | * Stopping chronyd ... [ ok ]
buttond                  | * Stopping button watching daemon ... [ ok ]
dnsmasq                  | * Stopping dnsmasq ... [ ok ]
abos-web                 | * Stopping abos-web ... [ ok ]
klogd                    | * Stopping busybox klogd ... [ ok ]
networkmanager           | * Stopping networkmanager ... [ ok ]
syslog                   | * Stopping busybox syslog ... [ ok ]
udev                     | * Stopping udev ... [ ok ]
dbus                     | * Stopping System Message Bus ... [ ok ]
nm-dispatcher: Caught signal 15, shutting down...
localmount               | * Unmounting loop devices
localmount               | * Unmounting filesystems
localmount               | *   Unmounting /var/at-log ... [ ok ]
localmount               | *   Unmounting /var/tmp ... [ ok ]
localmount               | *   Unmounting /var/app/volumes ... [ ok ]
localmount               | *   Unmounting /var/app/rollback/volumes ... [ ok ]
localmount               | *   Unmounting /var/lib/containers/storage_readonly ... [ ok ]
localmount               | *   Unmounting /var/log ... [ ok ]
localmount               | *   Unmounting /tmp ... [ ok ]
killprocs                | * Terminating remaining processes ... [ ok ]
killprocs                | * Killing remaining processes ... [ ok ]
mount-ro                 | * Remounting remaining filesystems read-only ... [ ok ]
mount-ro                 | *   Remounting / read only ... [ ok ]
indicator_signals        | * Signaling external devices we are shutting down ... [ ok ]
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
Requesting system poweroff
[   52.336202] imx2-wdt 20bc000.watchdog: Device shutdown: Expect reboot!
[   52.343210] reboot: Power down

Podman コンテナの保存先が tmpfs であり、eMMC への書き込みを行っていない場合は、poweroff コマンドを使用せずに電源を切断することが可能です。

Podman コンテナの保存先が eMMC の場合や、頻繁に rootfs 等の eMMC にあるボリュームを変更するような開発段階においては、poweroff コマンドを実行し、「reboot: Power down」と表示されたのを確認してから電源を切断してください。

[警告]

haltコマンドで終了させた場合、「reboot: System halted」と表示されてから約128秒後、Armadilloは自動的に再起動します。確実に終了させるためにもpoweroffコマンドを利用してください。

[ティップ]

poweroffの場合、Armadillo-610は、ONOFFピンをGNDとショートすることで電源をオフした場合と同じ状態になります。 そのため、RTC_BAT ピンからバックアップ電源が供給されている限り、5V 電源を切ったのち 5V 電源を再入力してもArmadillo-610が起動しません。 詳しくは「外部からの電源制御」を参照してください。

3.3.7. VSCodeのセットアップ

Armadillo-610 の開発には、 VSCode を使用します。 開発前に以下の手順を実施して、 ATDE に VSCode 及び、開発用エクステンションとクロスコンパイル用ライブラリをインストールしてください。

以下の手順は全てATDE上で実施します。

3.3.7.1. ソフトウェアのアップデート

ATDE のバージョン v20230123 以上には、 VSCode がインストール済みのため新規にインストールする必要はありませんが、 使用する前には最新版へのアップデートを行ってください。

[ATDE ~]$ sudo apt update
[ATDE ~]$ sudo apt upgrade

図3.22 ソフトウェアをアップデートする


VSCode を起動するには code コマンドを実行します。

[ATDE ~]$ code

図3.23 VSCode を起動する


[ティップ]

VSCode を起動すると、日本語化エクステンションのインストールを提案してくることがあります。 その時に表示されるダイアログに従ってインストールを行うと VSCode を日本語化できます。

3.3.7.2. VSCode に開発用エクステンションをインストールする

VSCode 上でアプリケーションを開発するためのエクステンションをインストールします。

エクステンションはマーケットプレイスからインストールすることができます。 VSCode を起動し、左サイドバーのエクステンションを選択して、検索フォームに「abos」と入力してください。

images/common-images/vscode_install_extension.png

図3.24 VSCode に開発用エクステンションをインストールする


表示された「Armadillo Base OS Development Environment」の 「Install」ボタンを押すとインストールは完了します。

3.3.8. VSCode を使用して Armadillo のセットアップを行う

ここでは VSCode を使用した Armadillo のセットアップ方法を紹介します。

3.3.8.1. initial_setup.swu の作成

initial_setup.swu はログインパスワードやユーザー固有の証明書などの 初期設定を Armadillo にインストールするためのファイルです。 initial_setup.swu でインストールされるユーザー固有の証明書がない場合、 ユーザーが開発したアプリケーションをインストール、またはアップデートすることができません。 このため、開発開始時に initial_setup.swu のインストールを行う必要があります。

VSCode の左ペインの [COMMON PROJECT COMMAND] から [Generate initial setup swu] を実行すると、 initial_setup.swu が作成されます。

images/common-images/armadillo_setup_vscode_initial_setup.png

図3.25 initial_setup.swu を作成する


初回実行時には各種設定の入力を求められます。 入力する設定の内容を 図3.26「initial_setup.swu 初回生成時の各種設定」 に示します。

Executing task: ./scripts/generate_initial_setup_swu.sh

mkdir: ディレクトリ '/home/atmark/mkswu' を作成しました
設定ファイルを更新しました:/home/atmark/mkswu/mkswu.conf
証明書のコモンネーム(一般名)を入力してください: [COMMON_NAME] 1
証明書の鍵のパスワードを入力ください(4-1024文字)2
証明書の鍵のパスワード(確認):
Generating an EC private key
writing new private key to '/home/atmark/mkswu/swupdate.key'
 -----
アップデートイメージを暗号化しますか? (N/y) 3
アットマークテクノが作成したイメージをインストール可能にしますか? (Y/n) 4
rootパスワード: 5
root ユーザのパスワード(確認):
atmarkユーザのパスワード(空の場合はアカウントをロックします): 6
atmark ユーザのパスワード(確認):
BaseOSイメージのarmadillo.atmark-techno.comサーバーからの自動アップデートを行いますか? (N/y) 7
abos-web のパスワードを設定してください。
パスワードを設定しない場合 abos-web は使用できなくなります。
abos-webユーザのパスワード(空の場合はアカウントをロックします): 8
abos-web ユーザのパスワード(確認):
/home/atmark/mkswu/initial_setup.swu を作成しました。

"/home/atmark/mkswu/initial_setup.swu" をそのまま使うことができますが、
モジュールを追加してイメージを再構築する場合は次のコマンドで作成してください:
  mkswu "/home/atmark/mkswu/initial_setup.desc" [他の.descファイル]

インストール後は、このディレクトリを削除しないように注意してください。
鍵を失うと新たなアップデートはデバイスの /etc/swupdate.pem
を修正しないとインストールできなくなります。
 *  Terminal will be reused by tasks, press any key to close it.

[ATDE ~]$ ls ~/mkswu
initial_setup.desc  initial_setup.swu  mkswu.conf
swupdate.aes-key    swupdate.key       swupdate.pem 9

図3.26 initial_setup.swu 初回生成時の各種設定


1

COMMON_NAME には証明鍵の「common name」として会社や製品が分かるような任意の名称を入力してください。

2

証明鍵を保護するパスフレーズを2回入力します。

3

swuイメージ自体を暗号化する場合に「y」を入力します。詳細は 「SWUpdate と暗号化について」 を参考にしてください。

4

アットマークテクノのアップデートをインストールしない場合は「n」を入力します。

5

rootのパスワードを2回入力します。

6

atmarkユーザーのパスワードを2回入力します。何も入力しない場合はユーザーをロックします。

7

自動アップデートを無効のままで進みます。ここで「y」を入れると、定期的に アットマークテクノのサーバーからアップデートの有無を確認し、自動的にインストールします。

8

abos-webを使用する場合はパスワードを設定してください。

9

作成したファイルを確認します。「swupdate.aes-key」は暗号化の場合にのみ作成されます。

ファイルは ~/mkswu/initial_setup.swu に保存されています。 この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に ~/mkswu ディレクトリ以下にある mkswu.conf と、鍵ファイルの swupdate.* をなくさないようにしてください。

3.3.9. ユーザー登録

アットマークテクノ製品をご利用のユーザーに対して、 購入者向けの限定公開データの提供や大切なお知らせをお届けするサービスなど、 ユーザー登録すると様々なサービスを受けることができます。 サービスを受けるためには、「アットマークテクノ Armadilloサイト」 にユーザー登録をする必要があります。

ユーザー登録すると次のようなサービスを受けることができます。

  • 製品仕様や部品などの変更通知の閲覧・配信
  • 購入者向けの限定公開データのダウンロード
  • 該当製品のバージョンアップに伴う優待販売のお知らせ配信
  • 該当製品に関する開発セミナーやイベント等のお知らせ配信

詳しくは、「アットマークテクノ Armadilloサイト」をご覧ください。

3.3.9.1. 購入製品登録

ユーザー登録完了後に、購入製品登録することで、「購入者向けの限定公開データ」をダウンロードすることができるようになります。

購入製品登録の詳しい手順は以下のURLをご参照ください。

3.4. ハードウェアの設計

Armadillo-610の機能拡張や信頼性向上のための設計情報について説明します。

3.4.1. 信頼性試験データについて

Armadillo-610の各種信頼性試験データを、「アットマークテクノ Armadilloサイト」から 「購入者向けの限定公開データ」としてダウンロード可能ですのでご確認ください。

3.4.2. 放射ノイズ

フレキシブルフラットケーブル(FFC)を使用して拡張を行った場合、 放射ノイズが問題になる場合があります。 特に、オーディオアンプのような電力が大きく変動するデバイスを FFCで接続する拡張ボードに搭載している場合、 FFCのGND線の接続のみでは強い放射ノイズが発生する可能性があります。 放射ノイズを減らすために、以下の対策が効果的です。

  • シールド付FFCを使用する

    • 長さが余る場合は、ケーブルを折りたたむ
    • シールドは拡張ボードのGNDに接続する
  • 固定穴をGNDと接続し、固定穴同士を太い導線や金属スペーサー等で接続する
  • 未使用の拡張ピンはLowレベル出力とする
  • 使用する拡張ピンはコンデンサ(1000pF程度)を介してGNDと接続する

3.4.3. ESD/雷サージ

Armadillo-610を組み込んだ機器のESD耐性を向上させるために、以下の対策が効果的です。

  • 金属筐体に組み込み、GND(固定穴等)を金属ねじ等で接続する
  • 金属筐体を接地する

また、Armadillo-610を組み込んだ機器に接続されたケーブルが屋外に露出するような設置環境では、 ケーブルに侵入した雷サージ等のストレスによりインターフェース回路が破壊される場合があります。 ストレスへの耐性を向上させるには、以下の対策が効果的です。

  • 通信対向機とのGND接続を強化する
  • シールド付きのケーブルを使用する

3.4.4. 放熱

Armadillo Base OS には標準で、 CPU や SoC の温度をプロファイリングするソフトウェアが搭載されているので、温度設計にお役立てください。 詳細は「動作中の Armadillo の温度を測定する」を参照してください。

3.4.5. 拡張ボードの設計

Armadillo-610は拡張インターフェース(Armadillo-610: CON2)から拡張します。 電源、リセット、複数の機能をもったi.MX6ULLの信号線等、 Armadillo-610を拡張するために必要な信号線はすべて、 CON2の100ピンコネクタに接続されています。

images/a610-ext-con2.svg

図3.27 Afmadillo-610のCON2


Armadillo-610では、表2.3「仕様」の拡張インターフェースの欄にあるとおりの機能が拡張できます。ただし、ここに記載の拡張数は、優先的に機能を割り当てた場合の最大数ですので、必要な機能がすべて実現できるかは、『Armadillo-610 マルチプレクス表』で検討する必要があります。

マルチプレクス表では、CON2の各ピンに割り当て可能な機能の他に、リセット後の信号状態、プルアップ/ダウン抵抗の有無等の情報を確認することができます。

images/a610-multi-ex.svg

図3.28 Afmadillo-610のマルチプレクス表


本書には各機能の概要しか記載していませんので、詳細な仕様が必要な場合は、NXP Semiconductorsのホームページからダウンロード可能な、『i.MX 6ULL Applications Processor Reference Manual』、『i.MX 6ULL Applications Processors for Industrial Products』をご確認ください。Armadillo-610固有の情報を除いて、回路設計に必要な情報はこれらのマニュアルに、すべて記載されています。 検索しやすいように、マルチプレクス表や「CON2(拡張インターフェース)の概要」にi.MX6ULLのピン名やコントローラー名を記載しておりますので、是非ご活用ください。

Armadillo-610の拡張ボードを設計開発するためのリファレンス回路を公開しています。 Armadillo-610 リファレンス回路では、以下の機能の拡張方法を確認することができます。 また、一部の回路の動作はArmadillo-610 拡張ボードで確認することができます。

  • 電源
  • 起動デバイス設定
  • LAN(Ethernet)、無線LAN
  • USB HUB、USB Host、USB OTG
  • SD
  • LCD [6]
  • RS485、UART(デバッグ用)
  • MQS、SAI [6]
  • 絶縁デジタル入出力
  • リアルタイムクロック
  • スイッチ、LED
  • A/D、I2C
[ティップ]

Armadillo-610 リファレンス回路図、部品表[7]「アットマークテクノ Armadilloサイト」からダウンロードしてください。

[警告]

Armadillo-610 リファレンス回路図、部品表に記載している部品につきまして、 既に販売終了していたり、終息部品になっている場合があります。 部品採用を決定する前に、部品の現在のステートについて、十分にご確認ください。

3.4.5.1. 電源

Armadillo-610の電源電圧は3.6~4.5Vです。 拡張ボード側にUSB Hostを搭載するのであれば、USBデバイスに供給するための5Vが必要となりますので、 拡張ボード側の主電源を5VにしてUSBへの供給電源とし、 5Vを3.6~4.5Vの電圧に降圧して、Armadillo-610に供給するのがおすすめです。

Armadillo-610 リファレンス回路で、5Vを3.7Vに降圧して Armadillo-610に供給する回路を確認することができます。 抵抗値で出力電圧を変更できるタイプのDC/DCコンバータを採用しておりますので、別の電圧値が必要な場合は、抵抗値を変更することで対応可能です。

電源は拡張インターフェース(Armadillo-610: CON2)のVINピンから供給します。CON2に搭載している100ピンのコネクタは、1ピンあたり流せる電流値が最大0.3Aです。 VINピンは全部で4本ありますので、CON2から供給できる電流値は最大1.2Aとなります。

CON2から、5V電源(+5V_IO)、3.3V電源(+3.3V_IO)が拡張ボード用に出力されています。+5V_IOは最大600mA、+3.3V_IOは最大500mAまで供給可能ですが、 Armadillo-610への最大供給電流が1.2Aであるため、必ずしも最大まで出力することはできません。 各最大電流値を超えないように外部機器の接続、供給電源の設計を行ってください。

全体の消費電力が少ないのであれば、Armadillo-610へは3.6~4.5V電源を直接供給し、5V電源、3.3V電源をArmadillo-610からの出力で賄うという構成も可能です。

Armadillo-610の電源投入時、+5V_IOはArmadillo-610の電源(VIN)とほぼ同時に立ち上がり、 一定時間VINと同電位を維持した後、ソフトウェアから有効にされたタイミングで5Vまで立ち上がります。 +5V_IOは、VINを昇圧して5V電源を生成しているため、+5V_IOからの出力電圧をVIN以下にすることはできません。 +5V_IOの出力無効時はVINと同電位の電圧が出力され、+5V_IOの出力有効時は+5Vが出力されます。 +5V_IOの出力を0Vにしたい場合は、電源制御のためのパワースイッチの搭載をおすすめします。

「電気的仕様」でArmadillo-610の電気的仕様について説明しておりますので、詳細についてはこちらでご確認ください。

images/block-power-ex.svg

図3.29 電源回路例


3.4.5.2. 起動デバイスの設定

Armadillo-610は下記2つのデバイスから起動が可能です。

  • オンボードeMMC
  • microSDカード(Armadillo-610: CON1)

どちらのデバイスから起動するかは、eFUSEもしくは拡張インターフェース(Armadillo-610: CON2)のBJP1ピンで設定します。eFUSEで設定する方法については、「eFuse を変更する」をご確認ください。 BJP1ピンの状態は、Armadillo-610の電源(VIN)投入時に読み出され、起動デバイスが選択されます。

表3.5 BJP1の状態と起動デバイス

BJP1 起動デバイス

Low

eMMC

High

microSDカード


BJP1ピンはArmadillo-610上で47kΩでプルダウンされているため、 eMMCから起動したい場合はBJP1ピンをオープン、microSDカードから起動したい場合は、 BJP1ピンを+3.3V_IOにプルアップ(抵抗値は1kΩ程度)してください。

images/sch-jp.svg

図3.30 起動設定ジャンパー例


[注記]

起動デバイスをmicroSDカードに設定した場合でも、 microSDスロットにmicroSDカードが挿さっていなかった場合は、 eMMCから起動します。 [8]

[注記]

出荷時、i.MX6ULLの起動デバイスに関するeFUSEは未設定です。

[注記]

eFUSEを設定した場合、BJP1の設定は無視されます。

[警告]

eFUSEは一度書き込むと元に戻すことができません。 eFUSEの設定によってはArmadillo-610が正常に動作しなくなる可能性がありますので、 書き込みを行う際には細心の注意を払うようお願いいたします。 eFUSEの設定によって異常が起こった場合は、保証対象外となります。

3.4.5.3. LAN(Ethernet)

LANを拡張する場合は、拡張ボード側にトランスとLANコネクタ、LEDを搭載してください。 拡張インターフェース(Armadillo-610: CON2)にはEthernet PHYの送受信の信号線およびLANのスピードLED、 アクティビティLED用の信号線が接続されています。

回路の詳細はArmadillo-610 リファレンス回路で確認することが可能です。 また、Armadillo-610 拡張ボードで動作確認することも可能です。

images/block-lan.svg

図3.31 LAN(Ethernet)接続例


3.4.5.4. 無線LAN/BT

無線LAN/BTを拡張する場合、動作確認済みデバイスである、Laird Connectivity製のSterling LWB5+がおすすめです。 Sterling LWB5+の無線LAN回路はUSBもしくはSDIO、BT回路はUSBもしくはUARTで接続することができます。

無線LAN、BT共にUSB接続した場合の回路の詳細をリファレンス回路で確認することが可能です。 また、姉妹製品であるArmadillo-640とArmadillo-600シリーズWLANオプションモジュールで 無線LAN/BTの動作を確認することも可能です。

images/block-wlanbt.svg

図3.32 WLAN/BT接続例


3.4.5.5. USB

USBは2ポート拡張可能で、Hostは最大2ポート、OTGは最大1ポート拡張することが可能です。

USB Hostを拡張する場合は、USBデバイスへ供給する電源制御のためのパワースイッチを搭載してください。 パワースイッチのイネーブルピン制御のためのGPIOは電源投入時、プルアップされていないものを選定してください。

USB_OTGx_VBUSピンを使用しないデバイスを搭載する場合でも、 デバイス検出のためにUSB_OTGx_VBUSピンへ電圧を印加する必要があります。

USB_OTGx_VBUSピンへの電源がON/OFF制御される場合、 USB_OTGx_VBUSピンへの電圧印加はダイオード経由にする必要があります。

[警告]

USB_OTGx_VBUSピンへは最低4.4Vの電圧を印加する必要がありますので、ダイオードのVf電圧にご注意ください。 電圧が低すぎる場合、USBメモリの挿抜を検出できない等の不具合が発生します。

USBポートが3ポート以上必要な場合は、USBハブを接続してください。

Armadillo-610 リファレンス回路では、USBハブ、Host、OTGの回路を確認することが可能です。 リファレンス回路で採用しているUSBハブは3ポート品ですが、ピンコンパチで4ポート品もラインアップされています。

images/block-usb.svg

図3.33 USB Host接続例


3.4.5.6. シリアル(UART)

Armadillo-610のシリアル(UART)の信号レベルは+3.3V_IOですので、 必要なインターフェースの規格に合わせて、レベル変換IC等を拡張ボード側に搭載してください。

images/block-uart.svg

図3.34 シリアル(UART)接続例


[警告]

i.MX6ULLのCTS、RTS信号は一般的なUARTの信号と名前が逆になっています。 誤接続にご注意ください。

[ティップ]

デバッグやメンテナンス用途であれば、拡張ボード上にレベル変換ICを搭載せずに、 外付けのレベル変換アダプタを使用するのもおすすめです。 レベル変換アダプタは、弊社からもオプション品として購入することが可能です。

3.4.5.7. SD

SDホストコントローラ(uSDHC2)を使用できる信号線がSDインターフェース(Armadillo-610: CON1)と 拡張インターフェース(Armadillo-610: CON2)に接続されており、 SDホストコントローラはどちらか一方でしか使用することができません。

SDスロットを基板端に配置したい場合やSDIO接続のデバイスを拡張したい場合などにご使用ください。

SDスロットを拡張する場合、SDカード検出、ライトプロテクト検出は GPIOで行うことが可能ですので、専用ピンを割り当てる必要はありません。

BJP1ピンをHighレベルにしてArmadillo-610の電源(VIN)を投入した場合、 SDインターフェース(Armadillo-610: CON1)に接続されたmicroSDカードがブートデバイスに設定されます。 電源投入時、SDホストコントローラ(uSDHC2)はSDインターフェース(Armadillo-610: CON1)に接続されており、 microSDカードに書き込まれたイメージファイルから起動します。 起動後、マルチプレクスの設定により、SDホストコントローラ(uSDHC2)の接続先が変更になるため、拡張インターフェース(Armadillo-610: CON2)側のデバイスがブートデバイスになることはできません。

images/block-sd.svg

図3.35 SD接続例


SD2_DATA3として使用可能なGPIO3_IO28ピンはブートモード設定ピンを兼用しています。 Armadillo-610の電源(VIN)投入時からU-Bootが動作するまでは、Lowレベルを保持する必要があり、47kΩのプルダウン抵抗が接続されています。 ただし、SDカード等が正常動作するには、SD2_DATA3にプルアップ抵抗が必要となるため、 Armadillo-610の電源(VIN)投入時は立ち上がらない電源でプルアップ(抵抗値は15kΩ程度)し、 起動後にプルアップ抵抗の接続された電源を立ち上げる等の対処が必要となります。

SDスロットを拡張する回路の詳細は、Armadillo-610 リファレンス回路で確認することが可能です。

3.4.5.8. スイッチ、LED、リレー

スイッチやLED、リレーを拡張する場合は、GPIOを割り当てます。 GPIOに割り当て可能なピンは多数ありますので、 プルアップ/プルダウン抵抗の有無と電圧レベルを確認して、使用するピンを決定してください。

拡張インターフェース(Armadillo-610: CON2)には、i.MX6ULLの信号線が直接接続されています。 スイッチは人の手で操作するインターフェースですので、 静電気等による内部回路の故障を防ぐため、電流制限抵抗を接続することをおすすめします。

LED、リレーはGPIOピンで直接駆動せずにトランジスタ等を経由して駆動してください。

images/sch-gpio.svg

図3.36 スイッチ、LED、リレー接続例


3.4.5.9. リアルタイムクロック

i.MX6ULL内蔵のリアルタイムクロックのバックアップ用のピン(RTC_BAT)が 拡張インターフェース(Armadillo-610: CON2)に接続されていますので、 Armadillo-610の電源(VIN)を切断しても時刻データを保持したい場合にバッテリー等を接続してください。

i.MX6ULL内蔵のリアルタイムクロックは、一般的なリアルタイムクロックICよりも 消費電力が高いため、外付けバッテリーの消耗が速くなります。

バッテリーの消耗が製品の運用に支障をきたす場合は、 消費電力が少ないリアルタイムクロックを拡張ボード側に搭載してください。

3.4.5.10. LCD

デジタルRGB入力を持つ液晶パネルモジュールなどを接続することができます。 Armadillo-610 リファレンス回路では、以下のタッチパネルLCDを接続するための回路を確認することが可能です。

  • LCDオプションセット(7インチタッチパネルWVGA液晶)(型番: OP-LCD70EXT-00)
  • Armadillo-400シリーズLCDオプションセット(4.3インチタッチパネルWQVGA液晶)(型番: OP-A400-LCD43EXT-L01)

オプションセットの詳細につきましては「LCDオプションセット(7インチタッチパネルWVGA液晶)」「Armadillo-400シリーズLCDオプションセット」をご確認ください。

3.4.5.11. オーディオ

I2Sで最大2ポート、MQSで最大1ポート、S/PDIFで最大1ポートオーディオを拡張することが可能です。 MQSは拡張ボード側にオーディオアンプを搭載するだけで良いので、高品質な音が必要でない場合にはおすすめです。 SAI、S/PDIFを使用する場合は、オーディオコーデックとオーディオアンプ等を拡張ボード側に搭載してください。

MQSの回路はArmadillo-610 リファレンス回路図、I2Sの回路はArmadillo-400シリーズ LCDオプションセットのLCD拡張ボード回路図で確認することが可能です。

images/block-mqs.svg

図3.37 MQS接続例


3.4.5.12. リセットスイッチ

拡張インターフェース(Armadillo-610: CON2)のEXT_RESET_Bピン、PWRONピンによりリセットスイッチを拡張することが可能です。 押していない時はオープン、押した時はGNDとショートするスイッチを接続してください。

スイッチは人の手で操作するインターフェースですので、 静電気等による内部回路の故障を防ぐため、電流制限抵抗を接続することをおすすめします。

EXT_RESET_Bピンではシステムリセット、PWRONピンではパワーマネジメントICからの電源の供給/切断の制御が可能です。 それぞれの機能の詳細については、「リセット回路の構成」「外部からの電源制御」をご確認ください。

images/sch-pwron.svg

図3.38 PWRON回路例


3.4.5.13. ONOFFスイッチ

拡張インターフェース(Armadillo-610: CON2)のONOFFピンにより、長押しで電源の制御を行うスイッチを拡張することが可能です。 押していない時はオープン、押した時はGNDとショートするスイッチを接続してください。

スイッチは人の手で操作するインターフェースですので、 静電気等による内部回路の故障を防ぐため、電流制限抵抗を接続することをおすすめします。

ONOFFピンの機能の詳細については「外部からの電源制御」をご確認ください。

images/sch-onoff.svg

図3.39 ONOFF回路例


3.4.5.14. 基板形状

Armadillo-610の拡張ボードを設計する際の、推奨レイアウトは図3.40「拡張ボード推奨レイアウト」のとおりです。

Armadillo-610との接続コネクタは、HIROSE ELECTRIC製のDF40HC(3.0)-100DS-0.4V(51)を搭載してください。 嵌合高さは3mmとなりますので、Armadillo-610の下に部品を配置する場合、部品高さにご注意ください。

固定穴径とパッド寸法はマックエイト製のスルーホールタップ(TH-1.6-3.0-M3)を 実装する場合の推奨となります。 別の方法で固定する場合は適宜寸法を変更してください。

images/ext-recomanded-layout.svg

図3.40 拡張ボード推奨レイアウト


images/common-images/callouts/1.svg
DF40HC(3.0)-100DS-0.4V(51)/HIROSE ELECTRIC
images/common-images/callouts/2.svg
Armadillo-610側の最大部品高さ: 2mm

Armadillo-610の固定穴はGNDに接続されています。 GND強化のため、拡張ボード側の固定穴もGNDに接続し、金属製のスペーサーとねじで固定してください。 スペーサーの長さはコネクタの嵌合高さと同じ3mmとしてください。

Armadillo-610の固定例は図3.41「Armadillo-610の固定例」のとおりです。

images/a610-assembly.svg

図3.41 Armadillo-610の固定例


images/common-images/callouts/1.svg
なべ小ねじ(M3、L=5mm)
images/common-images/callouts/2.svg
スルーホールタップ(TH-1.6-3.0-M3/Mac-Eight)
[ティップ]

Armadillo-610の固定穴は4箇所ありますが、 コネクタから離れた位置の2箇所のみ、スペーサーとねじで固定して各種試験を行い、 動作に異常がないことを確認しております。 試験の詳細につきましては、「アットマークテクノ Armadilloサイト」の 「Armadillo-610 信頼性試験報告書」にてご確認ください。

3.4.5.15. CON2(拡張インターフェース)の概要

CON2はArmadillo-610拡張用のインターフェースです。 電源、リセット、複数の機能(マルチプレクス)をもったi.MX6ULLの信号線、USB、Ethernet PHYの信号線等、Armadillo-610を拡張するために必要な信号線がすべて接続されています。

Armadillo-610の電源はVINピンから供給します。

RTC_BATピンは、i.MX6ULLの低消費電力ドメインにあるSRTC(Secure Real Time Clock)の外部バックアップインターフェースで、 長時間電源が切断されてもi.MX6ULLの一部データ(時刻データ等)を保持させたい場合にご使用ください。

[警告]

プルアップ/ダウン抵抗が接続されている拡張入出力ピンは、i.MX6ULLの内蔵ROMによるブートモード設定ピンを兼用しており、 ブートモード設定のため、プルアップ/ダウン抵抗で電源投入時にHigh/Lowレベルの状態を保持しています。 意図しない動作を引き起こす原因となるため、電源投入時からU-Bootが動作するまでは、 各々のピンをHigh/Lowレベルに保持した状態でご使用ください。

表3.6 CON2 信号配列

ピン番号 ピン名 I/O 説明

1

USB_OTG1_DP

In/Out

USB_OTG1のプラス側信号、i.MX6ULLのUSB_OTG1_DPピンに接続

2

USB_OTG1_DN

In/Out

USB_OTG1のマイナス側信号、i.MX6ULLのUSB_OTG1_DNピンに接続

3

GND

Power

電源(GND)

4

USB_OTG2_DN

In/Out

USB_OTG2のマイナス側信号、i.MX6ULLのUSB_OTG2_DNピンに接続

5

USB_OTG2_DP

In/Out

USB_OTG2のプラス側信号、i.MX6ULLのUSB_OTG2_DPピンに接続

6

GND

Power

電源(GND)

7

USB_OTG1_VBUS

Power

電源(USB_OTG1_VBUS)、i.MX6ULLのUSB_OTG1_VBUSピンに接続、1uFのバイパスコンデンサが接続されています。

8

USB_OTG2_VBUS

Power

電源(USB_OTG2_VBUS)、i.MX6ULLのUSB_OTG2_VBUSピンに接続、1uFのバイパスコンデンサが接続されています。

9

SPEEDLED

Out

LANスピードLED用信号、Ethernet PHYのLED2ピンに接続

10

LINK_ACTLED

Out

LANリンクアクティビティLED用信号、Ethernet PHYのLED1ピンに接続

11

GPIO1_IO19

In/Out

拡張入出力、i.MX6ULLのUART1_RTS_Bピンに接続、基板上で10kΩプルダウンされています。

12

GPIO4_IO17

In/Out

拡張入出力、i.MX6ULLのCSI_MCLKピンに接続

13

GPIO5_IO00

In/Out

拡張入出力、i.MX6ULLのSNVS_TAMPER0ピンに接続、オープンドレインでの使用推奨 [a]

14

GPIO1_IO04

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO04ピンに接続

15

GPIO1_IO03

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO03ピンに接続

16

GPIO1_IO02

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO02ピンに接続

17

GPIO1_IO01

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO01ピンに接続

18

LCD_DATA00

In/Out

拡張入出力、i.MX6ULLのLCD_DATA00ピンに接続、基板上で10kΩプルダウンされています。

19

LCD_DATA01

In/Out

拡張入出力、i.MX6ULLのLCD_DATA01ピンに接続、基板上で10kΩプルアップ(+3.3V_IO)されています。

20

LCD_DATA02

In/Out

拡張入出力、i.MX6ULLのLCD_DATA02ピンに接続、基板上で10kΩプルダウンされています。

21

LCD_DATA03

In/Out

拡張入出力、i.MX6ULLのLCD_DATA03ピンに接続、基板上で10kΩプルダウンされています。

22

LCD_DATA04

In/Out

拡張入出力、i.MX6ULLのLCD_DATA04ピンに接続、基板上で10kΩプルダウンされています。

23

LCD_DATA05

In/Out

拡張入出力、i.MX6ULLのLCD_DATA05ピンに接続、BJP1がLowレベル時10kΩプルアップ(+3.3V_IO)、Highレベル時10kΩプルダウンされます。

24

LCD_DATA06

In/Out

拡張入出力、i.MX6ULLのLCD_DATA06ピンに接続、基板上で10kΩプルアップ(+3.3V_IO)されています。

25

LCD_DATA07

In/Out

拡張入出力、i.MX6ULLのLCD_DATA07ピンに接続、基板上で10kΩプルダウンされています。

26

LCD_DATA08

In/Out

拡張入出力、i.MX6ULLのLCD_DATA08ピンに接続、基板上で10kΩプルダウンされています。

27

LCD_DATA09

In/Out

拡張入出力、i.MX6ULLのLCD_DATA09ピンに接続、基板上で10kΩプルダウンされています。

28

LCD_DATA10

In/Out

拡張入出力、i.MX6ULLのLCD_DATA10ピンに接続、基板上で10kΩプルダウンされています。

29

LCD_DATA11

In/Out

拡張入出力、i.MX6ULLのLCD_DATA11ピンに接続、BJP1がLowレベル時10kΩプルダウン、Highレベル時10kΩプルアップ(+3.3V_IO)されます。

30

LCD_DATA12

In/Out

拡張入出力、i.MX6ULLのLCD_DATA12ピンに接続、基板上で10kΩプルダウンされています。

31

LCD_DATA13

In/Out

拡張入出力、i.MX6ULLのLCD_DATA13ピンに接続、基板上で10kΩプルダウンされています。

32

LCD_DATA14

In/Out

拡張入出力、i.MX6ULLのLCD_DATA14ピンに接続、基板上で10kΩプルダウンされています。

33

LCD_DATA15

In/Out

拡張入出力、i.MX6ULLのLCD_DATA15ピンに接続、基板上で10kΩプルダウンされています。

34

LCD_DATA16

In/Out

拡張入出力、i.MX6ULLのLCD_DATA16ピンに接続、基板上で10kΩプルダウンされています。

35

LCD_DATA17

In/Out

拡張入出力、i.MX6ULLのLCD_DATA17ピンに接続、基板上で10kΩプルダウンされています。

36

GND

Power

電源(GND)

37

LCD_CLK

In/Out

拡張入出力、i.MX6ULLのLCD_CLKピンに接続

38

LCD_HSYNC

In/Out

拡張入出力、i.MX6ULLのLCD_HSYNCピンに接続

39

LCD_VSYNC

In/Out

拡張入出力、i.MX6ULLのLCD_VSYNCピンに接続

40

LCD_ENABLE

In/Out

拡張入出力、i.MX6ULLのLCD_ENABLEピンに接続

41

PWM5_OUT

In/Out

拡張入出力、i.MX6ULLのNAND_DQSピンに接続

42

BJP1

In

起動デバイス設定用信号、ロジックICを経由してi.MX6ULLのLCD_DATA05ピン、LCD_DATA11ピンに接続、基板上で47kΩプルダウンされています。

(Low: LCD_DATA05ピンは10kΩプルアップ(+3.3V_IO)、LCD_DATA11ピンは10kΩプルダウンされます。High: LCD_DATA05ピンは10kΩプルダウン、LCD_DATA11ピンは10kΩプルアップ(+3.3V_IO)されます。)

43

JTAG_MOD

In

SJCモード設定ピン、i.MX6ULLのJTAG_MODピンに接続、基板上で11kΩプルダウンされています。 [b]

44

EXT_RESET_B

In

システムリセット、i.MX6ULLのPOR_Bピンに接続、オープンドレイン入力

45

+3.3V_IO

Power

電源(+3.3V_IO)

46

+3.3V_IO

Power

電源(+3.3V_IO)

47

VIN

Power

電源(VIN)

48

VIN

Power

電源(VIN)

49

VIN

Power

電源(VIN)

50

VIN

Power

電源(VIN)

51

GND

Power

電源(GND)

52

GND

Power

電源(GND)

53

+5V_IO

Power

電源(+5V_IO)

54

+5V_IO

Power

電源(+5V_IO)

55

GPIO4_IO19

In/Out

拡張入出力、i.MX6ULLのCSI_VSYNCピンに接続

56

GPIO4_IO20

In/Out

拡張入出力、i.MX6ULLのCSI_HSYNCピンに接続

57

GPIO4_IO25

In/Out

拡張入出力、i.MX6ULLのCSI_DATA04ピンに接続

58

GPIO4_IO26

In/Out

拡張入出力、i.MX6ULLのCSI_DATA05ピンに接続

59

GPIO4_IO27

In/Out

拡張入出力、i.MX6ULLのCSI_DATA06ピンに接続

60

GPIO4_IO28

In/Out

拡張入出力、i.MX6ULLのCSI_DATA07ピンに接続

61

GPIO4_IO23

In/Out

拡張入出力、i.MX6ULLのCSI_DATA02ピンに接続

62

GPIO4_IO22

In/Out

拡張入出力、i.MX6ULLのCSI_DATA01ピンに接続

63

GPIO4_IO24

In/Out

拡張入出力、i.MX6ULLのCSI_DATA03ピンに接続

64

GPIO4_IO21

In/Out

拡張入出力、i.MX6ULLのCSI_DATA00ピンに接続

65

GPIO4_IO18

In/Out

拡張入出力、i.MX6ULLのCSI_PIXCLKピンに接続

66

GPIO4_IO09

In/Out

拡張入出力、i.MX6ULLのNAND_DATA07ピンに接続

67

GPIO4_IO08

In/Out

拡張入出力、i.MX6ULLのNAND_DATA06ピンに接続

68

GPIO4_IO07

In/Out

拡張入出力、i.MX6ULLのNAND_DATA05ピンに接続

69

GPIO4_IO06

In/Out

拡張入出力、i.MX6ULLのNAND_DATA04ピンに接続

70

GPIO3_IO28

In/Out

拡張入出力、i.MX6ULLのLCD_DATA23ピンに接続、基板上で47kΩプルダウンされています。

71

GPIO3_IO27

In/Out

拡張入出力、i.MX6ULLのLCD_DATA22ピンに接続

72

GPIO3_IO26

In/Out

拡張入出力、i.MX6ULLのLCD_DATA21ピンに接続

73

GPIO3_IO25

In/Out

拡張入出力、i.MX6ULLのLCD_DATA20ピンに接続

74

GPIO3_IO24

In/Out

拡張入出力、i.MX6ULLのLCD_DATA19ピンに接続

75

GND

Power

電源(GND)

76

GPIO3_IO23

In/Out

拡張入出力、i.MX6ULLのLCD_DATA18ピンに接続

77

PWRON

In

パワーマネジメントICのPWRON信号、オープンドレイン入力、パワーマネジメントICのPWRONピンとi.MX6ULLのPMIC_ON_REQピンに接続、i.MX6ULL内部で100kΩプルアップ(VDD_SNVS_IN)されています。

78

ONOFF

In

i.MX6ULLのON/OFF信号、オープンドレイン入力、i.MX6ULLのONOFFピンに接続、i.MX6ULL内部で100kΩプルアップ(VDD_SNVS_IN)されています。

79

RTC_BAT

Power

電源(RTC_BAT)、パワーマネジメントICのLICELLピンに接続

80

GPIO1_IO08

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO08ピンに接続

81

GPIO1_IO05

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO05ピンに接続

82

GPIO1_IO30

In/Out

拡張入出力、i.MX6ULLのUART5_TX_DATAピンに接続

83

GPIO1_IO16

In/Out

拡張入出力、i.MX6ULLのUART1_TX_DATAピンに接続

84

GPIO1_IO31

In/Out

拡張入出力、i.MX6ULLのUART5_RX_DATAピンに接続

85

GPIO1_IO17

In/Out

拡張入出力、i.MX6ULLのUART1_RX_DATAピンに接続

86

GPIO1_IO23

In/Out

拡張入出力、i.MX6ULLのUART2_RTS_Bピンに接続

87

GPIO1_IO22

In/Out

拡張入出力、i.MX6ULLのUART2_CTS_Bピンに接続

88

GPIO1_IO21

In/Out

拡張入出力、i.MX6ULLのUART2_RX_DATAピンに接続

89

GPIO1_IO20

In/Out

拡張入出力、i.MX6ULLのUART2_TX_DATAピンに接続

90

GPIO1_IO00

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO00ピンに接続

91

GPIO1_IO26

In/Out

拡張入出力、i.MX6ULLのUART3_CTS_Bピンに接続

92

GPIO1_IO27

In/Out

拡張入出力、i.MX6ULLのUART3_RTS_Bピンに接続

93

GPIO1_IO25

In/Out

拡張入出力、i.MX6ULLのUART3_RX_DATAピンに接続

94

GPIO1_IO24

In/Out

拡張入出力、i.MX6ULLのUART3_TX_DATAピンに接続

95

GND

Power

電源(GND)

96

Ethrer_RXN

In/Out

Ethernet 送信/受信データ(+) CH1、Ethernet PHY(LAN8720AI)のRXNピンに接続

97

Ethrer_RXP

In/Out

Ethernet 送信/受信データ(-) CH1、Ethernet PHY(LAN8720AI)のRXPピンに接続

98

GND

Power

電源(GND)

99

Ethrer_TXN

In/Out

Ethernet 送信/受信データ(-) CH2、Ethernet PHY(LAN8720AI)のTXNピンに接続

100

Ethrer_TXP

In/Out

Ethernet 送信/受信データ(+) CH2、Ethernet PHY(LAN8720AI)のTXPピンに接続

[a] GPIO5_IO00のみVDD_SNVS_IN系の拡張入出力ピンとなります。電圧レベルにご注意ください。

[b] Armadillo-610拡張ボードではGPIOで使用していますが、JTAGモード設定ピンですので、GPIOでの使用は推奨しません。動作を理解した上でご使用ください。


以降では、CON2から拡張可能な機能の概要について説明します。

[ティップ]

拡張入出力となっている信号線のほとんどが、複数の機能をもっています。 拡張できる機能の詳細につきましては、 「Armadillo-610 マルチプレクス表」をご参照ください。

[警告]

複数箇所に割り当て可能な信号(USDHC2、UART1、ESPI1、I2C2等)がありますが、 同じ信号は複数ピンで同時利用できません。

3.4.5.16. LAN(Ethernet)

LANを1ポート拡張することが可能です。

信号線はEthernet PHY(LAN8720AI-CP/Microchip Technology)を経由して i.MX6ULLのEthernetコントローラ(ENET1)に接続されています。

  • 通信速度: 10BASE-T/100BASE-TX(AUTO-MDIX対応)

3.4.5.17. USB

USBを2ポート拡張可能で、Hostは最大2ポート、OTGは最大1ポート拡張することが可能です。 信号線はi.MX6ULLのUSBコントローラ(USB_OTG1、USB_OTG2)に接続されています。

  • USB 2.0

    • High Speed(480Mbps)
    • Full Speed(12Mbps)
    • Low Speed(1.5Mbps)

3.4.5.18. UART

シリアル(UART)を最大8ポート拡張することが可能です。 信号線はi.MX6ULLのUART(UART1、UART2、UART3、UART4、UART5、UART6、UART7、UART8)に接続されています。

  • 最大データ転送レート: 4Mbps
  • 信号レベル: +3.3V_IO

3.4.5.19. SD/SDIO/MMC

CON1(SDインターフェース)と排他でSD/SDIO/MMCを1ポート拡張することが可能です。 信号線はi.MX6ULLのSDホストコントローラ(uSDHC2)に接続されています。

  • 最大クロック周波数: 49.5MHz
  • 信号レベル: +3.3V_IO

3.4.5.20. LCD

LCDを最大1ポート拡張することが可能です。 信号線はi.MX6ULLのLCDインターフェース(eLCDIF)に接続されています。

  • 最大解像度: WXGA(1366 x 768/24bpp)
  • 信号レベル: +3.3V_IO

3.4.5.21. I2S(SAI)

I2Sを最大2ポート拡張することが可能です。 信号線はi.MX6ULLの同期式オーディオインターフェース(SAI1、SAI3)に接続されています。

  • 信号レベル: +3.3V_IO

3.4.5.22. MQS

MQSを最大1ポート拡張することが可能です。 信号線はi.MX6ULLのMedium Quality Sound(MQS)に接続されています。

  • 信号レベル: +3.3V_IO

3.4.5.23. S/PDIF

S/PDIFを最大1ポート拡張することが可能です。 信号線はi.MX6ULLのSony/Philips デジタルインターフェース(SPDIF)に接続されています。

  • 信号レベル: +3.3V_IO

3.4.5.24. I2C

I2Cを最大2ポート拡張することが可能です。 信号線はi.MX6ULLのI2Cコントローラ(I2C2、I2C4)に接続されています。

  • 最大データ転送レート: 400kbps
  • 信号レベル: +3.3V_IO

3.4.5.25. SPI

SPIを最大4ポート拡張することが可能です。 信号線はi.MX6ULLのESPI(ECSPI1、ECSPI2、ECSPI3、ECSPI4)に接続されています。

  • 信号レベル : +3.3V_IO

3.4.5.26. CAN

CANを最大2ポート拡張することが可能です。 信号線はi.MX6ULLのFLEXCAN(FLEXCAN1、FLEXCAN2)に接続されています。

  • プロトコルバージョン2.0Bアクティブ対応
  • 信号レベル: +3.3V_IO

3.4.5.27. A/D

A/Dを最大8ポート拡張することが可能です。 信号線はi.MX6ULLのADコンバーター(ADC1、ADC2)に接続されています。

  • 分解能: 最大12ビット
  • サンプリングレート: 最大1MS/s
  • 測定電圧範囲: DC 0〜3.3V

3.4.5.28. PWM

PWMを最大8ポート拡張することが可能です。

  • 最大周波数: 66MHz
  • 信号レベル: +3.3V_IO

3.4.5.29. GPIO

GPIOを最大66ポート拡張することが可能です。

  • 信号レベル : +3.3V_IO

3.4.5.30. リアルタイムクロック

i.MX6ULL内蔵のリアルタイムクロックを使用可能です。 バックアップ用のピン(RTC_BAT)が接続されていますので、 Armadillo-610の電源(VIN)が切断されても時刻データを保持したい場合にご使用ください。

  • 平均月差: 約70秒@25℃(参考値)
  • バックアップ時間: 約4か月(CR2032使用時の参考値)

3.4.6. 電気的仕様

3.4.6.1. 絶対最大定格

表3.7 絶対最大定格

項目 記号 Min. Max. 単位 備考

電源電圧

VIN

-0.3

4.8

V

入出力電圧(USB信号以外)

VI,VO

-0.5

OVDD+0.3

V

OVDD=+3.3V_IO, VDD_SNVS_IN [a]

入力電圧(USB信号)

VI_USB

-0.3

3.63

V

USB_OTG1_DP, USB_OTG1_DN, USB_OTG2_DP, USB_OTG2_DN

入力電圧(USB_VBUS)

VI_VBUS

5.5

V

USB_OTG1_VBUS, USB_OTG2_VBUS

RTCバックアップ電源電圧

RTC_BAT

-0.3

3.6

V

使用温度範囲

Topr

-20

70

結露なきこと

[a] Armadillo-610: CON2の13ピンのみOVDD=VDD_SNVS_INとなります。VDD_SNVS_INはダイオードを介してVSNVSとVDD_HIGH_INの電源が供給されています。


[警告]

絶対最大定格は、あらゆる使用条件や試験状況において、瞬時でも超えてはならない値です。上記の値に対して余裕をもってご使用ください。

3.4.6.2. 推奨動作条件

表3.8 推奨動作条件

項目 記号 Min. Typ. Max. 単位 備考

電源電圧

VIN

3.6

4.5

V

入力電圧(USB_VBUS)

VI_VBUS

4.4

5.5

V

USB_OTG1_VBUS, USB_OTG2_VBUS

RTCバックアップ電源電圧

RTC_BAT

2.75

3.3

V

Topr=+25℃

使用温度範囲

Ta

-20

25

70

V

結露なきこと


3.4.6.3. 入出力インターフェースの電気的仕様

表3.9 入出力インターフェース(電源)の電気的仕様

項目 記号 Min. Typ. Max. 単位 備考

5V 電源電圧

+5V_IO

4.8

5

5.15

V

3.3V 電源電圧

+3.3V_IO

3.102

3.3

3.498

V

VDD_HIGH_IN

3.201

3.3

3.399

V

セキュア用電源電圧

VSNVS

2.85

3.0

3.21

V

3.2V < VIN < 4.5V, OFF mode

2.85

3.0

3.15

V

3.2V < VIN < 4.5V, On mode

RTC_BAT-0.1

RTC_BAT

V

2.84V < RTC_BAT < 3.3V, Coin cell mode


表3.10 入出力インターフェースの電気的仕様(OVDD = +3.3V_IO、VDD_SNVS_IN)

項目 記号 Min. Max. 単位 備考

ハイレベル出力電圧

VOH

OVDD-0.15

OVDD

V

IOH = -0.1mA, -1mA

ローレベル出力電圧

VOL

0

0.15

V

IOL = 0.1mA, 1mA

ハイレベル入力電圧[a]

VIH

0.7×OVDD

OVDD

V

ローレベル入力電圧[a]

VIL

0

0.3×OVDD

V

ローレベル入力電圧(ONOFF信号)

VIL

0

0.9

V

ローレベル入力電圧(PWRON信号)

VIL

0

0.5

V

ローレベル入力電圧(EXT_RESET_B信号)

VIL

0

0.19

V

入力リーク電流(no Pull-up/Pull-down)

IIN

-1

1

μA

Pull-up抵抗(5kΩ)

4

6

Pull-up抵抗(47kΩ)

37.6

56.4

Pull-up抵抗(100kΩ)

80

120

Pull-down抵抗(100kΩ)

80

120

[a] オーバーシュートとアンダーシュートは0.6V以下でかつ4nsを超えないようにしてください。


3.4.6.4. 電源回路の構成

Armadillo-610の電源回路の構成は図3.42「電源回路の構成」のとおりです。

images/block-power.svg

図3.42 電源回路の構成


拡張インターフェース(Armadillo-610: CON2)からの入力電圧(VIN)をパワーマネジメントIC(PMIC)で各電圧に変換し、 内部回路および各インターフェースに供給しています。 各インターフェースやスイッチング・レギュレータの最大出力電流値を超えないように、 外部機器の接続、供給電源の設計を行なってください。

電源シーケンスは次のとおりです。

images/power-sequence.svg

図3.43 電源シーケンス [9]


[ティップ]

USB_OTG1_VBUS, USB_OTG2_VBUSは電源シーケンスに関わらず、いつ電源を投入しても問題ありません。

3.4.6.5. リセット回路の構成

リセット回路の構成は図3.44「リセット回路の構成」のとおりです。

images/block-reset.svg

図3.44 リセット回路の構成


拡張インターフェース(Armadillo-610: CON2)およびJTAGインターフェース(Armadillo-610: CON10)のEXT_RESET_Bピンは i.MX6ULLのPOR_Bピンに接続されています。 EXT_RESET_BピンからLowレベル出力することで、システムリセットすることができます。 確実にシステムリセットするためには、20ミリ秒以上Lowレベルを保持する必要があります。

images/common-images/reset-sequence.svg

図3.45 システムリセットする場合のLowレベル保持時間


EXT_RESET_Bピンからシステムリセットする場合は、オープンドレイン出力等でGNDとショートする回路を接続してください。

リセット信号が必要なデバイスを拡張する場合、拡張インターフェース(Armadillo-610: CON2)のEXT_RESET_Bピンを利用してリセットすることも可能です。

3.4.6.6. 外部からの電源制御

拡張インターフェース(Armadillo-610: CON2)のONOFFピンおよびPWRONピンより、パワーマネジメントICからi.MX6ULLへの電源供給を制御することが可能です。

  • ONOFFピンからの電源制御

    拡張インターフェース(Armadillo-610: CON2)のONOFFピンはi.MX6ULLのONOFFピンに接続されています。 ONOFFピンから一定時間以上Lowレベル出力することで、i.MX6ULLの保持している電源のオン状態、オフ状態が切り替わります。

    電源がオフ状態に切り替わった場合、i.MX6ULLからパワーマネジメントICのPWRONピンにLowレベルが出力され、パワーマネジメントICからの電源が切断されます。

    電源オン状態からオフ状態に切り替える場合は5秒以上、電源オフ状態からオン状態に切り替える場合は500ミリ秒以上、Lowレベルを保持する必要があります。

    連続して電源オンとオフを切り替える場合は、確実に動作させるために5秒以上の間隔を空けてください。

    ONOFFピンから電源制御する場合は、オープンドレイン出力等でGNDとショートする回路を接続してください。

    表3.11 ONOFFピンから電源オン、オフ切り替えする際のLow保持時間

    状態 Low保持時間

    電源オンからオフ

    5秒以上

    電源オフからオン

    500ミリ秒以上


    電源オンまたはオフの状態は、拡張インターフェース(Armadillo-610: CON2)のVINピンとRTC_BATピンのどちらか一方でも電源が供給されている限り、保持されます。

    images/block-onoff.svg

    図3.46 ONOFF回路の構成 [10]


    [警告]

    電源オフの状態にして拡張インターフェース(Armadillo-610: CON2)のVINピンからの電源を切断した場合、 電荷が抜けるまでは電源オフであることが保持されます。 電源オフを保持した状態で電源を投入したくない場合は、5秒以上間隔を空けて電源を投入してください。

  • PWRONピンからの電源制御

    拡張インターフェース(Armadillo-610: CON2)のPWRONピンはパワーマネジメントICのPWRONピンに接続されています。 PWRONピンからLowレベル出力することで、パワーマネジメントICからの電源が切断されます。

    PWRONピンから電源制御する場合は、オープンドレイン出力等でGNDとショートする回路を接続してください。

3.4.7. 形状図

3.4.7.1. 基板形状図

images/a610-hole-dimension.svg

図3.47 基板形状および固定穴寸法


images/a610-parts-dimension.svg

図3.48 コネクタ中心寸法


images/a610-stacking-height.svg

図3.49 Armadillo-610のスタッキング高さ


[警告]

基板改版や部品変更により、基板上の部品位置、高さは変更になることがあります。 ケースや拡張基板を設計する場合、ある程度の余裕をもった寸法での設計をお願いいたします。

[ティップ]

DXF形式の基板形状図を、購入者向けの限定データとして 「アットマークテクノ Armadilloサイト」からダウンロード可能です。

3.4.8. オプション品

Armadillo-610 のオプション品については、「オプション品」 を参照してください。

3.5. Device Treeをカスタマイズする

at-dtweb を利用して Device Tree をカスタマイズする方法を説明します。at-dtweb では、 Web ブラウザ上のマウス操作で dtbo ファイルおよび desc ファイルを生成することができます。 カスタマイズの対象は拡張インターフェース(Armadillo-610: CON2)です。

3.5.1. Linux カーネルソースコードの取得

at-dtweb を使用するためには、予めLinux カーネルのソースコードを用意しておく必要があります。

[ティップ]

at-dtweb が必要とするのは Linux カーネルソースコード内の dts(Device Tree Source)ファイルと Makefile であり、Linux カーネルイメージのビルドをする必要はありません。 そのため、ここでは Linux カーネルのビルドは行いません。

Linux カーネルのビルド手順については、「Linux カーネルをビルドする」を参照してください。

Armadillo Base OS 対応 Armadillo-610 Linuxカーネル から 「Linuxカーネル」ファイル (linux-at-a6-[VERSION].tar) をダウンロードして、次のコマンドを実行します。

[ATDE ~]$ tar xf linux-at-a6-[VERSION].tar
[ATDE ~]$ tar xf linux-at-a6-[VERSION]/linux-[VERSION].tar.gz
[ATDE ~]$ cd linux-[VERSION]

次のコマンドを実行して、デフォルトコンフィギュレーションを適用しておきます。

[ATDE ~/linux-[VERSION]]$ make ARCH=arm armadillo-640_defconfig

3.5.2. at-dtweb のインストール

ATDE9 に at-dtweb パッケージをインストールします。

[ATDE ~]$ sudo apt update
[ATDE ~]$ sudo apt install at-dtweb

インストール済みの場合は、以下のコマンドを実行し最新版への更新を行ってください。

[ATDE ~]$ sudo apt update
[ATDE ~]$ sudo apt upgrade

3.5.3. at-dtweb の起動

  1. at-dtweb の起動開始

    at-dtweb の起動を開始するには、デスクトップ左上のアプリケーションの「システムツール」から「at-dtweb」を選択してください。

    images/at-dtweb-activity.png

    図3.50 at-dtweb の起動開始


コマンドライン上からでも、at-dtweb コマンドで起動できます。

[ATDE ~]$ at-dtweb
  1. ボードの選択

    ボードを選択します。Armadillo-610 を選択して、「OK」をクリックします。

    images/at-dtweb-board-select.png

    図3.51 ボード選択画面


  2. Linux カーネルディレクトリの選択

    Linux カーネルディレクトリを選択します。コンフィギュレーション済みの Linux カーネルディレクトリを選択して、「OK」をクリックします。

    images/at-dtweb-kernel-select.png

    図3.52 Linux カーネルディレクトリ選択画面


  3. at-dtweb の起動完了

    at-dtweb が起動し、次のように画面が表示されます。

    images/at-dtweb-main.png

    図3.53 at-dtweb 起動画面


3.5.4. Device Tree をカスタマイズ

3.5.4.1. 機能の選択

機能の選択は、ドラッグ&ドロップで行います。画面左上の「Available features」から有効にしたい機能をドラッグし、画面右側の「Armadillo-610」の白色に変化したピンにドロップします。例としてCON2 83/85ピンをUART1(RXD/TXD)に設定します。

[ティップ]

何も機能が選択されていないピンには GPIO の機能が割り当てられます。

images/at-dtweb-enable-feature1.png

図3.54 UART1(RXD/TXD)のドラッグ


images/at-dtweb-enable-feature2.png

図3.55 CON2 83/85ピンへのドロップ


3.5.4.2. 信号名の確認

画面右側の「Armadillo-610」にドロップして設定したピンを左クリックすると信号名が表示されます。 どのピンがどの信号に対応しているのかを確認することができます。

例として UART1(RXD/TXD) の信号名を確認します。

images/at-dtweb-show-signal-name.png

図3.56 信号名の確認


[ティップ]

再度ピンを左クリックすると機能名の表示に戻ります。

3.5.4.3. プロパティの設定

いくつかの機能にプロパティを設定することができます。画面右側の「Armadillo-610」に選択した機能を左クリックすると、画面左下の「Properties」からプロパティを選択することができます。

例としてCON2 88/89ピンのI2C4(SCL/SDA)のclock_frequencyプロパティを設定します。

images/at-dtweb-set-property.png

図3.57 プロパティの設定


設定したプロパティを確定させるには「Apply」をクリックします。

images/at-dtweb-apply-property.png

図3.58 プロパティの保存


3.5.4.4. 機能の削除

全ての機能を削除する場合は、画面右上の「Reset configuration」をクリックします。機能ごとに削除する場合は、画面右側の「Armadillo-610」のピンを右クリックして「Remove」をクリックします。

images/at-dtweb-reset-configuration.png

図3.59 全ての機能の削除


images/at-dtweb-remove-configuration.png

図3.60 UART1(RXD/TXD)の削除


3.5.4.5. Device Tree のファイルの生成

Device Tree のファイルを生成するには、画面右上の「Save」をクリックします。

images/at-dtweb-save-configuration.png

図3.61 DTS/DTB の生成


以下の画面ようなメッセージが表示されると、dtbo ファイルおよび desc ファイルの生成は完了です。

images/at-dtweb-save-complete-dtbo.png

図3.62 dtbo/desc の生成完了


ビルドが完了するとホームディレクトリ下の mkswu/at-dtweb-Armadillo-610 ディレクトリに、DT overlay ファイル(dtboファイル)と desc ファイルが生成されます。 Armadillo-610 本体に書き込む場合は、mkswu コマンドで desc ファイルから SWU イメージを生成してアップデートしてください。

[ATDE ~]$ ls ~/mkswu/at-dtweb-Armadillo-610
armadillo-610-at-dtweb.dtbo  update_overlays.sh
at-dtweb.desc                update_preserve_files.sh
[ATDE ~]$ cd ~/mkswu/at-dtweb-Armadillo-610
[ATDE ~]$ mkswu at-dtweb.desc 1
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
at-dtweb.swu を作成しました。

1

SWU イメージを生成します。

SWU イメージを使ったアップデートの詳細は 「アップデート機能について」 を参照してください。

3.5.5. DT overlay によるカスタマイズ

Device Treeは「DT overlay」(dtbo) を使用することでも変更できます。

DT overlay を使用することで、通常の dts の更新が自動的に入りつづける状態で dts の変更でしかできない設定を行うことができます。

/boot/overlays.txtfdt_overlays を dtbo 名で設定することで、 u-bootが起動時にその DT overlay を通常の dtb と結合して起動します。

複数の DT overlay を使う場合は以下の例のようにスペースで別けたファイル名を記載することができます。

[armadillo ~]# vi /boot/overlays.txt 1
fdt_overlays=armadillo-610-onboard-usdhc2.dtbo armadillo-610-extboard-eva.dtbo

[armadillo ~]# persist_file -vp /boot/overlays.txt 2
'/boot/overlays.txt' -> '/mnt/boot/overlays.txt'
Added "/boot/overlays.txt" to /etc/swupdate_preserve_files

[armadillo ~]# reboot 3
: (省略)
Applying fdt overlay: armadillo-610-onboard-usdhc2.dtbo 4
Applying fdt overlay: armadillo-610-extboard-eva.dtbo
: (省略)

図3.63 /boot/overlays.txt の変更例


1

/boot/overlays.txt ファイルに「armadillo-610-extboard-eva.dtbo」を追加します。 ファイルが存在しない場合は新規に作成してください。 このファイルの詳細については 「DT overlay によるカスタマイズ」 を参照してください。

2

/boot/overlays.txt を保存し、アップデートの場合でも保存します。

3

overlay の実行のために再起動します。

4

シリアルコンソールの場合に、u-bootによるメッセージを確認できます。

3.5.5.1. 提供している DT overlay

以下の DT overlay を用意しています:

  • armadillo-610-onboard-usdhc2.dtbo: SD インターフェース(Armadillo-610: CON1)を利用する場合にご使用ください。
  • armadillo-610-extboard-eva.dtbo: Armadillo-610 拡張ボードを利用する場合にご使用ください。SD インターフェース(Armadillo-610 拡張ボード: CON1)、Grove インターフェース(Armadillo-610 拡張ボード: CON7、CON8、CON9、CON10)、LCD インターフェース(Armadillo-610 拡張ボード: CON11)を利用する場合は、後述のdtboと合わせてご使用ください。
  • armadillo-610-extboard-eva-usdhc2.dtbo: SD インターフェース(Armadillo-610 拡張ボード: CON1)を利用する場合にご使用ください。
  • armadillo-610-extboard-eva-grove.dtbo: Grove インターフェース(Armadillo-610 拡張ボード: CON7、CON8、CON9、CON10)を利用する場合にご使用ください。
  • armadillo-640-lcd70ext-l00.dtbo: LCD オプションセット(7 インチタッチパネル WVGA 液晶を接続する場合にご使用ください。
  • armadillo-600-button-enter.dtbo: SW1 の動作を Debian 版と同じにします。 SW1 の押下を ENTER キーのリリースに割り当てます。
[警告]

armadillo-610-onboard-usdhc2.dtbo と armadillo-610-extboard-eva-usdhc2.dtbo を同時に使用することはできません。

[警告]

armadillo-610-extboard-eva-grove.dtbo と armadillo-640-lcd70ext-l00.dtbo を同時に使用することはできません。

[警告]

at-dtweb で作成した armadillo-610-at-dtweb.dtbo と同時にこれらの dtbo を使用する場合、 at-dtweb で設定した内容との間で設定の競合が発生し、正しく動作しない場合があります。

3.6. インターフェースの使用方法とデバイスの接続方法

Armadillo を用いた開発に入る前に、開発するシステムに接続する必要のある周辺デバイスをこのタイミングで接続しておきます。

図3.64「Armadillo-610のインターフェース」にArmadillo-610の各インターフェースの位置を、表3.12「Armadillo-610 インターフェース一覧 」に各インターフェースの概要を示します。

images/a610-interface-details.svg

図3.64 Armadillo-610のインターフェース


表3.12 Armadillo-610 インターフェース一覧 [11]

部品番号 インターフェース名 型番 メーカー

CON1

SDインターフェース

SDHK-8BNS-K-303-TB(HF)

J.S.T.Mfg.

CON2

拡張インターフェース

DF40C-100DP-0.4V(51)

HIROSE ELECTRIC

CON10

JTAGインターフェース

A3B-08PA-2DSA(51)

HIROSE ELECTRIC

LED5

ユーザー LED(黄)

SML-310YTT86

ROHM

[11] 部品の実装、未実装を問わず、搭載可能な部品型番を記載しています。


[警告]

表3.12「Armadillo-610 インターフェース一覧 」には搭載可能な代表型番を記載しており、 実際に搭載されている部品型番と違う場合があります。 お手元の製品に搭載されている部品型番や部品の実装、未実装の情報については、 「アットマークテクノ Armadilloサイト」からダウンロードできる 納入仕様書および変更履歴表にてご確認ください。

以下では、各デバイスの接続方法、仕様及び使用方法について紹介していきます。

3.6.1. SDカードを使用する

以下の説明では、共通の操作が可能な場合に、 microSD/microSDHC/microSDXC カードを microSD カードと表記します。

3.6.1.1. ハードウェア仕様

Armadillo-610 のSDホストは、i.MX6ULL の uSDHC (Ultra Secured Digital Host Controller) を利用しています。

「SD/SDIO/MMC」も合わせて参照してください。

Armadillo-610 開発セットでは、SD インターフェース(Armadillo-610: CON1) と SD インターフェース(Armadillo-610 拡張ボード: CON1)がuSDHC2を共用しています。そのため、どちらか一方しか利用することができません。Armadillo-610 開発セットの標準状態では、SD インターフェース(Armadillo-610: CON1)が有効になっています。

機能
  • カードタイプ: microSD/microSDHC/microSDXC/microSDIO
  • バス幅: 1bit or 4bit
  • スピードモード: Default Speed (24.75MHz), High Speed (49.5MHz)
  • カードディテクトサポート
インターフェース仕様

CON1はハイスピード(最大クロック周波数: 49.5MHz)に対応したSDインターフェースです。 信号線はi.MX6ULLのSDホストコントローラ(uSDHC2)に接続されています。

microSDカードに供給される電源はi.MX6ULLのNAND_ALEピン(GPIO4_IO10)で制御が可能です。 Highレベル出力で電源が供給され、Lowレベル出力で電源が切断されます。

[警告]

CON1は活線挿抜に対応していません。microSDカードの挿抜は、電源を切断してから行ってください。

[警告]

SDコントローラ(uSDHC2)はCON2(拡張インターフェース)でも利用可能ですが、排他利用となります。

表3.13 CON1 信号配列

ピン番号 ピン名 I/O 説明

1

DAT2

In/Out

SDデータバス(bit2)、i.MX6ULLのNAND_DATA02ピンに接続

2

CD/DAT3

In/Out

SDデータバス(bit3)、i.MX6ULLのNAND_DATA03ピンに接続

3

CMD

In/Out

SDコマンド/レスポンス、i.MX6ULLのNAND_WE_Bピンに接続

4

VDD

Power

電源(+3.3V_IO)

5

CLK

Out

SDクロック、i.MX6ULLのNAND_RE_Bピンに接続

6

VSS

Power

電源(GND)

7

DAT0

In/Out

SDデータバス(bit0)、i.MX6ULLのNAND_DATA00ピンに接続

8

DAT1

In/Out

SDデータバス(bit1)、i.MX6ULLのNAND_DATA01ピンに接続


3.6.1.2. microSDカードの挿抜方法

  1. 上からカバーを軽く押し、約1.2mmスライドさせて、ロックを解除します。

    images/sd-1.png

    図3.65 カバーのロックを解除する


  2. カバーを開けます。

    images/sd-2.png

    図3.66 カバーを開ける


    [警告]

    カバーは過度な力で回転させたり、回転方向以外の方向へ力を加えると、 破損の原因となりますので、ご注意ください。

  3. 任意の角度までトレイを開いた状態で、microSDカードを挿抜します。

    images/sd-4.png

    図3.67 microSDカードの挿抜


    [ティップ]

    microSDカード挿入方向については、カバーに刻印されているカードマークを目安にしてください。

    images/sd-3.png

    図3.68 カードマークの確認


  4. カバーを閉めます。

    images/sd-5.png

    図3.69 カバーを閉める


  5. 上からカバーを軽く押し、約1.2mmスライドさせて、ロックします。

    images/sd-6.png

    図3.70 カバーをロックする


[ティップ]

microSDカード装着後のカードの抜き取り手順は挿入時と同じです。

3.6.1.3. ソフトウェア仕様

デバイスファイル
  • /dev/mmcblk1

3.6.1.4. 使用方法

ここでは、 sd_example という名称の alpine ベースのコンテナを作成し、その中で microSD カードを使用します。 必要なコンテナイメージは予め podman pull している前提で説明します。

CON1 に microSD カードを挿入してください。

/etc/atmark/containers/sd_example.conf というファイルを以下の内容で作成します。

set_image docker.io/alpine
add_hotplugs mmc 1
add_args --cap-add=SYS_ADMIN 2
set_command sleep infinity

1

add_hotplugsmmc を指定することで、 コンテナ内でmicroSD カードをホットプラグで認識します

2

コンテナ内で microSD カードをマウントするための権限を与えます

コンテナを起動し、コンテナの中に入ります。

[armadillo]# podman_start sd_example
Starting 'sd_example'
1d93ecff872276834e3c117861f610a9c6716c06eb95623fd56aa6681ae021d4

[armadillo]# podman exec -it sd_example sh
[container]#

コンテナ内で microSD カードは、 /dev/mmcblk1 として認識されますので /mnt にマウントします。

[container]# mount /dev/mmcblk1p1 /mnt

ストレージの使用方法については、「ストレージの操作」もあわせて参照してください。

3.6.2. Ethernet を使用する

3.6.2.1. ハードウェア仕様

Armadillo-610の Ethernet (LAN) は、i.MX6ULLのENET(10/100-Mbps Ethernet MAC)を利用しています。

「LAN(Ethernet)」も合わせて参照してください。

Armadillo-610 開発セットでは、LAN インターフェース(Armadillo-610 拡張ボード: CON2)がENETを利用しています。 詳細は、「CON2(LANインターフェース)」を参照してください。

機能
  • 通信速度: 100Mbps (100BASE-TX), 10Mbps (10BASE-T)
  • 通信モード: Full-Duplex (全二重), Half-Duplex (半二重)
  • Auto Negotiationサポート
  • キャリア検知サポート
  • リンク検出サポート

3.6.2.2. ソフトウェア仕様

ネットワークデバイス
  • eth0

3.6.2.3. 使用方法

ネットワークの設定方法については「ネットワーク設定」を参照してください。

3.6.3. UART を使用する

3.6.3.1. ハードウェア仕様

Armadillo-610のシリアルは、i.MX6ULLのUART (Universal Asynchronous Receiver/Transmitter) を利用しています。

「UART」も合わせて参照してください。

Armadillo-610 開発セットの標準状態では、シリアルインターフェース(Armadillo-610 拡張ボード: CON3)が UART1 をコンソールとして利用しています。 また、Grove インターフェース(Armadillo-610 拡張ボード: CON7)にはUART5を利用しています。 詳細は、「CON3(シリアルインターフェース)」及び、「CON7、CON8、CON9、CON10(Groveインターフェース)」を参照してください。

フォーマット
  • データビット長: 7 or 8ビット
  • ストップビット長: 1 or 2ビット
  • パリティ: 偶数 or 奇数 or なし
  • フロー制御: CTS/RTS or XON/XOFF or なし
  • 最大ボーレート:230.4kbps

3.6.3.2. ソフトウェア仕様

デバイスファイル
シリアルインターフェース デバイスファイル

UART1

/dev/ttymxc0

UART3

/dev/ttymxc2

UART5

/dev/ttymxc4

3.6.3.3. 使用方法

コンテナ内で動作するアプリケーションから RS-232C や RS-485 などのシリアル通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttymxcN を渡す必要があります。 以下は、/dev/ttymxc2 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/serial_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttymxc2
[armadillo ~]# podman_start serial_example
Starting 'serial_example'
3999f09d51253371cacffd68967c90fdd5250770888a82f59d7810b54fcc873e

図3.71 シリアルインターフェースを扱うためのコンテナ作成例


コンテナ内に入り、setserial コマンドを使って現在の設定を確認することができます。

[armadillo ~]# podman exec -it serial_example sh
[container ~]# setserial -a /dev/ttymxc2
/dev/ttymxc2, Line 2, UART: undefined, Port: 0x0000, IRQ: 52
        Baud_base: 5000000, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal

図3.72 setserial コマンドによるシリアルインターフェイス設定の確認例


3.6.4. USB デバイスを使用する

3.6.4.1. ハードウェア仕様

  • USB ホスト

    Armadillo-610のUSBホストは、i.MX6ULLのUSB-PHY (Universal Serial Bus 2.0 Integrated PHY) および USB (Universal Serial Bus Controller) を利用しています。

    「USB」も合わせて参照してください。

    Armadillo-610 開発セットでは、USB ハブが USB_OTG1 を利用しています。 USB インターフェース(Armadillo-610 拡張ボード: CON5)にはUSB ハブが接続されています。 詳細は、「CON5(USBホストインターフェース)」を参照してください。

    機能
    • Universal Serial Bus Specification Revision 2.0 準拠
    • Enhanced Host Controller Interface (EHCI)準拠
    • 転送レート: USB2.0 High-Speed (480Mbps), Full-Speed (12Mbps), Low-Speed (1.5Mbps)
  • USB ハブ

    Armadillo-610 拡張ボードには、Microchip 製 USB2513B が搭載されています。 USB2513Bには、WLAN インターフェース(Armadillo-610 拡張ボード: CON18)およびUSB インターフェース(Armadillo-610 拡張ボード: CON5)が接続されています。

    機能
    • USB specification rev 2.0準拠

3.6.4.2. ソフトウェア仕様

デバイスファイル
  • メモリデバイスの場合は、デバイスを認識した順番で/dev/sdN (Nは’a'からの連番)となります。
  • I/Oデバイスの場合は、ファンクションに応じたデバイスファイルとなります。

3.6.4.3. 使用方法

コンテナ内で動作するアプリケーションから USB 接続のデバイスを扱うための方法について示します。

  • USB シリアルデバイスを扱う

    USB シリアルデバイスをコンテナ内から扱う場合には、Podman のイメージからコンテナを作成する際に add_hotplugsttyUSB を設定する必要があります。この設定により、コンテナ起動後に USB シリアルデバイスを 接続した場合でも正しく認識されます。 以下は、alpine イメージからコンテナを作成する例です。

    [armadillo ~]# vi /etc/atmark/containers/usb_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_hotplugs ttyUSB
    [armadillo ~]# podman_start usb_example
    Starting 'usb_example'
    34cb0e60d6274ac1df87aed58a461bcf56d0c117c4d377af130605ea399e0950

    図3.73 USB シリアルデバイスを扱うためのコンテナ作成例


    コンテナ内に入り、setserial コマンドを使って現在の設定を確認することができます。

    [armadillo ~]# podman exec -it usb_example sh
    [container ~]# setserial -a /dev/serial/by-id/usb-067b_2303-if00-port0
    /dev/serial/by-id/usb-067b_2303-if00-port0, Line 4, UART: 16654, Port: 0x0000, IRQ: 0
            Baud_base: 460800, close_delay: 0, divisor: 0
            closing_wait: infinite
            Flags: spd_normal

    図3.74 setserial コマンドによるUSBシリアルデバイス設定の確認例


    コンテナ内からのデバイスの指定には /dev/ttyUSBN を使用することもできますが、 デバイスを接続するタイミングによっては N の値が変わる可能性があります。 このため上記の例のように /dev/serial/by-id/ 下にあるファイルを指定することで 確実に目的のデバイスを使用することができます。

  • USB カメラを扱う

    USB カメラをコンテナ内から扱う場合には、Podman のイメージからコンテナを作成する際に add_hotplugsvideo4linux を設定する必要があります。この設定により、コンテナ起動後に USB カメラを 接続した場合でも正しく認識されます。 以下は、alpine イメージからコンテナを作成する例です。

    [armadillo ~]# vi /etc/atmark/containers/usbcam_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_hotplugs video4linux
    [armadillo ~]# podman_start usbcam_example
    Starting 'usbcam_example'
    ffe06090b45826cc0b1c7710e9e850ba9521d36b70de4288d0dfe1fe91a35632
    [armadillo ~]# podman exec -it usbcam_example sh
    [container ~]# ls /dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_78DA8CAF-video-index0
    /dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_78DA8CAF-video-index0

    図3.75 USB カメラを扱うためのコンテナ作成例


    GStreamer などのマルチメディアフレームワークと組み合わせることで、USB カメラからの映像のキャプチャが可能となります。

    コンテナ内からのデバイスの指定には /dev/videoN を使用することもできますが、 デバイスを接続するタイミングによっては N の値が変わる可能性があります。 このため上記の例のように /dev/v4l/by-id/ 下にあるファイルを指定することで 確実に目的のデバイスを使用することができます。

  • USB メモリを扱う

    ここでは、USB メモリを扱う方法について 2 つの例を示します。

    • ホスト OS 側でマウントした USB メモリをコンテナから扱う

      あらかじめホスト OS 側でマウントしてある USB メモリをコンテナから扱う場合には、Podman のイメージから コンテナを作成する際にホスト OS 側で USB メモリをマウントしてるディレクトリを渡す必要があります。

      [armadillo ~]# mount -t vfat /dev/sda1 /mnt
      [armadillo ~]# echo test >> /mnt/sample.txt
      [armadillo ~]# ls /mnt
      sample.txt

      図3.76 USB メモリをホスト OS 側でマウントする例


      上記の例では、USB メモリを /mnt にマウントしました。以下は、 /mnt を渡して alpine イメージからコンテナを作成する例です。

      [armadillo ~]# vi /etc/atmark/containers/usbmem_example.conf
      set_image docker.io/alpine
      set_command sleep infinity
      add_volumes /mnt
      [armadillo ~]# podman_start usbmem_example
      Starting 'usbmem_example'
      ef77d4bfd5b04f3b8b5ddcb5bfac321304fa64219a4b88c3130e45e5a14e1b3e

      図3.77 ホスト OS 側でマウント済みの USB メモリを扱うためのコンテナ作成例


      ホスト OS 側の /mnt ディレクトリをコンテナ内の /mnt にマウントしています。 これにより、コンテナ内からも /mnt ディレクトリを通して USB メモリを扱うことができます。

      [armadillo ~]# podman exec -it usbmem_example sh
      [container ~]# ls /mnt
      sample.txt
      [container ~]# cat /mnt/sample.txt
      test

      図3.78 USB メモリに保存されているデータの確認例


    • USB メモリをコンテナ内からマウントする

      USB メモリをコンテナ内からマウントして扱う場合には、Podman のイメージからコンテナを作成する際に add_hotplugssd を設定する必要があります。この設定により、コンテナ起動後に USB メモリを 接続した場合でも正しく認識されます。加えて、コンテナ内からマウントするためには適切な権限も設定する必要があります。 以下は、 alpine イメージからコンテナを作成する例です。権限として SYS_ADMIN を渡しています。

      [armadillo ~]# vi /etc/atmark/containers/usbmem_example.conf
      set_image docker.io/alpine
      set_command sleep infinity
      add_args --cap-add=SYS_ADMIN
      add_hotplugs sd
      [armadillo ~]# podman_start usbmem_example
      Starting 'usbmem_example'
      387a2256530e9b35b5361ca681a99fba8f46d78b6a6cb8ecd60096246b9198a8

      図3.79 USB メモリをマウントするためのコンテナ作成例


      コンテナ内に入り、mount コマンドで USB メモリを /mnt にマウントし、保存されているデータを確認することができます。

      [armadillo ~]# podman exec -it usbmem_example sh
      [container ~]# mount /dev/disk/by-label/[MYUSBMEMORY] /mnt 1
      [container ~]# ls /mnt
      sample.txt
      [container ~]# cat /mnt/sample.txt
      test

      図3.80 コンテナ内から USB メモリをマウントする例


      1

      [MYUSBMEMORY] の部分は USB メモリに設定しているラベルに置き換えてください。

    コンテナ内からマウントするデバイスの指定には /dev/sdN を使用することもできますが、 他にもストレージデバイスを接続している場合などには N の値が変わることがあります。 このため、USBメモリにラベルを設定している場合は、上記の例のように /dev/disk/by-label/ 下にある ラベルと同名のファイルを指定することで確実に目的のデバイスを使用することができます。

3.6.5. 音声出力を行う

Armadillo-610 に接続したスピーカーなどの音声出力デバイスへコンテナ内から音声を出力するためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/snd を渡す必要があります。 以下は、/dev/snd を渡して debian イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/snd_example.conf
set_image localhost/at-debian-image
set_command sleep infinity
add_devices /dev/snd
[armadillo ~]# podman_start snd_example
Starting 'snd_example'
b921856b504e9f0a3de2532485d7bd9adb1ff63c2e10bfdaccd1153fd36a3c1d

図3.81 音声出力を行うためのコンテナ作成例


コンテナ内に入り、alsa-utils などのソフトウェアで音声出力を行えます。

[armadillo ~]# podman exec -it snd_example /bin/bash
[container ~]# apt update && apt upgrade
[container ~]# apt install alsa-utils 1
[container ~]# /etc/init.d/alsa-utils start 2
[container ~]# aplay -D hw:N,M [ファイル名] 3

図3.82 alsa-utils による音声出力を行う例


1

alsa-utils をインストールします。

2

alsa-utils を起動します。

3

指定したファイル名の音声ファイルを再生します。

aplay の引数にある、M は音声を出力したい CARD 番号、N はデバイス番号を表しています。 CARD 番号とデバイス番号は、aplay コマンドに -l オプションを与えることで確認できます。

3.6.6. GPIO を制御する

3.6.6.1. ハードウェア仕様

Armadillo-610のGPIOは、i.MX6ULLのGPIO(General Purpose Input/Output)を利用しています。

「GPIO」も合わせて参照してください。

3.6.6.2. ソフトウェア仕様

デバイスファイル
デバイスファイル GPIO番号

/dev/gpiochip0

0〜31(GPIO1_IO00〜GPIO1_IO31)

/dev/gpiochip1

32〜63(GPIO2_IO00〜GPIO2_IO31)

/dev/gpiochip2

64〜95(GPIO3_IO00〜GPIO3_IO31)

/dev/gpiochip3

96〜127(GPIO4_IO00〜GPIO4_IO31)

/dev/gpiochip4

128〜159(GPIO5_IO00〜GPIO5_IO31)

sysfs GPIOクラスディレクトリ
  • /sys/class/gpio/
[ティップ]

sysfs GPIOクラスは旧バージョンのLinuxカーネルとの互換性維持の為に残っています。新しくアプリケーションを開発する際の利用はおすすめしません。

新しくアプリケーションを開発する場合は、libgpiodパッケージに含まれるアプリケーションまたはLinux カーネルのソースコードに含まれているサンプル(tools/gpio/)を参考にしてください。

3.6.6.3. 使用方法

コンテナ内で動作するアプリケーションから GPIO を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の デバイスファイル /dev/gpiochipN を渡す必要があります。以下は、/dev/gpiochip0 を渡して alpine イメージからコンテナを作成する例です。 /dev/gpiochipN を渡すと、GPION+1 を操作することができます。

[armadillo ~]# vi /etc/atmark/containers/gpio_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/gpiochip0
[armadillo ~]# podman_start gpio_example
Starting 'gpio_example'
956a0fecc48d5ea1210069910f7bb48b9e90b2dadb12895064d9776dae0360b5

図3.83 GPIO を扱うためのコンテナ作成例


コンテナ内に入ってコマンドで GPIO を操作する例を以下に示します。この例では DIDO インターフェース(Armadillo-610 拡張ボード: CON13B)の4ピン(GPIO1_IO20) を操作しています。

[armadillo ~]# podman exec -it gpio_example sh
[container ~]# apk upgrade
[container ~]# apk add libgpiod
[container ~]# gpioget gpiochip0 20 1
1 2
[container ~]# gpioset gpiochip0 20=0 3

図3.84 コンテナ内からコマンドで GPIO を操作する例


1

GPIO 番号 20 の値を取得します。

2

取得した値を表示します。

3

GPIO 番号 20 に 0(Low) を設定します。

他にも、gpiodetect コマンドで認識している gpiochip をリスト表示できます。 以下の例では、コンテナを作成する際に渡した /dev/gpiochip0 が認識されていることが確認できます。

[container ~]# gpiodetect
gpiochip0 [209c000.gpio] (32 lines)

図3.85 gpiodetect コマンドの実行


gpioinfo コマンドでは、指定した gpiochip の詳細な情報を表示することができます。

[container ~]# gpioinfo gpiochip0
gpiochip0 - 32 lines:
        line   0:      unnamed        "dtr"  output   active-low [used]
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed        "red"  output  active-high [used]
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed      "green"  output  active-high [used]
        line   9:      unnamed       unused  output  active-high
        line  10:      unnamed        "SW1"   input   active-low [used]
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed     "yellow"  output  active-high [used]
        line  19:      unnamed "regulators:regulator-usbotg1vbu" output active-high [used]
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high

図3.86 gpioinfo コマンドの実行


デフォルトソフトウェアでは、DIDO インターフェース(Armadillo-610 拡張ボード: CON13B)の各ピンをGPIOとして利用することができます。ピン番号とGPIO番号の対応を次に示します。

表3.14 Armadillo-610 拡張ボード: CON13B ピン番号とGPIO番号の対応

ピン番号 GPIO番号

4

GPIO1_20

5

GPIO1_21

6/7

GPIO1_30

8/9

GPIO1_31


at-dtweb を利用すると、表3.14「Armadillo-610 拡張ボード: CON13B ピン番号とGPIO番号の対応」以外のピンも GPIO として利用することができるようになります。at-dtweb の利用方法については「Device Treeをカスタマイズする」を参照してください。

拡張インターフェース(Armadillo-610: CON2)のピン番号とGPIO番号の対応を次に示します。

表3.15 Armadillo-610: CON2 ピン番号とGPIO番号の対応

ピン番号 GPIO番号

11

GPIO1_IO19

12

GPIO4_IO17

14

GPIO1_IO04

15

GPIO1_IO03

16

GPIO1_IO02

17

GPIO1_IO01

18

GPIO3_IO05

19

GPIO3_IO06

20

GPIO3_IO07

21

GPIO3_IO08

22

GPIO3_IO09

23

GPIO3_IO10

24

GPIO3_IO11

25

GPIO3_IO12

26

GPIO3_IO13

27

GPIO3_IO14

28

GPIO3_IO15

29

GPIO3_IO16

30

GPIO3_IO17

31

GPIO3_IO18

32

GPIO3_IO19

33

GPIO3_IO20

34

GPIO3_IO21

35

GPIO3_IO22

37

GPIO3_IO00

38

GPIO3_IO02

39

GPIO3_IO03

40

GPIO3_IO01

41

GPIO4_IO16

43

GPIO1_IO10

55

GPIO4_IO19

56

GPIO4_IO20

57

GPIO4_IO25

58

GPIO4_IO26

59

GPIO4_IO27

60

GPIO4_IO28

61

GPIO4_IO23

62

GPIO4_IO22

63

GPIO4_IO24

64

GPIO4_IO21

65

GPIO4_IO18

66

GPIO4_IO09

67

GPIO4_IO08

68

GPIO4_IO07

69

GPIO4_IO06

70

GPIO3_IO28

71

GPIO3_IO27

72

GPIO3_IO26

73

GPIO3_IO25

74

GPIO3_IO24

76

GPIO3_IO23

80

GPIO1_IO08

81

GPIO1_IO05

82

GPIO1_IO30

83

GPIO1_IO16

84

GPIO1_IO31

85

GPIO1_IO17

86

GPIO1_IO23

87

GPIO1_IO22

88

GPIO1_IO21

89

GPIO1_IO20

90

GPIO1_IO00

91

GPIO1_IO26

92

GPIO1_IO27

93

GPIO1_IO25

94

GPIO1_IO24


C 言語プログラムから操作する場合は、GPIO 操作ライブラリである libgpiod を使用することができます。

3.6.7. I2C デバイスを使用する

3.6.7.1. ハードウェア仕様

Armadillo-610 の I2C インターフェースは、i.MX6ULL の I2C(I2C Controller) および GPIO を利用した I2C バスドライバ(i2c-gpio)を利用します。また、i2c-gpioを利用することで、I2C バスを追加することができます。

「I2C」も合わせて参照してください。

Armadillo-610 開発セットで利用している I2C バスと、接続される I2C デバイスを次に示します。

表3.16 I2C デバイス

I2C バス

I2C デバイス

アドレス

デバイス名

0(I2C1)

0x08

PF3000

1(I2C2)

0x32

NR3225SA


3.6.7.2. ソフトウェア仕様

Armadillo-610 開発セットの標準状態では、CONFIG_I2C_CHARDEV が有効となっているためユーザードライバで I2C デバイスを制御することができます。ユーザードライバを利用する場合は、Linux カーネルで I2Cデバイスに対応するデバイスドライバを無効にする必要があります。

機能
  • 最大転送レート: 384kbps
デバイスファイル
  • /dev/i2c-0 (I2C1)
  • /dev/i2c-1 (I2C2)

3.6.7.3. 使用方法

コンテナ内で動作するアプリケーションから I2C を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の デバイスファイル /dev/i2c-N を渡す必要があります。以下は、/dev/i2c-1 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/i2c_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/i2c-1
[armadillo ~]# podman_start i2c_example
Starting 'i2c_example'
efa1eb129c1f036a709755f0d53b21a0f2a39307ecae32b24aac98c0b6567bf0

図3.87 I2C を扱うためのコンテナ作成例


コンテナ内に入り、i2c-tools に含まれる i2cdetect コマンドを使ってスレーブアドレスを確認することができます。

[armadillo ~]# podman exec -it i2c_example sh
[container ~]# apk upgrade
[container ~]# apk add i2c-tools
[container ~]# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

図3.88 i2cdetect コマンドによる確認例


3.6.8. SPI デバイスを使用する

3.6.8.1. ハードウェア仕様

「SPI」を参照してください。

3.6.8.2. 使用方法

コンテナ内で動作するアプリケーションから SPI を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の デバイスファイル /dev/spidevN.N を渡す必要があります。以下は、/dev/spidev1.0 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/spi_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/spidev1.0
[armadillo ~]# podman_start spi_example
Starting 'spi_example'
45302bc9f95eef0e25c5d98acf198d96fc5bec1f83e791018cbe4221cc1f4523

図3.89 SPI を扱うためのコンテナ作成例


コンテナ内に入り、spi-tools に含まれる spi-config コマンドを使って現在の設定を確認することができます。

[armadillo ~]# podman exec -it spi_example sh
[container ~]# apk upgrade
[container ~]# apk add spi-tools
[container ~]# spi-config --device=/dev/spidev1.0 -q
/dev/spidev1.0: mode=0, lsb=0, bits=8, speed=500000, spiready=0

図3.90 spi-config コマンドによる確認例


3.6.9. CAN デバイスを使用する

3.6.9.1. ハードウェア仕様

「SPI」を参照してください。

3.6.9.2. 使用方法

コンテナ内で動作するアプリケーションから CAN 通信を行うためには、 Podman のイメージからコンテナを作成する際に、コンテナを実行するネットワークとして host を、 権限として NET_ADMIN を指定する必要があります。 以下は、ネットワークとして host を、権限として NET_ADMIN を指定して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/can_example.conf
set_image dockage.io/alpine
set_command sleep infinity
set_network host
add_args --cap-add=NET_ADMIN
[armadillo ~]# podman_start can_example
Starting 'can_example'
73e7dbce86e84eef337bbc5c580a747948b94b87015bb34143da341b8301c16a

図3.91 CAN を扱うためのコンテナ作成例


コンテナ内に入り、ip コマンドで CAN を有効にすることができます。 以下に、設定例を示します。

[armadillo ~]# podman exec -it can_example sh
[container ~]# apk upgrade
[container ~]# apk add iproute2 1
[container ~]# ip link set can0 type can bitrate 125000 2
[container ~]# ip link set can0 up 3
[container ~]# ip -s link show can0 4
4: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT
group default qlen 10
    link/can
    RX: bytes  packets  errors  dropped missed  mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0

図3.92 CAN の設定例


1

CAN の設定のために必要な iproute2 をインストールします。すでにインストール済みの場合は不要です。

2

CAN の通信速度を 125000 kbps に設定します。

3

can0 インターフェースを起動します。

4

can0 インターフェースの現在の使用状況を表示します。

3.6.10. PWM を使用する

3.6.10.1. ハードウェア仕様

「PWM」を参照してください。

3.6.10.2. 使用方法

コンテナ内で動作するアプリケーションから PWM を扱うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側の /sys ディレクトリを渡す必要があります。デフォルト状態でもマウントされてますが、読み取り専用になって使えませんのでご注意ください。 以下は、 /sys を渡して alpine イメージからコンテナを作成する例です。ここで渡された /sys ディレクトリは コンテナ内の同じ /sys にマウントされます。

[armadillo ~]# vi /etc/atmark/containers/pwm_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_volumes /sys
[armadillo ~]# podman_start pwm_example
Starting 'pwm_example'
212127a8885e106e0ef7453545db3c473aef5438f000acf4b33a44d75dcd9e28

図3.93 PWM を扱うためのコンテナ作成例


コンテナ内に入り、/sys/class/pwm/pwmchipN ディレクトリ内の export ファイルに 0 を書き込むことで扱えるようになります。 以下に、/sys/class/pwm/pwmchip0 を扱う場合の動作設定例を示します。

[armadillo ~]# podman exec -it pwm_example sh
[container ~]# echo 0 > /sys/class/pwm/pwmchip0/export 1
[container ~]# echo 1000000000 > /sys/class/pwm/pwmchip0/pwm0/period  2
[container ~]# echo 500000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle 3
[container ~]# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable 4

図3.94 PWM の動作設定例


1

pwmchip0 を export します。

2

周期を 1 秒にします。単位はナノ秒です。

3

PWM の ON 時間 を 0.5 秒にします。

4

PWM 出力を有効にします。

3.6.11. JTAG デバッガを使用する

CON10はJTAGデバッガを接続することのできるJTAGインターフェースです。 信号線はi.MX6ULLのシステムJTAGコントローラ(SJC)に接続されています。

[ティップ]

JTAGのセキュリティ状態はeFuseで変更することが可能です。

[ティップ]

システムJTAGコントローラの詳細につきましては、NXP Semiconductorsのホームページからダウンロード可能な 『i.MX 6ULL Applications Processor Reference Manual』をご参照ください。 モード設定に必要なi.MX6ULLのJTAG_MODピンはCON2(拡張インターフェース)に接続されています。 詳細は、「CON2(LANインターフェース)」を参照してください。

表3.17 CON10 信号配列

ピン番号 ピン名 I/O 説明

1

+3.3V_IO

Power

電源(+3.3V_IO)

2

JTAG_TRST_B

In

テストリセット、i.MX6ULLのJTAG_TRST_Bピンに接続、i.MX6ULL内部で47kΩプルアップ(+3.3V_IO)されています。

3

JTAG_TDI

In

テストデータ入力、i.MX6ULLのJTAG_TDIピンに接続、i.MX6ULL内部で47kΩプルアップ(+3.3V_IO)されています。

4

JTAG_TMS

In

テストモード選択、i.MX6ULLのJTAG_TMSピンに接続、i.MX6ULL内部で47kΩプルアップ(+3.3V_IO)されています。

5

JTAG_TCK

In

テストクロック、i.MX6ULLのJTAG_TCKピンに接続、i.MX6ULL内部で47kΩプルアップ(+3.3V_IO)されています。

6

JTAG_TDO

Out

テストデータ出力、i.MX6ULLのJTAG_TDOピンに接続

7

EXT_RESET_B

In

システムリセット、i.MX6ULLのPOR_Bピンに接続、オープンドレイン入力

8

GND

Power

電源(GND)


3.6.12. LCD を使用する

3.6.12.1. ハードウェア仕様

Armadillo-610 の LCD ホストは、i.MX6ULL のeLCDIF(Enhanced LCD Interface)を利用しています。

「LCD」も合わせて参照してください。

Armadillo-610 開発セットでは、LCDインターフェース(Armadillo-610 拡張ボード: CON11) に LCD オプションセット(7 インチタッチパネル WVGA 液晶)を接続した場合に利用できます。 詳細は「CON11(LCDインターフェース)」を参照してください。

3.6.12.2. ソフトウェア仕様

デバイスファイル
  • /dev/dri/card0 (DRM)
  • /dev/fb0 (フレームバッファ)

3.6.12.3. 使用方法

LCD オプションセット(7 インチタッチパネル WVGA 液晶)を例に説明します。 LCD オプションセット(7 インチタッチパネル WVGA 液晶)の概要については「LCDオプションセット(7インチタッチパネルWVGA液晶)」を参照してください。

図3.95「LCDの接続方法」を参考にし、タッチパネルLCDのCN4の1ピンとArmadillo-610 拡張ボードのCON11の1ピンが対応するように、FFCを接続します。

images/lcd70-assembly.svg

図3.95 LCDの接続方法


images/common-images/ffc-cable.svg

図3.96 フレキシブルフラットケーブルの形状


[警告]

必ず1ピンと1ピンが対応するように、接続してください。 1ピンと50ピンが対応するように接続した場合、電源とGNDがショートし、 故障の原因となります。

「DT overlay によるカスタマイズ」 を行っている場合のみ、DT overlayの設定を行います。 そうでない場合は行う必要はありません。

[armadillo~]# vi /boot/overlays.txt
fdt_overlays=armadillo-640-lcd70ext-l00.dtbo
[armadillo~]# persist_file /boot/overlays.txt
[armadillo~]# reboot

その後の使用方法については「画面表示を行う」を参照してください。

3.6.13. ユーザースイッチを使用する

3.6.13.1. ハードウェア仕様

Armadillo-610 では、GPIOピンを GPIO接続用キーボードドライバ(gpio-keys)に設定することで、スイッチとして使用することが可能です。

Armadillo-610 拡張ボードに搭載されているユーザースイッチには、GPIOが接続されています。 詳細は「SW1(ユーザースイッチ)」を参照してください。

3.6.13.2. ソフトウェア仕様(Armadillo-610 拡張ボードの場合)

Armadillo-610 開発セットの標準状態を例に説明します。

Linuxでは、ユーザー空間でイベント(Press/Release)を検出することができます。 Linuxでは、GPIO接続用キーボードドライバ(gpio-keys)で制御することができます。

ユーザースイッチと信号には、次に示すキーコードが割り当てられています。

表3.18 キーコード

ユーザースイッチ キーコード イベントコード X11 キーコード

SW1

KEY_ENTER

28

Return


デバイスファイル
  • /dev/input/by-path/platform-gpio-keys-event [12]

3.6.13.3. 使用方法

Armadillo-610 拡張ボードにはユーザースイッチが実装されています。これらのスイッチのプッシュ/リリースイベントを取得するためには、 Podman のイメージからコンテナを作成する際にホスト OS 側の /dev/input ディレクトリを渡す必要があります。 以下は、/dev/input を渡して alpine イメージからコンテナを作成する例です。ここで渡された /dev/input ディレクトリは コンテナ内の /dev/input にマウントされます。

[armadillo ~]# vi /etc/atmark/containers/sw_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/input
[armadillo ~]# podman_start sw_example
Starting 'sw_example'
c0cd8b801883266197a3c20552b0e8b6c7dd473bb0b24e05bf3ecdb581c822b9

図3.97 ユーザースイッチのイベントを取得するためのコンテナ作成例


コンテナ内に入り、evtest コマンドでイベントを確認できます。

[armadillo ~]# podman exec -it sw_example sh
[container ~]# apk upgrade
[container ~]# apk add evtest
[container ~]# evtest /dev/input/event0
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 28 (KEY_ENTER)
Properties:
Testing ... (interrupt to exit)
Event: time 1685517999.767274, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0  1
Event: time 1685517999.767274, -------------- SYN_REPORT ------------
Event: time 1685517999.907279, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1  2
Event: time 1685517999.907279, -------------- SYN_REPORT ------------

図3.98 evtest コマンドによる確認例


1

SW1のボタン プッシュ イベントを検出したときの表示

2

SW1のボタン リリース イベントを検出したときの表示

ユーザースイッチ押下などに対して、細かく動作を指定できる buttond という機能があります。 詳細は「ボタンやキーを扱う」を参照してください。

3.6.14. LED を使用する

Armadillo-610 および Armadillo-610 拡張ボードに搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。

3.6.14.1. ハードウェア仕様

Armadillo-610 に搭載されている LED5は、ユーザー側で自由に利用できるLEDです。

表3.19 LED5

部品番号 名称(色) 説明

LED5

ユーザー LED(黄)

i.MX6ULLのUART1_CTS_Bピンに接続、(Low: 消灯、High: 点灯)


Armadillo-610 拡張ボードに搭載されているソフトウェア制御可能な LED については「LED3(ユーザーLED)」を参照してください。

3.6.14.2. ソフトウェア仕様

Linuxでは、GPIO接続用LEDドライバ (leds-gpio) で制御することができます。

sysfs LEDクラスディレクトリ
  • /sys/class/leds/green (LED3)
  • /sys/class/leds/yellow (LED5)

3.6.14.3. 使用方法

Armadillo-610 および Armadillo-610 拡張ボードには LED が実装されています。これらの LED を扱うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側の /sys ディレクトリを渡す必要があります。 以下は、/sys を渡して alpine イメージからコンテナを作成する例です。ここで渡された /sys ディレクトリは コンテナ内の /sys にマウントされます。

[armadillo ~]# vi /etc/atmark/containers/led_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_volumes /sys
[armadillo ~]# podman_start led_example
Starting 'led_example'
c770f76d7714f4cceb1229be2240382bded236c2c51bb6b866bc0098c2cb987a

図3.99 LED を扱うためのコンテナ作成例


コンテナ内に入り、brightness ファイルに値を書き込むことで LED の点灯/消灯を行うことができます。 0 を書き込むと消灯、0 以外の値 (1〜255) を書き込むと点灯します。

[armadillo ~]# podman exec -it led_example sh
[container ~]# echo 0 > /sys/class/leds/red/brightness
[container ~]# echo 1 > /sys/class/leds/red/brightness

図3.100 LED の点灯/消灯の実行例


LEDクラスディレクトリと LED の対応を次に示します。

表3.20 LED クラスディレクトリと LED の対応

LEDクラスディレクトリインターフェースデフォルトトリガ

/sys/class/leds/green/

ユーザーLED緑

default-on

/sys/class/leds/yellow/

ユーザーLED黄

none


3.6.15. RTC を使用する

3.6.15.1. ハードウェア仕様

Armadillo-610のリアルタイムクロックは、i.MX6ULLのRTC機能を利用しています。

また、Armadillo-610 拡張ボードには、日本電波工業(NDK)製 NR3225SA が搭載されています。NR3225SA は、「I2C デバイスを使用する」に示す I2C2 (I2C ノード: 2-0032) に接続されています。

[警告]

LCD インターフェース(Armadillo-610 拡張ボード: CON11)および拡張インターフェース(Armadillo-610 拡張ボード: CON20)には、NR3225SAに接続されたI2Cと共通の信号線が接続されています。そのため、同時に利用できない場合があります。

「リアルタイムクロック」も合わせて参照してください。

機能
  • アラーム割り込みサポート

3.6.15.2. ソフトウェア仕様

デバイスファイル
  • /dev/rtc ( /dev/rtc0 へのシンボリックリンク)
  • /dev/rtc0
  • /dev/rtc1

アラーム割り込みは、デバイスファイル経由で利用することができます。

詳細な情報については、Linux カーネルのソースコードに含まれているドキュメント(Documentation/admin-guide/rtc.rst)やサンプルプログラム(tools/testing/selftests/rtc/rtctest.c)を参照してください。

3.6.15.3. 使用方法

コンテナ内から RTC を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の デバイスファイル /dev/rtcN を渡すと同時に、RTC への時刻の設定を行うための権限も渡す必要があります。 以下は、/dev/rtc0 を渡して alpine イメージからコンテナを作成する例です。権限として SYS_TIME も渡しています。

[armadillo ~]# vi /etc/atmark/containers/rtc_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_args --cap-add=SYS_TIME
add_devices /dev/rtc0
[armadillo ~]# podman_start rtc_example
Starting 'rtc_example'
025209e0d96f43c2911239a8397b7002c3eaab057e031d8abb765df5707d75bd

図3.101 RTC を扱うためのコンテナ作成例


コンテナ内に入り、hwclock コマンドで RTC の時刻表示と設定ができます。

[armadillo ~]# podman exec -it rtc_example sh
[container ~]# hwclock 1
Thu Feb 18 05:14:37 2021  0.000000 seconds
[container ~]# date --set "2021-04-01 09:00:00" 2
Thu Apr  1 09:00:00 UTC 2021
[container ~]# hwclock --systohc 3
[container ~]# hwclock 4
Thu Apr  1 09:00:28 2021  0.000000 seconds

図3.102 hwclock コマンドによるRTCの時刻表示と設定例


1

RTC に設定されている現在時刻を表示します。

2

システム時刻を 2021 年 4 月 1 日 9 時 0 分 0 秒に設定します。

3

システム時刻を RTC に反映させます。

4

RTC に設定されている時刻が変更されていることを確認します。

3.6.16. BT デバイスを使用する

コンテナ内から Bluetooth を扱うには、コンテナ作成時にホストネットワークを使用するために、 NET_ADMIN の権限を渡す必要があります。 図3.103「Bluetooth を扱うコンテナの作成例」に、alpine イメージから Bluetooth を扱うコンテナを作成する例を示します。

[armadillo ~]# vi /etc/atmark/containers/bt_example.conf
set_image docker.io/alpine
set_command sleep infinity
set_network host
add_args --cap-add=NET_ADMIN
[armadillo ~]# podman_start bt_example
Starting 'bt_example'
45fe1eb6b25529f0c84cd4b97ca1aef8451785fc9a87a67d54873c1ed45b70a4

図3.103 Bluetooth を扱うコンテナの作成例


コンテナ内で必要なソフトウェアをインストールして、Bluetooth を起動します。

[armadillo ~]# podman exec -it bt_example sh
[container ~]# apk upgrade
[container ~]# apk add bluez
[container ~]# mkdir /run/dbus
[container ~]# dbus-daemon --system
[container ~]# /usr/lib/bluetooth/bluetoothd &

図3.104 Bluetooth を起動する実行例


これにより、bluetoothctl で Bluetooth 機器のスキャンやペアリングなどが行えるようになります。 以下に、bluetoothctl コマンドで周辺機器をスキャンしてペアリングを行う例を示します。

[container ~]# bluetoothctl
Agent registerd
[..CHG..] Controller XX:XX:XX:XX:XX:XX Pairable: yes
[bluetooth]# power on 1
Changing power on succeeded
[..CHG..] Controller XX:XX:XX:XX:XX:XX Powered: yes
[bluetooth]# scan on 2
Discovery started
[..CHG..] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[..NEW..] Device AA:AA:AA:AA:AA:AA AA-AA-AA-AA-AA-AA
[..NEW..] Device BB:BB:BB:BB:BB:BB BB-BB-BB-BB-BB-BB
[..NEW..] Device CC:CC:CC:CC:CC:CC CC-CC-CC-CC-CC-CC
[..NEW..] Device DD:DD:DD:DD:DD:DD DD-DD-DD-DD-DD-DD
[..NEW..] Device EE:EE:EE:EE:EE:EE EE-EE-EE-EE-EE-EE
[bluetooth]# pair AA:AA:AA:AA:AA:AA 3
[bluetooth]# exit 4
[container ~]#

図3.105 bluetoothctl コマンドによるスキャンとペアリングの例


1

コントローラを起動します。

2

周辺機器をスキャンします。

3

ペアリングしたい機器の MAC アドレスを指定してペアリングします。

4

exit で bluetoothctl のプロンプトを終了します。

3.6.17. Wi-SUN デバイスを扱う

ここでは、Wi-SUN デバイスが UART で接続されている場合の例を示します。 この場合、コンテナ内で動作するアプリケーションから Wi-SUN デバイスで通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttymxcN のうち、 Wi-SUN と対応するものを渡す必要があります。 以下は、/dev/ttymxc1 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/wisun_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttymxc1
[armadillo ~]# podman_start wisun_example
Starting 'wisun_example'
ef9a5a2f7eee4236cb28c1fbf5090a6f0db9d6dfe7f3a34573867e0833dd3122
[armadillo ~]# podman exec -it wisun_example sh
[container ~]# ls /dev/ttymxc1
/dev/ttymxc1

図3.106 Wi-SUN デバイスを扱うためのコンテナ作成例


コンテナ内から、/dev/ttymxc1 を使って Wi-SUN データの送受信ができるようになります。

3.6.18. EnOcean デバイスを扱う

ここでは、EnOcean デバイスが UART で接続されている場合の例を示します。 この場合、コンテナ内で動作するアプリケーションから EnOcean デバイスで通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttymxcN のうち、 EnOcean と対応するものを渡す必要があります。 以下は、/dev/ttymxc1 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/enocean_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttymxc1
[armadillo ~]# podman_start enocean_example
Starting 'enocean_example'
a808b491a100f9078d8c72a7b36966d9182614f3657fe054fb8d7f87b0d4b31c
[armadillo ~]# podman exec -it enocean_example sh
[container ~]# ls /dev/ttymxc1
/dev/ttymxc1

図3.107 EnOcean デバイスを扱うためのコンテナ作成例


コンテナ内から、/dev/ttymxc1 を使って EnOcean データの送受信ができるようになります。

3.6.19. Thread デバイスを扱う

ここでは、Thread デバイスが UART で接続されている場合の例を示します。 この場合、コンテナ内で動作するアプリケーションから Thread デバイスで通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttyACMN や /dev/ttymxcN のうち、 Thread と対応するものを渡す必要があります。 以下は、/dev/ttyACM0 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/thread_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttyACM0
[armadillo ~]# podman_start thread_example
Starting 'thread_example'
a808b491a100f9078d8c72a7b36966d9182614f3657fe054fb8d7f87b0d4b31c
[armadillo ~]# podman exec -it thread_example sh
[container ~]# ls /dev/ttyACM0
/dev/ttyACM0

図3.108 Thread デバイスを扱うためのコンテナ作成例


コンテナ内から、/dev/ttyACM0 を使って Thread データの送受信ができるようになります。

3.7. ソフトウェアの設計

Armadillo-610 を用いた製品のソフトウェア設計は、一般的な組み込み開発と基本的には変わりません。 しかし、 Armadillo Base OS という独自OSを搭載しているため、ソフトウェアの設計には特有のポイントがいくつかあります。 本章では、それらの設計時に考慮すべき Armadillo Base OS 特有のポイントについて紹介していきます。

3.7.1. 開発者が開発するもの、開発しなくていいもの

Armadillo Base OS では、組み込み機器において必要になる様々な機能を標準で搭載しています。

図3.109「開発者が開発するもの、開発しなくていいもの」は、 Armadillo Base OS 搭載製品において、開発者が開発するものと開発しなくていいものをまとめた図です。

images/common-images/development-judge.png

図3.109 開発者が開発するもの、開発しなくていいもの


開発しなくていいものについては設計を考える必要はありません。 開発するものに絞って設計を進めることができます。

3.7.2. ユーザーアプリケーションの設計

Armadillo Base OSでは基本的にユーザーアプリケーションを Podman コンテナ上で実行します。 そのため、実行環境として Armadillo Base OS を意識する必要はありません。

Podmanは、同じくコンテナを扱えるソフトウェアである Docker と基本的に互換性があります。

Docker Hub などから使い慣れたディストリビューションのコンテナイメージを取得して開発することができます。

3.7.3. ログの設計

ユーザーアプリケーションのログは、不具合発生時の原因究明の一助になるため必ず残しておくことを推奨します。

3.7.3.1. ログの保存場所

ユーザーアプリケーションが出力するログは、「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」にも記載があるとおり、 /var/app/volumes/ 以下に配置するのが良いです。

コンテナの中から /var/app/volumes/ ディレクトリにアクセスすることになります。 手順についての詳細は実際に開発を行う箇所にて紹介します。

3.7.3.2. 保存すべきログ

  • Ethernet、LTE、BT、WLANなどのネットワーク系のログ

    一般に不具合発生時によく疑われる箇所なので、最低でも接続・切断情報などのログを残しておくことをおすすめします。

  • ソフトウェアのバージョン

    /etc/sw-versions というファイルが Armadillo Base OS 上に存在します。 これは、 SWUpdate に管理されている各ソフトウェアのバージョンが記録されているファイルです。 このファイルの内容をログに含めておくことで、当時のバージョンを記録することができます。

  • A/B 面どちらであったか

    アップデート後になにか不具合があって、自動的にロールバックしてしまう場合があります。 後でログを確認する際に、当時 A/B 面どちらであったかで環境が大きく変わってしまい解析に時間がかかる場合があるので、どちらの面で動作していたかをログに残しておくことをおすすめします。

    図3.110「現在の面の確認方法」に示すコマンドを実行することで、現在 A/B どちらの面で起動しているかを確認できます。

    [armadillo ~]# abos-ctrl
    rollbackCurrently booted on /dev/mmcblk0p1 1
    : (省略)

    図3.110 現在の面の確認方法


    1

    この実行結果から今の面は/dev/mmcblk0p1であることが分かります。

3.7.4. ウォッチドッグタイマー

Armadillo-610のウォッチドッグタイマーは、i.MX6ULLのWDOG(Watchdog Timer)を利用しています。

ウォッチドッグタイマーは、U-Boot によって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。

何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。

ウォッチドッグタイマーの設定変更は、ioctlシステムコール経由で行うことができます。詳細な情報については、Linux カーネルのソースコードに含まれているドキュメント(Documentation/watchdog/watchdog-api.rst)を参照してください。

[ティップ]

ウォッチドッグタイマーを停止することはできません。

3.8. ネットワーク設定

必要であれば、 Armadillo のネットワークの設定を行います。

3.8.1. ABOS Web とは

Armadillo Base OS(以降、 ABOS) には、 Armadillo と作業用 PC が同一 LAN 内に存在していれば Web ブラウザからネットワークの設定や、 SWU イメージのインストールなどを行うことが可能となる、 ABOS Web という機能があります。 この機能は、バージョン v3.17.4-at.7 以降の ABOS に標準で組み込まれています。

現在、ネットワークに関して ABOS Web で設定できるのは以下のものです。

  • WWAN設定
  • WLAN設定
  • 各接続設定(各ネットワークインターフェースの設定)
  • DHCPサーバー設定
  • NAT設定
  • VPN設定
[ティップ]

ABOS Webで設定できる項目はネットワーク関連以外にもありますが、それらについては「Web UI から Armadillo をセットアップする (ABOS Web)」で紹介します。

LTE モジュールを搭載した Armadillo をお使いで、LTE モジュールによる WWAN 接続でインターネットにアクセスする場合に、Armadillo に LAN で接続した機器から Armadillo をルーターとして利用したい場合には、NAT設定機能が役に立つでしょう。 LTE モジュールによる WWAN 通信でクラウドサービスに接続し、WLAN や LAN で接続した機器から集めたデータをクラウドサービスに転送したり、それらの機器を、クラウドサービスから Armadillo 経由で遠隔制御するようなシステムを構成する場合にご利用ください。

以下では、 ABOS Web を利用した各種ネットワーク設定の方法について紹介します。

3.8.2. ABOS Web へのアクセス

Armadillo と PC を有線 LAN で接続して、Armadillo の電源を入れて PC で Web ブラウザを起動したら、Web ブラウザのアドレスバーに次の URL を入力してください。  https://armadillo.local:58080

[注記]

ABOS Web が動作する Armadillo が、同じ LAN 上に複数あると、ABOS Web に接続する URL のホスト名部分(armadillo.local)は、2台めでは armadillo-2.local、3台めでは armadillo-3.local のように、違うものが自動的に割り当てられます。 どのホスト名が、どの Armadillo のものなのかを判別するのが難しいので、複数台の Armadillo で同時に ABOS Web を動かすときは、LAN に固定 IP アドレスを設定して、IP アドレスで指定できるようにするのがよいでしょう。

また、VSCode 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の ABOS Web を Web ブラウザ で開くことが出来ます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図3.111「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/common-images/abosde_monitor_welcome_page.png

図3.111 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


図3.112「ABOSDE を使用して ABOS Web を開く」 の赤枠で囲われているマークをクリックすることで、 ABOS Web を Web ブラウザで開くことができます。

images/abos-images/abos-web/abosde_monitor_abos_web.png

図3.112 ABOSDE を使用して ABOS Web を開く


図3.113「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図3.113 ABOSDE に表示されている Armadillo を更新する


3.8.3. ABOS Web のパスワード登録

initial_setup.swu の作成」で ABOS Web のログイン用パスワードを設定していない場合、 ABOS Web 初回ログイン時に、 "初回ログイン"のパスワード登録画面が表示されますので、パスワードを設定してください。

images/abos-images/abos-web/new-password.png

図3.114 パスワード登録画面


"初回ログイン"のパスワード登録画面で、"パスワード" フィールドと "パスワード(確認)" フィールドに、登録したいパスワードを入力してから、"登録" ボタンをクリックしてください。 パスワード登録完了画面が表示されたら、パスワード登録の完了です。

images/abos-images/abos-web/new-password_success.png

図3.115 パスワード登録完了画面


パスワード登録完了画面にある "ログインページ" というリンクをクリックすると、ログイン画面が表示されますので、先ほど登録したパスワードを入力して "ログイン" ボタンをクリックしてください。

ABOS Web に対応した Armadillo が正常に起動していれば、Web ブラウザに ABOS Web のログイン画面が表示されます。

images/abos-images/abos-web/login.png

図3.116 ログイン画面


ログイン画面で ABOS Web のパスワードを入力して認証されれば、ABOS Web の設定画面に表示が変わり、設定操作を行うことができます。

images/abos-images/abos-web/top.png

図3.117 トップページ


3.8.4. ABOS Web の設定操作

ABOS Web で Armadillo の動作設定を行うには、ログイン後に表示されるトップページで、設定したい機能へのリンクをクリックしてください。 リンクをクリックすると、リンク先の設定画面が表示されますので、設定画面で、現在の設定内容の確認や設定変更を行ってください。 現在の設定内容を確認するには、"各接続設定"をクリックしてください。 各機能の設定ページへのリンクは、それぞれの設定ページでも、左端にサイドメニュー形式で表示されます。 以後、サイドメニュー形式で表示されたリンクをクリックすることを、「サイドメニューから xxx を選択する」と表記します。 ログイン後に表示されるトップページと、それぞれの設定ページには、左端のサイドメニューに加え、上端右側に、現在の接続状態が表示されます。 現在の接続状態は、WWAN、WLAN、LAN、のそれぞれについて表示されます。 WWAN と WLAN は、それらの通信モジュールが Armadillo に搭載されていなければ、表示されません。

3.8.5. ログアウト

ABOS Web で必要なセットアップを行なったら、サイドメニューから "ログアウト" を選択してログアウトしてください。 ログアウトすると、ログイン画面が再び表示されますので、ABOS Web をすぐに使わないのであれば、Web ブラウザを閉じてください。

3.8.6. WWAN設定

LTE をはじめとする WWAN 通信モジュールを搭載した Armadillo の、WWAN 設定を行います。 この設定画面では、WWAN 接続設定の登録と、WWAN 接続の状態(現在のアドレス情報)の表示、登録済み WWAN 接続設定の編集と削除を行うことができます。 設定項目のうち、"MCC/MNC" は、通常は空欄にしてください。 MCC/MNC 以外の項目を正しく設定しても WWAN 通信が動作しない場合、特に SIM カードがマルチキャリア SIM の場合は、ご契約の通信事業者に MCC/MNM を問い合わせ、通信事業者から提示された MCC/MNC の値を設定してください。 それぞれの入力フィールドに設定値を入力して "接続して保存" ボタンをクリックすると、WWAN 接続の設定を登録して、WWAN 接続動作を実行します。 WWAN 通信設定が行われ、ネットワーク接続が確立した状態では、割当たっている IP アドレスなどを "現在のWWAN接続情報" に表示します。 図3.118「WWAN設定画面」に、WWAN 設定を行った状態を示します。

images/abos-images/abos-web/wwan.png

図3.118 WWAN設定画面


3.8.7. WLAN 設定

無線 LAN モジュールを搭載した Armadillo の、WLAN(無線 LAN)設定を行います。 この設定画面では、WLAN クライアント(子機)としての設定または、WLAN アクセスポイントとしての設定を行うことができます。 クライアントとアクセスポイントのどちらか一方について、接続設定の登録と接続の状態の表示、登録済み設定の削除を行なえます。 クライアントとアクセスポイントのどちらに設定するかは、"動作モード選択"欄で指定します。

クライアント設定とアクセスポイント設定の、それぞれについて、以下に説明します。

3.8.7.1. WLAN 設定(クライアントとしての設定)

"動作モード選択"欄で"クライアントとして使用する"を選択すると、クライアント設定画面が表示されます。 もしアクセスポイントに設定済みの場合は、アクセスポイントの設定を削除してください。 そうしないと、動作モードをクライアントに切り替えることができません。 設定項目のうち、ネットワーク名(SSID) は、リストから選択してください。 WLAN アクセスポイントを Armadillo が何も検出できない場合は、このリストが空になります。 セキュリティ方式も、リストから選択してください。 DHCP と 固定 は、DHCP を選択すると DHCP サーバーから IP アドレスを取得します。 固定 を選択すると、固定 IP アドレス設定用の入力フィールドを表示します。 それぞれの入力フィールドに設定値を入力して "接続して保存" ボタンをクリックすると、WLAN クライアント設定を登録して、WLAN 接続動作を実行します。 WLAN 接続設定が行われ、WLAN 接続が確立した状態では、割当たっている IP アドレスなどを "現在のWLAN接続情報" に表示します。

ABOS-WEB上では複数のネットワーク設定を保存することが可能です。 設定項目のうちにネットワーク情報を入力した後、 "保存" ボタンをクリックすると、入力した内容の登録のみを行い、接続は行いません。 登録した設定の一覧は WLAN ページの中央にあるリストに表示されます。 このリストでは WLAN 設定の接続/編集/削除を行うことができます。 保存した設定に接続先を変更したい場合はリストから選択して、"接続" ボタンをクリックしてください。 保存した設定を編集したい場合はリストから選択して、"設定を編集" ボタンをクリックしてください。 保存した設定を削除したい場合はリストから選択して、"設定を削除" ボタンをクリックしてください。

図3.119「WLAN クライアント設定画面」に、WLAN クライアント設定を行った状態を示します。

images/abos-images/abos-web/wlan_sta.png

図3.119 WLAN クライアント設定画面


登録済み WLAN クライアント設定を削除して、WLAN アクセスポイントとの接続を切断するには、"設定を削除" ボタンをクリックしてください。

3.8.7.2. WLAN 設定(アクセスポイントとしての設定)

"動作モード選択"欄で"アクセスポイントとして使用する"を選択すると、アクセスポイント設定画面が表示されます。 もしクライアントに設定済みの場合は、クライアントの設定を削除してください。 そうしないと、動作モードをアクセスポイントに切り替えることができません。 設定項目のうち、ブリッジアドレス は、WLAN アクセスポイントに割り当てる IP アドレスを入力してください。 サブネットマスク は、アクセスポイントのサブネットのものを入力してください。 使用周波数は、5GHz と 2.4GHz のうち使用するものを選択してください。 両方の周波数を同時に使用することはできません。 使用チャンネルは、リストから選択してください。 SSID と パスワード に入力した値は、アクセスポイントに設定した Armadillo に WLAN 子機を接続する際に使用します。

それぞれの入力フィールドに設定値を入力して "設定" ボタンをクリックすると、WLAN アクセスポイント設定を登録して、WLAN アクセスポイント動作を開始します。 WLAN アクセスポイント設定が行われ、アクセスポイント動作中の状態では、"現在のアクセスポイント情報" に設定内容を表示します。

図3.120「WLAN アクセスポイント設定画面」に、WLAN アクセスポイント設定を行った状態を示します。

images/abos-images/abos-web/wlan_ap.png

図3.120 WLAN アクセスポイント設定画面


[ティップ]

アクセスポイントモードのセキュリティ方式は、WPA2 を使用します。

3.8.8. 各接続設定(各ネットワークインターフェースの設定)

設定されたネットワーク接続の一覧を表示します。表示した接続のそれぞれについて、接続の有効化(「接続」)や無効化(「切断」)、および接続設定内容の編集や削除を行うことができます。 接続の操作を行う時は、操作したい接続をラジオボタンで選択してください。

images/abos-images/abos-web/connection.png

図3.121 現在の接続情報画面


ここで、「ネットワーク接続」は、Linux のネットワーク接続管理機能(NetworkManager)が管理するコネクションです。 ネットワーク接続に対する設定項目の詳細は、NetworkManager のリファレンス(https://developer-old.gnome.org/NetworkManager/stable/nmcli.html)をご覧ください。 接続設定内容を編集したい接続を選択して "設定を編集" ボタンをクリックすると、設定内容の編集画面を表示します。 LAN の接続以外、つまり、WWANと WLAN の接続に対する設定は、"WWAN設定" や "WLAN設定" の設定画面をお使いいただくのが簡単です。

それぞれの接続設定画面では、IPv4 と IPv6 のそれぞれについて、IP アドレスを自動割り当てするかまたは固定 IP アドレスにするかを選択して設定できます。 IP アドレスの割り当ては、デフォルトでは自動割り当てです。 Armadillo を接続した LAN や WLAN で、Armadillo を DHCP サーバーとして運用する場合は、それらのネットワーク接続を固定 IP アドレスに設定してください。

3.8.8.1. LAN 接続設定

LAN 接続の接続名は、デフォルトでは "Wired conneciton 1" です。 LAN ポートを二つ搭載した Armadillo では、二つめの LAN ポートに対応する "Wired connection 2" も有効です。 Armadillo を LAN と WWAN との間で IPv4 ルーターとして運用する場合は、LAN 接続の設定で IPv4 アドレスを固定 IP アドレスに設定して下さい。 図3.122「LAN 接続設定で固定 IP アドレスに設定した画面」に、LAN 接続の設定編集画面で固定 IP アドレスに設定した状態を示します。

images/abos-images/abos-web/connection-setup_lan.png

図3.122 LAN 接続設定で固定 IP アドレスに設定した画面


3.8.8.2. WWAN 接続設定

WWAN 接続の接続名は、デフォルトでは "gsm-ttyCommModem" です。

3.8.8.3. WLAN 接続設定

WLAN 接続の接続名は、デフォルトでは、クライアントモードが "abos_web_wlan"、アクセスポイントモードが "abos_web_br_ap" です。

3.8.9. DHCPサーバー設定

ネットワークインターフェースごとに、接続したネットワーク上で Armadillo を DHCP サーバーとして動作させる設定を行うことができます。 接続済みの DHCP サーバー情報を、画面上部の"現在のDHCP情報"に表示します。 DHCPサーバーの設定を登録する場合は、"DHCP情報入力"欄に設定内容を入力して"設定"ボタンをクリックしてください。 図3.123「eth0 に対する DHCP サーバー設定」に、一つめの LAN ポート(eth0)に対する設定を行った状態を示します。

images/abos-images/abos-web/dhcp.png

図3.123 eth0 に対する DHCP サーバー設定


たとえば、LAN ポートが二つある Armadillo で、それぞれの LAN ポートを異なる LAN に接続して、それぞれの LAN 上で Armadillo を DHCP サーバーとして運用する場合は、eth0 と eth1 に対して DHCP サーバー設定を行ってください。 DHCP サーバー設定を削除するには、"現在のDHCP情報"の一覧で削除したい設定を選択して、"削除"ボタンをクリックしてください。

3.8.10. NAT設定

この設定画面では、ルーター機能での宛先インターフェース設定と、Armadillo を接続した LAN 上の機器用のポートフォワーディング設定を行うことができます。 Armadillo を LAN や WLAN と WWAN との間でルーターとして運用する場合は、NAT設定の宛先インターフェースを WWAN のインターフェースに設定してください。 そして、LAN や WLAN 上の機器を、WWAN 接続したインターネットにサーバーとして公開したい場合は、ポートフォワーディング設定を使ってください。

3.8.10.1. NAT 設定

ルーター機能での宛先インターフェース設定を行なえます。 図3.124「LTE を宛先インターフェースに指定した設定」に、宛先インターフェースに ppp0 を指定した場合の画面を示します。

images/abos-images/abos-web/nat_if_ppp0.png

図3.124 LTE を宛先インターフェースに指定した設定


3.8.10.2. ポートフォワーディング設定

受信インターフェースごとに、ポートフォワーディング設定を登録できます。 図3.125「LTE からの受信パケットに対するポートフォワーディング設定」 に、受信インターフェース ppp0 について、ポート8080番宛の tcp パケットをポートフォワーディングする設定を行った状態を示します。

images/abos-images/abos-web/nat_port_forwarding.png

図3.125 LTE からの受信パケットに対するポートフォワーディング設定


3.8.10.3. VPN設定

Armadillo の VPN 接続設定を行います。 この設定画面では、認証方式や VPN クライアントの設定ファイル、認証用の証明書と鍵の設定を行うことができます。 VPN 接続を設定していれば、現在の接続状態も表示します。 現在の接続状態表示欄にある "接続" ボタンと "切断" ボタンで、VPN 接続の接続と切断を行なえます。 VPN クライアントは、現在 OpenVPN をサポートしています。

図3.126「VPN 設定」に、VPN 接続設定を行った状態を示します。

images/abos-images/abos-web/vpn-setting.png

図3.126 VPN 設定


認証方式は、"ユーザ名とパスワード" と "証明書" のどちらか一方を選択できます。 認証方式が "証明書" の場合、.ovpn ファイルに証明書や鍵が埋め込まれていれば、それらのファイルを指定する必要はありません。

ABOS Web は、VPN 接続を設定する際に abos_web_openvpn という名前のコンテナを自動的に作成し、このコンテナで VPN クライアントを実行します。 VPN 接続動作を実行する時には、進行状況を示すログを表示します。

登録済み VPN 設定を削除して、VPN 接続を切断するには、"設定を削除" ボタンをクリックしてください。

3.8.11. 状態一覧

各設定画面で行った設定の現在状態を、設定ごとに区切って一覧表示します。

3.9. Network Time Protocol (NTP, ネットワーク・タイム・プロトコル) の設定

Armadillo Base OS では chronyd を使っています。

デフォルトの設定(使用するサーバーなど)は /lib/chrony.conf.d/ にあり、 変更用に /etc/chrony/conf.d/ のファイルも読み込みます。 /etc/chrony/conf.d/ ディレクトリに /lib/chrony.conf.d/ と同じファイル名の 設定ファイルを置いておくことで、デフォルトのファイルを読まないようになります。

例えば、 NTP サーバーの設定は servers.conf に記載されてますので、変更する際は /etc/chrony/conf.d/servers.conf に記載します:

[armadillo ~]# vi /etc/chrony/conf.d/servers.conf 1
pool my.ntp.server iburst
[armadillo ~]# persist_file /etc/chrony/conf.d/servers.conf 2
[armadillo ~]# rc-service chronyd restart 3
chronyd          | * Stopping chronyd ... [ ok ]
chronyd          | * Starting chronyd ... [ ok ]
armadillo:~# chronyc sources 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? my.ntp.server                 1   6     3     2    +88ms[  +88ms] +/-  173ms

図3.127 chronyd のコンフィグの変更例


1

コンフィグファイルを作成します。

2

ファイルを保存します。

3

chronyd サービスを再起動します。

4

chronyc で新しいサーバーが使用されていることを確認します。

3.10. CUI アプリケーションの開発

ここではシェルスクリプトおよび Python を使った CUI アプリケーションの開発方法を紹介します。 開発手順としてはシェルスクリプトと Python で同じであるため、シェルスクリプトの場合の例で説明します。

3.10.1. CUI アプリケーション開発の流れ

Armadillo 向けに CUI アプリケーションを開発する場合の流れは以下のようになります。

images/common-images/flutter_dev_cycle.svg

図3.128 CUI アプリケーション開発の流れ


3.10.2. ATDE 上でのセットアップ

ここでは、開発開始時の ATDE 上でのセットアップ手順について説明します。 ATDE をお使いでない場合は、先に 「開発の準備」 を参照して ATDE 及び、 VSCode のセットアップを完了してください。

3.10.2.1. プロジェクトの作成

VSCode の左ペインの [A600] から [Shell New Project] を実行し、表示されるディレクトリ選択画面からプロジェクトを保存する ディレクトリを選択してください。実行するためには右に表示されている三角形ボタンを押してください。 Python の場合は [Python New Project] を実行してください。 保存先を選択すると、プロジェクト名を入力するダイアログが表示されるので、任意のプロジェクト名を入力してエンターキーを押してください。 ここでは、ホームディレクトリ直下に my_project として保存しています。

images/common-images/cui_vscode_new_project.png

図3.129 プロジェクトを作成する


images/common-images/flutter_vscode_project_name.png

図3.130 プロジェクト名を入力する


3.10.3. アプリケーション開発

3.10.3.1. VSCode の起動

ここでは、実際に Armadillo 上でサンプルアプリケーションを起動する場合の手順を説明します。 プロジェクトディレクトリへ移動し VSCode を起動します。

[ATDE ~]$ code ./my_project

図3.131 VSCode で my_project を起動する


3.10.3.2. ディレクトリ構成

プロジェクトには下記のディレクトリがあります。

  • app: アプリケーションのソースです。Armadillo ではビルドしたアプリケーションが /var/app/rollback/volumes/my_project にコピーされます。
  • config: 設定ファイルです。各ファイルが設定するものは以下のとおりです

  • container: スクリプトを実行するコンテナの設定ファイルです。 packages.txt に記載されているパッケージがインストールされます。 Dockerfile を直接編集することも可能です。

デフォルトのコンテナコンフィグでは appsrc/main.sh または Python の場合に src/main.py を実行しますので、リネームが必要な場合にコンテナのコンフィグも修正してください。

このサンプルアプリケーションは、CPU と SOC の温度を /vol_data/log/temp.txt に出力し、 LED3 を点滅させます。

3.10.3.3. 初期設定

初期設定では主に Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。

作成したプロジェクトディレクトリへ移動して VSCode を起動してください。

[ATDE ~]$ cd my_project
[ATDE ~/my_project]$ code ./

図3.132 初期設定を行う


VSCode の左ペインの [my_project] から [Setup environment] を実行します。

images/common-images/cui_vscode_setup_environment.png

図3.133 VSCode で初期設定を行う


選択すると、 VSCode の下部に以下のようなターミナルが表示されます。

images/common-images/flutter_vscode_terminal.png

図3.134 VSCode のターミナル


このターミナル上で以下のように入力してください。

 *  Executing task: ./scripts/setup_env.sh

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 1
Enter same passphrase again: 2
Your identification has been saved in /home/atmark/.ssh/id_ed25519_vscode
:(省略)

 *  Terminal will be reused by tasks, press any key to close it.  3

図3.135 SSH 用の鍵を生成する


1

パスフレーズを設定します。設定しない場合は何も入力せず Enter を押します。

2

1 でパスフレーズを設定した場合は、確認のため再度入力してください。

3

ここで何か任意のキーを押すとターミナルが閉じます。

パスフレーズを設定した場合は、アプリケーションを Armadillo へ転送する時にパス フレーズの入力を求められることがあります。

[ティップ]

ssh の鍵は $HOME/.ssh/id_ed25519_vscode (と id_ed25519_vscode.pub ) に保存されていますので、 プロジェクトをバックアップする時は $HOME/.ssh も保存してください。

3.10.3.4. アプリケーション実行用コンテナイメージの作成

Armadillo 上でアプリケーションを実行するためのコンテナイメージを作成します。 ここで作成したコンテナイメージは SWU イメージを使用して Armadillo へインストールするため、 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

コンテナイメージの作成および SWU イメージの作成も VSCode で行います。 VSCode の左ペインの [my_project] から [Generate development swu] を実行します。

images/common-images/cui_vscode_build_dev_image.png

図3.136 VSCode でコンテナイメージの作成を行う


コンテナイメージの作成にはしばらく時間がかかります。 VSCode のターミナルに以下のように表示されるとコンテナイメージの作成は完了です。

コンテナイメージを ./swu/my_project.tar に保存しました。
./swu/app.desc のバージョンを 1 から 2 に変更しました。
./development.swu を作成しました。
次は Armadillo に ./development.swu をインストールしてください。
 *  Terminal will be reused by tasks, press any key to close it.

図3.137 コンテナイメージの作成完了


作成した SWU イメージは my_project ディレクトリ下に development.swu という ファイル名で保存されています。

3.10.4. Armadillo 上でのセットアップ

3.10.4.1. アプリケーション実行用コンテナイメージのインストール

「アプリケーション実行用コンテナイメージの作成」 で作成した development.swu「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に自動で Armadillo が再起動します。

3.10.4.2. ssh 接続に使用する IP アドレスの設定

VSCode 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の IP アドレスを ssh 接続に使用することができます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図3.138「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/common-images/abosde_monitor_welcome_page.png

図3.138 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


図3.139「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックすることで、 指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。

images/common-images/abosde_monitor_set_ip.png

図3.139 ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する


図3.140「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、 ABOSDE に表示されている Armadillo を更新することができます。

images/common-images/abosde_monitor_rescan.png

図3.140 ABOSDE に表示されている Armadillo を更新する


ATDE のネットワークを NAT に設定している場合や、ABOS Web を起動していない場合等、 ABOSDE のリストに Armadillo が表示されない場合は、 プロジェクトディレクトリに入っている config/ssh_config ファイルを編集して IP アドレスを書き換えてください。

[ATDE ~/my_project]$ code config/ssh_config
Host Armadillo
    Hostname x.x.x.x 1
    User root
    IdentityFile ${HOME}/.ssh/id_ed25519_vscode
    UserKnownHostsFile config/ssh_known_hosts
    StrictHostKeyChecking accept-new

図3.141 ssh_config を編集する


1

Armadillo の IP アドレスに置き換えてください。

[ティップ]

Armadillo を初期化した場合や、プロジェクトを実行する Armadillo を変えた場合は, プロジェクトの config/ssh_known_hosts に保存されている公開鍵で Armadillo を認識できなくなります。 その場合はファイルを削除するか、「Setup environment」タスクを再実行してください。

3.10.4.3. アプリケーションの実行

VSCode の左ペインの [my_project] から [App run on Armadillo] を実行すると、 アプリケーションが Armadillo へ転送されて起動します。

images/common-images/cui_vscode_run_armadillo.png

図3.142 Armadillo 上でアプリケーションを実行する


VSCode のターミナルに以下のメッセージが表示されることがあります。 これが表示された場合は yes と入力して下さい。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

図3.143 実行時に表示されるメッセージ


アプリケーションを終了するには VSCode の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

images/common-images/cui_vscode_stop_armadillo.png

図3.144 アプリケーションを終了する


3.10.5. リリース版のビルド

ここでは完成したアプリケーションをリリース版としてビルドする場合の手順について説明します。

VSCode の左ペインの [my_project] から [Generate release swu] を実行すると、 リリース版のアプリケーションを含んだ SWU イメージが作成されます。 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

images/common-images/cui_vscode_make_swu_image.png

図3.145 リリース版をビルドする


3.10.6. 製品への書き込み

作成した SWU イメージは my_project ディレクトリ下に release.swu というファイル名で保存されています。

この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールすると、 Armadillo 起動時にアプリケーションも自動起動します。

3.10.7. Armadillo 上のコンテナイメージの削除

development.swu または release.swu を Armadillo にインストールすることで保存されたコンテナイメージを削除する方法は、 「VSCode から実行する」 を参照してください。

3.11. システムのテストを行う

Armadillo 上で動作するシステムの開発が完了したら、製造・量産に入る前に開発したシステムのテストを行ってください。

テストケースは開発したシステムに依ると思いますが、 Armadillo で開発したシステムであれば基本的にテストすべき項目について紹介します。

3.11.1. ランニングテスト

長期間のランニングテストは実施すべきです。

ランニングテストで発見できる現象としては、以下のようなようなものが挙げられます。

  • 長期間稼働することでソフトウェアの動作が停止してしまう

    開発段階でシステムを短い時間でしか稼働させていなかった場合、長期間ランニングした際になんらかの不具合で停止してしまう可能性が考えられます。

    開発が完了したら必ず、長時間のランニングテストでシステムが異常停止しないことを確認するようにしてください。

    コンテナの稼働情報は podman stats コマンドで確認することができます。

  • メモリリークが発生する

    アプリケーションのなんらかの不具合によってメモリリークが起こる場合があります。

    また、運用時の Armadillo は基本的に overlayfs で動作しています。 そのため、外部ストレージやボリュームマウントに保存している場合などの例外を除いて、動作中に保存したデータは tmpfs (メモリ)上に保存されます。 よくあるケースとして、動作中のログなどのファイルの保存先を誤り、 tmpfs 上に延々と保存し続けてしまうことで、メモリが足りなくなってしまうことがあります。

    長時間のランニングテストで、システムがメモリを食いつぶさないかを確認してください。

    メモリの空き容量は図3.146「メモリの空き容量の確認方法」に示すように free コマンドで確認できます。

    [armadillo ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G      327.9M        1.5G        8.8M       97.4M        1.5G
    Swap:       1024.0M           0     1024.0M

    図3.146 メモリの空き容量の確認方法


3.11.2. 異常系における挙動のテスト

開発したシステムが、想定した条件下で正しく動作することは開発時点で確認できていると思います。 しかし、そのような正常系のテストだけでなく、正しく動作しない環境下でどのような挙動をするのかも含めてテストすべきです。

よくあるケースとしては、動作中に電源やネットワークが切断されてしまった場合です。

電源の切断時には、 Armadillo に接続しているハードウェアに問題はないか、電源が復旧した際に問題なくシステムが復帰するかなどをよくテストすると良いです。

ネットワークの切断時には、再接続を試みるなどの処理が正しく実装されているか、 Armadillo と サーバ側でデータなどの整合性が取れるかなどをよくテストすると良いです。

この他にもシステムによっては多くの異常系テストケースが考えられるはずですので、様々な可能性を考慮しテストを実施してから製造・量産ステップに進んでください。



[4] バージョン3.xまではPUEL(VirtualBox Personal Use and Evaluation License)が適用されている場合があります。

[5] 特権ユーザーでGUIログインを行うことはできません

[6] Armadillo-400 シリーズLCD オプションセットのLCD拡張ボードの回路図も合わせてご確認ください。

[7] Armadillo-610 リファレンス回路図、部品表は購入者向けの限定データです。

[8] eFUSEでeMMCからの起動を禁止した場合を除きます

[9] T1: 任意のタイミング

[10] SNVS_LP:低消費電力ドメインです。詳細につきましては、NXP Semiconductorsのホームページからダウンロード可能な『i.MX 6ULL Applications Processor Reference Manual』をご参照ください。

[12] USBキーボードなどを接続してインプットデバイスを追加している場合は、番号が異なる可能性があります