« Nucleo-MicroPythonにGrove-RTC(i2c)を接続する | トップページ | Teensy4.0にCircuitPythonをインストールする »

2020年3月15日 (日)

NUCLEO-F446REにMicropythonをインストールする(v2)

2020/4/11
書き込み方法をst-flash(st-link)に変更した。
2020/3/15
初版

NUCLEO F446RE MicroPython Install(v2)

NUCLEO F446RE MicroPython Install(v2)

概要

「NUCLEO F446RE」にMicropythonをインストールする方法について記載する (ホストPCとしてはubuntuを想定している)

事前準備

(1)書き込みツール(st-flash)のインストール

sudo apt install cmake sudo apt install libusb-1.0 git clone https://github.com/texane/stlink.git cd stlink make cd build/Release sudo make install sudo ldconfig # インストール確認 st-flash --version #以下のように出力されればOK(数字などはバージョンによって異なる) v1.6.0-154-g99a8aaa

(2)ampyのインストール
AMPY_PORTは、自分の環境に合わせる。

pip install adafruit-ampy export AMPY_PORT=/dev/ttyACM0 export AMPY_BAUD=115200

(3)picocomのインストール

sudo apt-get install picocom

以上のうち、exportしているものは、.bashrcに登録することを勧める。

コンパイラのバージョンアップ

以下でインストールしたコンパイラが古くてビルドエラーが出たのでバージョンアップする。
sudo apt-get install gcc-arm-none-eabi

(1)以下のurlから最新版をダウンロードする:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

解凍したものを以下のフォルダに置く:
$HOME/Downloads/gcc-arm-none-eabi-8-2019-q3-update

(2)パス設定
#古いコンパイラを削除する
sudo apt-get remove gcc-arm-none-eabi
#パスを設定する
export PATH=$PATH:$HOME/Downloads/gcc-arm-none-eabi-8-2019-q3-update/bin

ビルド手順

以下の手順で行なう:

mkdir mp_nucleo cd mp_nucleo git clone https://github.com/micropython/micropython.git # Patch #<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< I2C関係のピンアサインにバグがいるので Micropython/ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.h を以下のように修正する: // I2C busses #define MICROPY_HW_I2C1_SCL (pin_B6) // Arduino D10, pin 17 on CN10 #define MICROPY_HW_I2C1_SDA (pin_B7) // pin 21 on CN7 ↓以下のように修正する // I2C busses (same as NUCLEO_F401RE) #define MICROPY_HW_I2C1_SCL (pin_B8) // Arduino D15, pin 3 on CN10 #define MICROPY_HW_I2C1_SDA (pin_B9) // D14, pin 5 on CN10 #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cd micropython cd mpy-cross make cd .. cd ports/stm32 make submodules make BOARD=NUCLEO_F446RE arm-none-eabi-objcopy -O binary build-NUCLEO_F446RE/firmware.elf build-NUCLEO_F446RE/firmware.bin ls -l build-NUCLEO_F446RE/firmware.* -rwxrwxr-x 1 komatsu komatsu 414672 4月 11 17:44 build-NUCLEO_F446RE/firmware.bin -rw-rw-r-- 1 komatsu komatsu 298629 4月 11 17:22 build-NUCLEO_F446RE/firmware.dfu -rwxrwxr-x 1 komatsu komatsu 687096 4月 11 17:22 build-NUCLEO_F446RE/firmware.elf -rw-rw-r-- 1 komatsu komatsu 839158 4月 11 17:22 build-NUCLEO_F446RE/firmware.hex -rw-rw-r-- 1 komatsu komatsu 1391080 4月 11 17:22 build-NUCLEO_F446RE/firmware.map

書き込み手順

上でビルドしたbinをst-flashで書き込む

st-flash write build-NUCLEO_F446RE/firmware.bin 0x8000000 #出力例: st-flash 1.6.0 2020-04-11T18:47:26 INFO common.c: Loading device parameters.... 2020-04-11T18:47:26 INFO common.c: Device connected is: F446 device, id 0x10006421 2020-04-11T18:47:26 INFO common.c: SRAM size: 0x20000 bytes (128 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 131072 bytes 2020-04-11T18:47:26 INFO common.c: Attempting to write 414672 (0x653d0) bytes to stm32 address: 134217728 (0x8000000) Flash page at addr: 0x08060000 erasedEraseFlash - Sector:0x7 Size:0x20000 2020-04-11T18:47:34 INFO common.c: Finished erasing 8 pages of 131072 (0x20000) bytes 2020-04-11T18:47:34 INFO common.c: Starting Flash write for F2/F4/L4 2020-04-11T18:47:34 INFO flash_loader.c: Successfully loaded flash loader in sram enabling 32-bit flash writes size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 21456 2020-04-11T18:47:40 INFO common.c: Starting verification of write complete 2020-04-11T18:47:44 INFO common.c: Flash written and verified! jolly good!

動作確認

picocomを使いボードとシリアルで通信する。 以下、通信例:

$ picocom /dev/ttyACM0 -b115200 >>> import os >>> os.uname() (sysname='pyboard', nodename='pyboard', release='1.12.0', version='v1.12-256-geae495a-dirty on 2020-03-15', machine='NUCLEO-F446RE with STM32F446xx') >>> >>> list(5 * x + y for x in range(10) for y in [4, 2, 1]) [4, 2, 1, 9, 7, 6, 14, 12, 11, 19, 17, 16, 24, 22, 21, 29, 27, 26, 34, 32, 31, 39, 37, 36, 44, 42, 41, 49, 47, 46] >>> # パッチ確認 # 以下のようにi2c.scan()で接続しているデバイスのアドレスが出力されればOK # F446RE >>> from machine import I2C >>> i2c=I2C(1) >>> i2c.scan() [104] # Grove-RTC >>> >>> import gc >>> gc.collect() >>> gc.mem_free() 92192 >>> >>> help('modules') __main__ math ucollections urandom _onewire micropython uctypes ure builtins network uerrno uselect cmath onewire uhashlib usocket dht pyb uheapq ustruct framebuf stm uio utime gc sys ujson utimeq lcd160cr uarray umachine uzlib lcd160cr_test ubinascii uos Plus any modules on the filesystem >>>

ampy実行例

$ ampy -p /dev/ttyACM0 ls /flash $ ampy -p /dev/ttyACM0 ls /flash /flash/boot.py /flash/main.py ampy -p /dev/ttyACM0 get /flash/boot.py # boot.py -- run on boot-up # can run arbitrary Python, but best to keep it minimal import machine import pyb pyb.country('US') # ISO 3166-1 Alpha-2 code, eg US, GB, DE, AU #pyb.main('main.py') # main script to run after this one $ ampy -p /dev/ttyACM0 get /flash/main.py # main.py -- put your code here!

サンプルスクリプト

blink.py

while True: # LED(1) // Green LED on board pyb.LED(1).on() pyb.delay(1000) pyb.LED(1).off() pyb.delay(250)

cpuが同じこともあり、pyboardと同じボードと見做されているようだ。

実行例:

$ ampy -p /dev/ttyACM0 run blink.py

この場合、flashにスクリプトを書き込まずに直接RAMで実行される。

ボードの電源オンで直接スクリプトを実行する場合は
以下のようにする。(blink.pyをmain.pyに上書きする)

$ ampy -p /dev/ttyACM0 put blink.py /flash/main.py

この書き込み後、リセットボタンを押すか、またはUSBコネクタを抜き差しすると、自動的にスクリプトが動作する。

参照URL

Turtorial Examples for Nucleo-MicroPython

The MicroPython project
STM32 Nucleo Board STM32F446RE
Quick reference for the pyboard ampyを用いたMicroPythonのファイル操作とプログラム実行
MicroPython pyboard v1.1
新しいボードへMicroPythonを対応させる方法をざっくり解説

以上

|

« Nucleo-MicroPythonにGrove-RTC(i2c)を接続する | トップページ | Teensy4.0にCircuitPythonをインストールする »

linux」カテゴリの記事

MicroPython」カテゴリの記事

Nucleo」カテゴリの記事

コメント

この記事へのコメントは終了しました。