Intel Quark D2000 Zephyr BMC150

Intel Quark Microcontroller Dev Kit D2000には、ボード上にBOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。
https://www.bosch-sensortec.com/bst/products/all_products/bmc150
BMC150は、I2CとSPIで接続できますが、D2000とは、I2Cで接続されています。SPピンのレベルでインターフェースの毛帝をします。Kitは、SPピンがプルアップされているのでI2Cとなります。
今回は、ZephyrのI2C APIを使って接続します。
I2Cのアドレスもピン設定で2種類選択できます。SDOピンをGNDレベルにすると加速度センサのアドレスが0x10、磁気センサのアドレスが0x12となります。SDOピンをVDDレベルにすると加速度センサのアドレスが0x11、磁気センサのアドレスが0x13となります。この設定は、J1ジャンパーで切り替えられます。J1をオープンにするとSDOがGNDにプルダウンされ、加速度センサのアドレスが0x10、磁気センサのアドレスが0x12となります。J1をクローズするとSDOがVDDにつながり、加速度センサのアドレスが0x11、磁気センサのアドレスが0x13となります。
今回は、J1はオープンのまま使用します。
I2Cの使用方法は、Zephyrのサンプルにあるi2c_lsm9ds0を利用しました。APIのリファレンスは以下にあります。
http://docs.zephyrproject.org/api/io_interfaces.html#i2c-interface
Zhephyrのサンプルの中にBMC150はありませんが、QMSI側にBMC150のサンプルAccelerometerがあります。これも参考にしました。
I2Cの初期化はそのまま使用できます。
cfg.raw = 0;
cfg.bits.use_10_bit_addr = 0;
cfg.bits.speed = I2C_SPEED_STANDARD;
cfg.bits.is_master_device = 1;

dev = device_get_binding(“I2C_0”);
if (!dev) {
printk(“I2C0: Device not found.\n”);
return;
}

if (i2c_configure(dev, cfg.raw) != 0) {
printk(“Error on i2c_configure()\n”);
return;
}

I2Cの読み書きは、以下の関数で行えます。
i2c_write(dev, &data, sizeof(data), ADDR) ;
i2c_read(dev, &data, sizeof(data), ADDR) ;
次にBMC150から温度の取得を行ってみたいと思います。

Intel Quark D2000 Zephyr UART BY INTERRUPT

UART_Aが使用できるようになりましたが、割り込みを使用した方が、効率が良いので割り込みを使ってみます。

プロジェクトのprj.confファイルで周辺機器の設定を行います。

CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_QMSI_0=y
CONFIG_UART_QMSI_0_HW_FC=n
CONFIG_UART_QMSI_0_BAUDRATE=57600

割り込みの設定CONFIG_UART_INTERRUPT_DRIVENをyにします。その他は、前と一緒です。

uart0_init(void)初期化関数で
uart_irq_callback_set(uart0_dev, uart0_isr);
割り込み関数uart0_isrを登録します。
uart_irq_rx_enable(uart0_dev);
次に受信割り込みを有効にします。

受信が入るとこの関数が呼ばれます。
static void uart0_isr(struct device *x);

int len = uart_fifo_read(uart0_dev, rx_buf, BUF_MAXSIZE);
受信データをバッファに読み出します。最後に受信文字を送信します。ループバックのサンプルになっています。

以下にサンプルがあります。
https://github.com/jendo1969/d2000/tree/master/UARTint

Intel Quark D2000 Zephyr UART

UART_Aを使用しようと思いましたが、
Zephyrには、サンプルがありません。
探したところ、以下のURLを参考にしました。
https://lists.linuxfoundation.org/pipermail/zephyr-users/2017-January/000537.html

プロジェクトのprj.confファイルで使用する周辺機器の有効無効が設定できます。

CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_UART_QMSI_0=y
CONFIG_UART_QMSI_0_HW_FC=n
CONFIG_UART_QMSI_0_BAUDRATE=57600

ここでは、シリアルを使用し、割り込みは使用しない設定です。
UART_Aを使用する。
ハードウェアのハンドシェイクは行わない。
通信速度は、57600bpsとするとなっています。

通信確認にはFTDIのUSB・シリアル変換ケーブル(3.3V)を使用しました。
http://akizukidenshi.com/catalog/g/gM-05840/
これでArduinoのシールドでUARTが使用できるようになりました。サンプルは、ただ、aを送るだけのコードです。

サンプルは以下にあります。
https://github.com/jendo1969/d2000/tree/master/UART

Intel Quark D2000 Zephyr Blinky

Zephyr OSでサンプルを動かします。ISSMを起動し、
Project for Micro controllersで新しいプロジェクトを作ります。
Select a developer boardで
Intel Quark D2000 Developer Boardを選択します。
次にSelect firmwareで
Zephyr Project「[1.7.0]
を選択します。

Select a platform configuration画面はそのまま進めます。

次にサンプルを選択します。
ここでBasicのBlinkyを選択します。
BuildしてデバッグするとD2000のボード上のLEDが1秒間隔で点滅します。

周辺機器は、ライブラリ化されてるので初期化など関数化され
非常に短いコードになっています。
このサンプルでは、OSに関係する関数は、k_sleep()くらいです。

Intel Quark D2000 Getting Started

開発環境のIntel® System Studio for Microcontrollers(ISSM)を起動するとGetting Startedが表示されます。
https://software.intel.com/en-us/node/651119
https://software.intel.com/en-us/node/651138
1.Update ROM Image on your device
2.Create a project with the “LED_ Blink” sample project file
3.Build and deploy your project
4. Begin the Accelerometer Tutorial
まずは、1から3番を行い、LEDの点滅を確認しました。


まずROMのアップデートをします。

完了するとメッセージが表示されます。

LED_Blinkを読み込みます。あとは、ビルドとデバッグができます。通常のECLIPSEの使い方と同じなので特に戸惑うことはありません。

目標は、Zephyr OSを使用するのでQMSIは、ここまでとします。

Intel Quark Microcontroller Dev Kit D2000

RTOSのZephyrが使えるということでIntel Quark Microcontroller Dev Kit D2000を購入しました。
http://akizukidenshi.com/catalog/g/gM-10487/

IntelのマイクロコントローラD2000を搭載した開発ボードです。32bit、x86ベースの命令セットを持っています。動作周波数は、32MHzで、周辺機器にSPI、I2C、GPIO、コンパレータ、ADC、PWM、DMA、UART、Timerを持っています。ほかに6軸のコンパス、加速度センサと温度センサを兼ねたBosch製のBMC150を搭載しています。

基板のほかにマイクロUSBケーブルが付属しています。
USBは、電源とプログラム書き込み、デバッガに使用します。Arduinoコネクタを有していますが開発環境にArduino IDEは使用できません。開発環境は、Intel® System Studio for Microcontrollers(ISSM)というEclipseベースのIDEを使用します。GCCを使用したC言語での開発となります。
ISSMは、以下のサイトから無償でダウンロードできます。
https://software.intel.com/en-us/intel-system-studio-microcontrollers/download
本ボードは、Zephyr OSを使用するほかにQMSIというドライバライブラリを使用した開発も可能です。

Zephyr RTOS Install 2

Ububtuが起動出来たら、LINUXのインストール方法を
Development Environment Setup on Linux
http://docs.zephyrproject.org/getting_started/installation_linux.html#installation-linux
Ubuntu 16.04 LTS 64-bit
を使用した手順でZephyrをインストールします。
まず、Ubuntuをアップグレードします。
$ sudo apt-get update
$ sudo apt-get upgrade

次に開発環境をインストールする。
$ sudo apt-get install –no-install-recommends git cmake ninja-build gperf \
ccache doxygen dfu-util device-tree-compiler \
python3-ply python3-pip python3-setuptools xz-utils file

CMakeのバージョンが3.8.2+ より高い必要があります。以下の
手順でバージョンの確認をします。
$ mkdir $HOME/cmake && cd $HOME/cmake
$ wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh
$ yes | sh cmake-3.8.2-Linux-x86_64.sh | cat
$ echo “export PATH=$PWD/cmake-3.8.2-Linux-x86_64/bin:\$PATH” >> $HOME/.zephyrrc
$ source <zephyr git clone location>/zephyr-env.sh
$ cmake –version

次にZephyr Software Development Kitをインストールします。
まずダウンロードします。 Zephyr SDK archiveにダウンロード可能なアーカイブが確認できます。
wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.2/zephyr-sdk-0.9.2-setup.run

$ sh zephyr-sdk-0.9.2-setup.run
を実行してzephyr-sdkをインストールします。

インストール後、
$ export ZEPHYR_GCC_VARIANT=zephyr
$ export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk

※ /opt/zephyr-sdkこの部分は、インストールディレクトリです。
デフォルトがこのディレクトリです。

次にソースコードをインストールします。
$ git clone https://github.com/zephyrproject-rtos/zephyr.git

次にソースをインストールしたフォルダに移動します。
$ cd zephyr

プロジェクト環境変数を設定します。
$ source zephyr-env.sh

次に必要なpythonライブラリをインストールします。
$ pip3 install –user -r scripts/requirements.txt

サンプルプログラムのフォルダに移動します。
cd $ZEPHYR_BASE/samples/hello_world

まずは、qemu向けのビルドをします。
$ make BOARD=qemu_x86
エラーが出なければ成功です。

$ make BOARD=qemu_x86 run
エミュレータ上で実行されます。
Hello Zephyr! Hello World! x86
が表示されました。

以下にサンプルの記載があります。
http://docs.zephyrproject.org/samples/hello_world/README.html

Zephyr RTOS Install 1

IntelのIoT戦略がかわりEdisonが廃止になりました。
AtomとCurieがSoCのラインナップからはずれ、マイコンのQuarkだけが残っています。
Intel Quark? D2000マイクロコントローラ開発キットでは、RTOS Zephyrが使用できるようです。
https://www.zephyrproject.org/
まず、Getting Started Guideをやってみたいと思います。
http://docs.zephyrproject.org/getting_started/getting_started.html
Windows10では、Windows Subsystem for Linuxが使用でき、Ubuntuがインストールできて
そこでZephyrの開発ができるようです。
http://docs.zephyrproject.org/getting_started/installation_win.html
Using Windows 10 WSL (Windows Subsystem for Linux)
この項目に沿って進めました。

https://msdn.microsoft.com/en-us/commandline/wsl/install-win10
まずは、Windows Subsystem for Linuxをインストールします。
管理者権限でPowerShellを開きます。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
このコマンドを実行します。
その後、再起動します。起動後、 Windows Storeに行き、Ubuntuをインストールします。
https://www.microsoft.com/ja-JP/store/p/ubuntu/9nblggh4msv6?rtc=1
Ubuntuを起動するのには、Windows10の更新が必要な場合があります。
起動すると、ユーザ名とパスワードの入力を求められます。
その後は、普通にUbuntuとして動きます。

Android Things – BLE

EdisonでAndroid Thingsをやっています。
http://akizukidenshi.com/catalog/g/gM-08571/
今回、preview-0.3からpreview-0.4.1にアップしました。Edisonは、ディスコンになったので、Android Thingsでは、すでにレガシー扱いです。

今回は、Bluetooth  LEを試してみました。サンプル(sample-bluetooth-le-gattserver)が用意されているのでこれを改造しました。
https://github.com/androidthings/sample-bluetooth-le-gattserver
サンプルはTimeProfileなので、そこにUUIDを1個追加して、数値を読みだしてみました。
AndroidのAndroid BluetoothLeGatt clientサンプルのandroid-BluetoothLeGattをして試しました。
https://github.com/googlesamples/android-BluetoothLeGatt
100という数値が読み出しできました。

ESP-WROOM-02 ARDUINO USE

interface 7月号の500円wifiでの記事を実践しています。
http://www.kumikomi.net/interface/contents/201707.php
ESP-WROOM-02をArduinoマイコンとして使ってみました。
http://akizukidenshi.com/catalog/g/gK-09758/
スケッチ書き込み用のUSB-USART変換には、HiLetgo FTDI FT232RL 3.3V 5.5V USB to TTL シリアル コンバーター アダプター モジュール for Arduinoを使用しました。
https://www.amazon.co.jp/HiLetgo-FT232RL-%E3%82%B3%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BF%E3%83%BC-%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC-Arduino/dp/B011QQJ034/ref=pd_sim_21_24?_encoding=UTF8&psc=1&refRID=BR9H455Y1XBDSGKT9EF4
格安で不安でしたが、Windows10で問題なく使用できました。

Arduino IDEを以下のURLからダウンロードしています。
https://www.arduino.cc/en/Main/Donate

LEDの点滅スケッチの書き込みができました。
RSTとDTR信号でリセットと書き込みモードを制御しているのでIDEには、メニューのツール→Reset Methodをnodemcuに設定する必要があります。ckのままでは書き込みが失敗します。

© 2014 Spineedge Corporation.

組込み技術向上のため、エンベデッドに関する話題中心のブログです。