Renesas RA 用クイックリファレンス

Renesas Evaluation Kit for RA6M2 MCU Group

Renesas EK-RA6M2 ボード

以下は、Renesas RA ボードのためのクイックリファレンスです。このボードを初めて使う場合は、まず次のマイクロコントローラとボードの概要を概要を確認してみてください。

MicroPython のインストール

チュートリアルの章: Renesas RA での MicroPython の始め方 を参照してください。そこにはトラブルシューティングについても記載されています。

ボードの一般的な制御

MicroPython REPL は USB ポートで利用できます。タブ補完は、オブジェクトにどのようなメソッドがあるかを調べるのに便利です。貼り付けモード(ctrl-E)は、大きめの Pythonコードを REPL に貼り付けるのに便利です。一部の機能は Renesas RAボード にまだ実装されていません。詳しくはチュートリアルを参照してください。

machine モジュール

import machine

machine.freq()    # CPU の現在の周波数を取得

次の関数をサポートしています:

machine.freq()
machine.reset()
machine.soft_reset()
machine.unique_id()

次の関数は現時点で未サポートです:

machine.reset_cause()
machine.bootloader([value])
machine.disable_irq()
machine.enable_irq(state)
machine.freq([hz])
machine.idle()
machine.sleep()
machine.lightsleep()
machine.lightsleep([time_ms])
machine.deepsleep()
machine.deepsleep([time_ms])
machine.wake_reason()
machine.time_pulse_us(pin, pulse_level, timeout_us=1000000,/)
machine.bitstream(pin, encoding, timing, data, /)
machine.rng()

遅延とタイミング

time モジュールを使います:

import time

time.sleep(1)           # 1秒間、一時停止する
time.sleep_ms(500)      # 500ミリ秒間、一時停止する
time.sleep_us(10)       # 10マイクロ秒間、一時停止する
start = time.ticks_ms() # ミリ秒カウンター値を取得
delta = time.ticks_diff(time.ticks_ms(), start) # 時差を計算

タイマー

RA MCU のシステムタイマーペリフェラルは、グローバルなマイクロ秒単位のタイムベースを提供し、そのために割り込みを発生させます。ソフトウェアタイマーは現在利用可能で、その数は(メモリが許す限り)無制限です。タイマー id はデフォルトで指定されるため(現時点では id=-1 がサポートされています)、指定する必要はありません。

machine.Timer クラスを使います:

from machine import Timer

tim = Timer(-1)
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t: print(2))
次の関数は現時点で未サポートです:
Timer(id) # ハードウェアタイマーは未サポート。

ピンと GPIO

machine.Pin クラスを使います:

from machine import Pin

p0 = Pin('P000', Pin.OUT)      # P000 の出力ピンを作成
p0.on()                        # ピンを "on" (high) レベルに設定
p0.off()                       # ピンを "off" (low) レベルに設定
p0.value(1)                    # ピンを on/high に設定

p2 = Pin(Pin.cpu.P002, Pin.IN) # P002 の入力ピンを作成
print(p2.value())              # 値 0 または 1 を取得

p4 = Pin('P004', Pin.PULL_UP)      # 内部プルアップ抵抗を有効化
p5 = Pin('P005', Pin.OUT, value=1) # 作成時にピンを high に設定

ピン id は RA MCU のピン名に対応して Pin.cpu.P106 という形式でも 'P106' という形式でも指定できます。RA MCU には多くの機能のピンがあります。しかし、ピンの機能が固定されていたり、ボードによって接続されていない場合があります。ピンのマッピングについてはボードのマニュアルを確認してください。

Pin のポートドライブ機能が MCU によってサポートされている場合、以下の drive キーワード引数が指定できます

Pin.DRIVE_0: Low drive
Pin.DRIVE_1: Middle drive
Pin.DRIVE_2: Middle drive for I2C Fast-mode
Pin.DRIVE_3: High drive

alt キーワード引数はサポートされません。

次の関数はサポートされません:

Pin.irq(priority=)  # priority キーワード引数はサポートされません
Pin.irq(wake=)      # wake キーワード引数はサポートされません
Pin.irq(hard=)      # ハードウェア割込みが適用されるので、hard キーワード引数は無視されます
Pin.mode()
Pin.pull()
Pin.drive()

UART (シリアルバス)

RA MCU は SCI (Serial Communication Interface)というハードウェア UART をいくつか備えています。UART ID は RA MCU の SCI 番号に対応しており、UART(0) を SCI0、 UART(1) を SCI1 として利用できます。

machine.UART を参照

from machine import UART

uart1 = UART(1, 115200)
uart1.write('hello')    # 5バイト書き出す
uart1.read(5)           # 5バイトまで読み込む

ボード上で利用可能な UART とピンは固定されていて、次のとおりです。UARTの1つはは REPL に使われます。

EK-RA4M1 UART0(REPL) UART1 UART2
tx P411 P401 P302
rx P410 P402 P301
EK-RA4W1 UART1 UART4(REPL) UART9
tx P213 P204 P109
rx P212 P206 P110
EK-RA6M1 UART0(REPL) UART2 UART8
tx P411 P302 P105
rx P410 P301 P104
EK-RA6M2 UART0(REPL) UART7 UART9
tx P411 P401 P602
rx P410 P402 P601
RA4M1-CLICKER UART0 UART1(REPL)
tx P411 P401
rx P410 P402

次の関数は現時点で未サポートです:

UART.init(baudrate)   # now only 115200 is confirmed
UART.init(cts, rts)   # Pins are fixed.
UART.init(invert)
UART.init(tx,rx)      # Pins are fixed.
UART.init(txbuf)
UART.init(flow)
UART.irq(handler)
UART.irq(trigger=RX_ANY)
UART.irq(priority)
UART.irq(wake=machine.IDLE)

リアルタイムクロック (RTC)

machine.RTC を参照:

from machine import RTC

rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # 指定の日時を設定
                                             # 日時 2017/8/23 1:12:48
rtc.datetime() # 日時を取得

次の関数は現時点で未サポートです:

RTC.init(datetime)
RTC.now()
RTC.deinit()
RTC.alarm()
RTC.alarm_left()
RTC.cancel()
RTC.irq()

ADC (アナログ/デジタル変換)

machine.ADC を参照:

from machine import ADC

adc = ADC('P000')    # ADC ピンの ADC オブジェクトを作成
adc.read_u16()       # 生のアナログ値を 0-65535 の範囲で読込み

ピン id は RA MCU のピン名が 'P000' であるなら AN000 (アナログチャネル 000)として利用できます。RA MCU は多くのアナログチャンネルを備えています。しかし、ピン機能はボードによって固定されていたり、利用できない場合があります。ピンのマッピングについては、MCUおよびボードのマニュアルを確認してください。

次の関数は現時点で未サポートです:

ADC.init()
ADC(sample_ns)
ADC(atten)
ADC.read_uv()
ADC.block()

SPI バス

RA MCUはいくつかのハードウェア SPI (Serial Peripheral Interface)を備えています。SPI id は RA MCU の SPI 番号に対応しており、SPI(0) をSPI0、SPI(1) を SPI1 として利用できます。追加パラメータがない場合は machine.SoftSPI() が呼び出されます。

machine.SPI を参照:

from machine import SPI, Pin

spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
cs(0)
spi.write(b"12345678")
cs(1)

利用可能な SPI とピンは固定されていて、次のとおりです。

EK-RA4M1 SPI0
sck P102
mosi P101
miso P100
cs P206
EK-RA4W1 SPI0
sck P102
mosi P101
miso P100
cs P103
EK-RA6M1 SPI0
sck P102
mosi P101
miso P100
cs P103
EK-RA6M2 SPI0 SPI1
sck P102 P702
mosi P101 P701
miso P100 P700
cs P103 P703
RA4M1-CLICKER SPI0
sck P102
mosi P101
miso P100
cs P103

次の関数は現時点で未サポートです:

SPI.init(firstbit)    # 現状は SPI.LSB で固定
SPI.init(baudrate)    # 現状は 500000 のみ確認

I2C バス

RA MCU はいくつかのハードウェア IIC (Inter-Integrated Circuit Bus)を備えています。I2C id は RA MCU の I2C 番号に対応しており、I2C(0) を IIC0、I2C(1) を IIC1 として使えます。追加パラメータがない場合は、machine.SoftI2C() が呼び出されます。

machine.I2C を参照:

from machine import I2C

i2c = I2C(0)

i2c.scan()         # スレーブアドレスのリストを返す
i2c.readfrom_mem(0x50, 0x10, 2, addrsize=16)  # スレーブ 0x50、スレーブメモリ 0x10 から 2 バイト読込み

利用可能な I2C とピンは固定されていて、次のとおりです。

EK-RA4M1
scl 未サポート
sda 未サポート
EK-RA4W1 I2C0
scl P204
sda P407
EK-RA6M1 I2C0
scl P400
sda P401
EK-RA6M2 I2C2
scl P512
sda P511
RA4M1-CLICKER I2C1
scl P205
sda P206

次の関数は現時点で未サポートです:

I2C.init(freq)    # 現状は 400000 のみ確認
I2C.deinit()
I2C.start()
I2C.stop()

PWM (パルス幅変調)

PWM は未サポートです。

WDT (ウォッチドッグタイマー)

WDT は未サポートです。

SD カード

microSD カードデバイスをハードウェア SPI0 ピンに接続することで、凍結した sdcard ドライバ(drivers/sdcard/sdcard.py)が利用できます。

from machine import Pin, SPI
import os, sdcard

spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
sd = sdcard.SDCard(spi, cs)
os.mount(sd, '/sd')
os.listdir('/')
os.chdir('/sd')
os.umount('/sd')

OneWire ドライバー

OneWire ドライバーはソフトウェアで実装され、すべてのピンで動作します:

from machine import Pin
import onewire

ow = onewire.OneWire(Pin(P012)) # P012 で OneWire バスを作成
ow.scan()               # バス上のデバイスリストを返す
ow.reset()              # バスをリセット
ow.readbyte()           # 1バイト読込み
ow.writebyte(0x12)      # バスに1バイト書込み
ow.write('123')         # バスに複数バイト書込み
ow.select_rom(b'12345678') # ROM コードで指定したデバイスを選択

DS18S20 と DS18B20 のデバイスに対応したドライバが用意されています:

import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
    print(ds.read_temp(rom))

4.7k のプルアップ抵抗をデータラインに接続してください。convert_temp() メソッドは、温度をサンプリングするたびに呼び出す必要があることに注意してください。

NeoPixel/APA106 ドライバー

NeoPixel は現在のところ未サポートです。