Arduino勉強会/40-VScode(PlatformIO)+OpenOCDでjlink-OBを使い尽くす
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Arduino勉強会]]
#contents
2021/12/29からのアクセス回数 &counter;
** jlink-OBとは [#bac9452b]
jlink-OBは、JTAGデバッガーの一つで、ARMのCortex系のデバッ...
そのため、RaspberryPi-Pico, XIAO, LPC11U35, LPC812, LPC81...
できます。
&ref(jlink-ob.png,,50%);
jlink-OBは求めやすい価格でAmazonやAliExpressから購入する...
** VScode(PlatformIO)の魅力 [#lf98c857]
VScodeはとても軽く、複数の言語に対して一貫した環境を提供...
このエディタで使える拡張機能のPlatformIOは、ボードのコン...
platform.iniファイルに記述するだけで整えてくれる優れもの...
*** PlatformIOのインストール [#e4aac671]
VScodeのCode>Prefrences>Extensionsとメニューを選択すると...
ここで、「platformio」と入力すると、先頭にPlatformIO IDE...
&ref(extensions.png,,80%);
** Raspberry Pi PicoのBlinkサンプルを動かす [#zdb595d7]
Rasberry Pi PicoのArduino環境が提供され、同時にPlatformIO...
ここでは、以下の手順でBlink(Lチカ)を動かしてみます。
+ Arduinoの基本サンプルBlinkのビルド
+ BlinkのバイナリのRasberry Pi Picoへのアップロード
+ デバッグ環境の構築
*** 新規プロジェクトの作成 [#x00595fb]
PlatformIOの新規プロジェクトの作成は、PlatformIO拡張機能...
VScodeのターミナルからコマンドラインで行った方が手短にで...
VSCodeでプロジェクトを作成したフォルダーを開きます(File>...
次にターミナルウィンドウを開き、Raspberry Pi Picoのボード...
Raspberry Pi PicoのID(pico)をメモします。
#pre{{
$ ~/.platformio/penv/bin/pio boards "Raspberry Pi Pico"
Platform: raspberrypi
=========================================================...
ID MCU Frequency Flash RAM Name
---- ------ ----------- ------- ----- --------------...
pico RP2040 133MHz 2MB 264KB Raspberry Pi P...
pico RP2040 133MHz 2MB 264KB Raspberry Pi P...
Platform: wizio-pico
=========================================================...
ID MCU Frequency Flash RAM N...
----------------- ------ ----------- ------- ----- -...
pico-dap RP2040 125MHz 2MB 256KB W...
raspberry-pi-pico RP2040 125MHz 2MB 256KB W...
}}
ボードのID(pico)を使って、pio init --board picoを実行し...
#pre{{
$ ~/.platformio/penv/bin/pio init --board pico
The current working directory /Users/take/Documents/Platf...
The next files/directories have been created in /Users/ta...
include - Put project header files here
lib - Put here project specific (private) libraries
src - Put project source files here
platformio.ini - Project Configuration File
Project has been successfully updated! Useful commands:
`pio run` - process/build project from the current direct...
`pio run --target upload` or `pio run -t upload` - upload...
`pio run --target clean` - clean project (remove compiled...
`pio run --help` - additional information
}}
platformio.iniをみると、以下の設定となっています。
#pre{{
[env:pico]
platform = raspberrypi
board = pico
framework = arduino
}}
*** ソースファイルの作成 [#s7d130d1]
srcフォルダーの下にmain.cppを作成し、以下の以下のプログラ...
#pre{{
#include <Arduino.h>
#define LED_PIN LED_BUILTIN
// the setup function runs once when you press reset or p...
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (...
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off ...
delay(1000); // wait for a second
}
}}
*** Blinkのビルド [#p5c8cb3c]
PlatformIOのアイコンをクリックし、PROJECT TASKSからGenera...
ここでは、コマンドラインからpio runを実行します。
#pre{{
$ ~/.platformio/penv/bin/pio run
Processing pico (platform: raspberrypi; board: pico; fram...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ra...
PLATFORM: Raspberry Pi RP2040 (1.4.0) > Raspberry Pi Pico
HARDWARE: RP2040 133MHz, 264KB RAM, 2MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, jlink, ra...
PACKAGES:
- framework-arduino-mbed 2.5.2
- tool-rp2040tools 1.0.2
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configur...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 30 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/pico/src/main.cpp.o
Generating LD script .pio/build/pico/cpp.linker_script.ld
Compiling .pio/build/pico/FrameworkArduinoVariant/double_...
途中省略
Archiving .pio/build/pico/libFrameworkArduino.a
Indexing .pio/build/pico/libFrameworkArduino.a
Linking .pio/build/pico/firmware.elf
Generating UF2 image
elf2uf2 ".pio/build/pico/firmware.elf" ".pio/build/pico/f...
Checking size .pio/build/pico/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home >...
RAM: [== ] 15.1% (used 40688 bytes from 270336 ...
Flash: [ ] 0.2% (used 4034 bytes from 2097152 ...
Building .pio/build/pico/firmware.bin
=================== [SUCCESS] Took 26.56 seconds ========...
}}
*** バイナリのアップロード [#uf7087b7]
ビルドで作成されたバイナリファイルをRaspberry Pi Picoにア...
最初にRaspberry Pi Picoの「BOOTSEL」とかかれた白いボタン...
RPI-RP2というボリュームがマウントされます。Macの場合/Volu...
そこで、platformio.iniに以下の行を追加します。
#pre{{
upload_port = /Volumes/RPI-RP2
}}
PROJECT TASKSからGeneral>Uploadを選択するとバイナリのアッ...
ここでは、コマンドラインからpio run -t uploadを実行します。
#pre{{
$ ~/.platformio/penv/bin/pio run -t upload
Processing pico (platform: raspberrypi; board: pico; fram...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ra...
PLATFORM: Raspberry Pi RP2040 (1.4.0) > Raspberry Pi Pico
HARDWARE: RP2040 133MHz, 264KB RAM, 2MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, jlink, ra...
PACKAGES:
- framework-arduino-mbed 2.5.2
- tool-openocd-raspberrypi 2.1100.0 (11.0)
- tool-rp2040tools 1.0.2
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configur...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 30 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio/build/pico/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home >...
RAM: [== ] 15.1% (used 40688 bytes from 270336 ...
Flash: [ ] 0.2% (used 4034 bytes from 2097152 ...
Configuring upload protocol...
AVAILABLE: cmsis-dap, jlink, picotool, raspberrypi-swd
CURRENT: upload_protocol = picotool
Looking for upload port...
Use manually specified: /Volumes/RPI-RP2
Forcing reset using 1200bps open/close on port /Volumes/R...
Uploading .pio/build/pico/firmware.elf
rp2040load 1.0.1 - compiled with go1.15.8
.Loading into Flash: [ ] 0%
Loading into Flash: [= ] 5%
Loading into Flash: [=== ] 11%
Loading into Flash: [==== ] 16%
Loading into Flash: [====== ] 22%
Loading into Flash: [======== ] 28%
Loading into Flash: [========= ] 33%
Loading into Flash: [=========== ] 39%
Loading into Flash: [============= ] 45%
Loading into Flash: [=============== ] 50%
Loading into Flash: [================ ] 56%
Loading into Flash: [================== ] 61%
Loading into Flash: [==================== ] 67%
Loading into Flash: [===================== ] 73%
Loading into Flash: [======================= ] 78%
Loading into Flash: [========================= ] 84%
Loading into Flash: [=========================== ] 90%
Loading into Flash: [============================ ] 95%
Loading into Flash: [==============================] 100%
=================== [SUCCESS] Took 4.51 seconds =========...
}}
** OpenOCDを使ったデバッグ [#j738443a]
OpenOCDは、様々なJTAGデバッガーとGDBを使ってデバッグでき...
オープンソースで公開されているため、多くの場面で使われて...
PlatformIOもデバッグにOpenOCDを使用していますが、その設定...
そのため、PlatformIOの環境でサポートされていないJTAGデバ...
しかし、カスタム設定を使ってOpenOCDの起動方法を指定するこ...
** Jlink-OBを使う [#g31127a4]
本題のjlink-OBを使ってデバッグできるようにplatformio.ini...
Raspberry Pi Pico用のopenocdは、特別なopenocdを使いますが...
#pre{{
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd-raspberrypi/...
-f openocd.cfg
}}
次にopenocd.cfgファイルを作成し、以下の内容とします。
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
adapter driver jlink
transport select swd
# CPUの設定
source [find target/rp2040.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
使用するインタフェース(JTAG)は、jlink-obなので、インタ...
使用するCPUに合わせて「ターゲットCPUの設定」をします。fin...
#pre{{
source [find target/rp2040.cfg]
}}
デバッガの初期化もほとんど変わりません。
*** jlink-obとRaspberry Pi Picoとの結線 [#be508121]
SWD方式のjlink-obが使う信号は、GND, SWDIO, SWCLKの3線で...
jlink-obのUSBケーブル1本でデバッグすることができます。
jlink-obとRaspberry Pi Picoとの結線は、以下の通りです。
| jlink-ob | Raspberry Pi Pico |h
| GND | GND |
| SWDIO | SWDIO |
| SWCLK | SWCLK |
| 3.3V | VSYS |
&ref(jlink-ob-pico-connection.png,,50%);
*** デバッグの実行 [#h6125f1d]
VScodeのメニューからRun>Start Debuggingを選択すると、デバ...
作成し、デバッガを起動します。
後は、デバッガー用アイコンとソースファイルのブレークポイ...
&ref(VScode_debug,,50%);
デバッガーを使った開発のもう一つの利点は、BOOTSELボタンを...
ただし、バイナリがデバッグ情報を含むため、サイズが大きく...
** XIAOを試してみる [#l399e868]
PlatformIOでのプロジェクトの作り方が分かったところで、See...
最初にボードのIDを調べます。
#pre{{
$ ~/.platformio/penv/bin/pio boards XIAO
Platform: atmelsam
=========================================================...
ID MCU Frequency Flash RAM Name
---------- ---------- ----------- ------- ----- ----...
seeed_xiao SAMD21G18A 48MHz 256KB 32KB Seee...
}}
Raspberry Pi Picoと以下のコマンドを実行して、プロジェクト...
#pre{{
$ ~/.platformio/penv/bin/pio init --board seeed_xiao
}}
デバッグ用にplatformio.iniに以下を追加します。今回はデフ...
#pre{{
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
src/main.cppもRaspberry Pi Picoのプロジェクトからコピーし...
OpenOCDの設定ファイルopenocd.cfgは、以下のようになります。
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
adapter driver jlink
transport select swd
# CPU設定
source [find target/at91samdXX.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
CPUの設定ファイルを見つける方法は簡単です。
Googleでplatformio XIAOで検索して、PlatfformIOのページに...
Hardwareの項目のMicorcontrollerからCPUがATMEL SAMDシリー...
つぎにsamdをキーワードに以下のコマンドで*.cfgファイルを検...
#pre{{
$ ls ~/.platformio/packages/tool-openocd/scripts/target/*...
/Users/take/.platformio/packages/tool-openocd/scripts/tar...
}}
これからtarget/at91samdXX.cfgだと分かります。
*** XIAOとjlink-obとの結線 [#j4bf2a96]
jlink-obとRaspberry Pi Picoとの結線は、以下の通りです。8...
XIAOのデバッグ用ピンは、基板の裏側にパットとして付いてい...
XIAO拡張ボードを使用すると便利です。
| jlink-ob | XIAO拡張ボード |h
| GND | GND |
| SWDIO | SWDIO |
| SWCLK | SWCLK |
| 3.3V | 3V3 |
*** デバッグの実行 [#ka6e303f]
Raspberry Pi Pico同様、VScodeのメニューからRun>Start Debu...
XIAOに書き込まれ、デバッガーが起動します。
&ref(XIAO_debug.png,,50%);
** 懐かしのLPC1114FN28で試してみる [#md04ddd1]
少し古くてCPU単体では入手できないLPC1114FN28は、クリスタ...
デバッグもできるとても便利なCPUでした。
ブレッドボードにそのまま挿して使うことがきるボード(mbed ...
スイッチサイエンスから販売されています(2021/12/26時点、...
このボードはLPC1114FN28を挿すだけで、mbedのように動く魔法...
ブラウザー・コンパイラーでコンパイルし、ダウンロードして...
プログラムが動く仕組みは画期的でした。しかもmbedのコンパ...
生成されたバイナリがとてもコンパクトになるのも特徴でした。
*** 古いmbed環境の構築 [#h5fdf042]
最初にLPC1114FN28のIDを調べます。
#pre{{
$ ~/.platformio/penv/bin/pio boards LPC1114FN28
Platform: nxplpc
=========================================================...
ID MCU Frequency Flash RAM Name
----------- ----------- ----------- ------- ----- --...
lpc1114fn28 LPC1114FN28 48MHz 32KB 4KB Sw...
}}
次にIDを元にプロジェクトを作成します。
#pre{{
$ ~/.platformio/penv/bin/pio init --board lpc1114fn28
}}
生成されたplatformio.iniは、以下のようになります。
#pre{{
[env:lpc1114fn28]
platform = nxplpc
board = lpc1114fn28
framework = mbed
}}
frameworkにはmbedを使用しているので、mbed版Lチカをmain.cp...
#pre{{
#include "mbed.h"
DigitalOut myled(LED2);
int main() {
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
}
}
}}
mbedのページを参考にLED2使ってブレッドボードに回路を組み...
https://os.mbed.com/platforms/LPC1114FN28/
&ref(LPC1114_mbed.png,,50%);
*** いざコンパイル [#n0d0b2b2]
準備ができたので、コンパイルするとエラーがでて失敗します。
#pre{{
Processing lpc1114fn28 (platform: nxplpc; board: lpc1114f...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nx...
PLATFORM: NXP LPC (9.0.0) > Switch Science mbed LPC1114FN28
HARDWARE: LPC1114FN28 48MHz, 4KB RAM, 32KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External ...
PACKAGES:
- framework-mbed 6.60900.210318 (6.9.0)
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
Collecting mbed sources...
Failed to extract configuration for LPC1114FN28.
It might not be supported in the this Mbed release.
================================= [FAILED] Took 2.21 seco...
}}
調べてみるとLPC1115FN28で使用できるmbedのバージョンは古い...
最新のmbed OS(6.9)ではサポートされていないことが分かり...
そこで、古いmbed(5.5)を使用するために、platformio.iniを...
#pre{{
[env:lpc1114fn28]
platform = nxplpc@3.5.0
board = lpc1114fn28
framework = mbed
}}
今度は、うまくコンパイルできました。
#pre{{
Processing lpc1114fn28 (platform: nxplpc@3.5.0; board: lp...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nx...
PLATFORM: NXP LPC (3.5.0) > Switch Science mbed LPC1114FN28
HARDWARE: LPC1114FN28 48MHz, 4KB RAM, 32KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External ...
PACKAGES:
- framework-mbed 5.51001.181029 (5.10.1)
- toolchain-gccarmnoneeabi 1.90301.200702 (9.3.1)
LDF: Library Dependency Finder -> https://bit.ly/configur...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 39 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/lpc1114fn28/FrameworkMbedCore/cmsis/...
途中省略
Linking .pio/build/lpc1114fn28/firmware.elf
Checking size .pio/build/lpc1114fn28/firmware.elf
Building .pio/build/lpc1114fn28/firmware.bin
Advanced Memory Usage is available via "PlatformIO Home >...
RAM: [== ] 16.3% (used 669 bytes from 4096 bytes)
Flash: [=== ] 26.5% (used 8696 bytes from 32768 by...
========================= [SUCCESS] Took 16.07 seconds ==...
}}
mbed LPC1114FN28は、cmsis-dapのJTAGデバッガを内臓している...
*** jlink_obで素のLPC1114FN28を動かす [#lad73ccc]
LPC1114FN28をそのままブレッドボードに挿して、jlink_obでデ...
openocd.cfgは、CPU設定は、lpc11xx.cfgを使用するようにしま...
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
adapter driver jlink
transport select swd
# CPU設定
source [find target/lpc11xx.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
platformio.iniには、XIAO同様デバッグカスタム設定を追加し...
#pre{{
[env:lpc1114fn28]
platform = nxplpc@3.5.0
board = lpc1114fn28
framework = mbed
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
LPC1114FN28とjlink_obの結線は、以下の通りです。
| LPC1114FN28 | jlink_ob |h
| VIN(dp20の位置) | 3.3V |
| SWDIO(dp12の位置) | SWDIO |
| SWCLK(dp3の位置) | SWCLK |
| GND(dp21の位置) | GND |
たったこれだけで、素のLPC1114FN28が動きます。
&ref(LPC1114_jlink_ob.png,,50%);
** 今入手できるLPC812を試してみる [#g2428f8d]
CPU不足の今でも、秋月から入手可能(2021/12/28現在、130円...
LPC812を使ったmbed製品には、LPC812 MAXがあります。
このボードには、トラ技ARMライタで使われているLPC11U35が載...
を書き込んだり、デバッグができるようになっています。
手元に素のLPC812がないので、LPC812 MAXを使ってjlink_obが...
pio boardsコマンドでLPC812-MAXのIDを調べると、lpc812であ...
#pre{{
$ ~/.platformio/penv/bin/pio boards LPC812
Platform: nxplpc
=========================================================...
ID MCU Frequency Flash RAM Name
---------------- ------ ----------- ------- ----- --...
elektor_cocorico LPC812 30MHz 16KB 4KB Co...
}}
プロジェクトを作成します。
#pre{{
$ ~/.platformio/penv/bin/pio init --board lpc812
}}
LチカのLEDは、LED1を使用するので、main.cppは以下のように...
#pre{{
#include "mbed.h"
DigitalOut myled(LED1);
int main() {
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
}
}
}}
LPC812もそのままではコンパイルでエラーになりました。
#pre{{
Processing lpc812 (platform: nxplpc; board: lpc812; frame...
---------------------------------------------------------...
Tool Manager: Installing platformio/framework-mbed @ ~6.5...
Unpacking [####################################] 100% ...
Tool Manager: framework-mbed @ 6.51506.201227 has been in...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nx...
PLATFORM: NXP LPC (9.0.0) > NXP LPC800-MAX
HARDWARE: LPC812 30MHz, 4KB RAM, 16KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External ...
PACKAGES:
- framework-mbed 6.51506.201227 (5.15.6)
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
途中省略
Linking .pio/build/lpc812/firmware.elf
/Users/take/.platformio/packages/toolchain-gccarmnoneeabi...
bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-e...
Documents/PlatformIO/Projects/TestLPC812/.pio/build/
lpc812/LPC812.ld.link_script.ld:76 cannot move location c...
(from 0000000010000448 to 0000000010000000)
collect2: error: ld returned 1 exit status
*** [.pio/build/lpc812/firmware.elf] Error 1 [#m00f104d]
========================= [FAILED] Took 240.11 seconds ==...
}}
そこで、LPC1114FN28同様の古いmbedを使用するようにplatform...
#pre{{
[env:lpc812]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
}}
*** LPC812 MAXをjlink-obでデバッグ [#kcb2abc1]
LPC812 MAXを外部のJTAGデバッガーでデバッグする場合、P3の...
使用します。また、LPC812 MAX内のLPC11U35が動かないように...
P1のジャンパーを接続します。
ピン変換には、以下のような変換コネクターを使用します。
&ref(PIN_Convertor.png,,80%);
変換コネクターとjlink-OBの結線は、以下の通りです。
| 変換コネクター | Jlink-OB |h
| 1 VTref | VCC |
| 7 SWDIO | SWDIO |
| 9 SWCLK | SWCLK |
| 4 GND | GND |
LPC812用のopenocd.cfgは、以下のようになります。
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
transport select swd
# CPU設定
source [find target/lpc8xx.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
最後にplatformio.iniのdebug_tool, debug_server項目を追加...
#pre{{
[env:lpc812]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
無事、デバッガーで動きました。
&ref(LPC812_debug.png,,50%);
** LPC810でjlink-OBを試す [#sdffc00a]
こちらも入手できなくなったLPC810で試してみます。
(現在ではLPC812の変換基板も販売されているので、こちらを...
プロジェクトは、LPC812 MAXを修正することで使えるようにな...
- board_build.mcuにlpc810をセット
- debug_build_flagsでサイズのオプティマイズとリンカスクリ...
残念ながら、mbedの高品質のコンパイラーに比べ、GCCの生成す...
platformio.ini
#pre{{
[env:lpc810]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
board_build.mcu = lpc810
debug_build_flags = -Os -g -Wl,-T$PROJECT_DIR/LPC810.ld
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
LPC812と810のメモリマップの違いは、フラッシュが16KBから4K...
リンカースクリプトの変更は、MEMOERYセクションのみとなりま...
#pre{{
{
FLASH (rx) : ORIGIN = 0x0, LENGTH = 0x1000
RAM (rwx) : ORIGIN = 0x10000000+0xC0, LENGTH = 0x0400-0...
}
}}
LPC810.ldスクリプトは、mbedのパッケージに含まれているので...
#pre{{
$ cp ~/.platformio/packages/framework-mbed@5.51001.181029...
}}
ピン配置がLPC812と異なるため、
https://os.mbed.com/users/va009039/code/lpc810_helloworld/
のmain.cppを使わせていただきました。
ここに引用させていただきます。
#pre{{
#include "mbed.h"
// LPC810 pinout
#define dp1 P0_5 // nRESET
#define dp2 P0_4 // WAKEUP
#define dp3 // SWCLK
#define dp4 // SWDIO
#define dp5 P0_1 // nISP
#define dp6 // VIN
#define dp7 // GND
#define dp8 P0_0
DigitalOut myled(dp8);
int main() {
while(1) {
myled = 1;
wait_ms(200);
myled = 0;
wait_ms(200);
}
}
}}
LPC810とjlink-OBの結線は、以下の通りです。
| LPC810 | Jlink-OB |h
| 6 VIN | VCC |
| 4 SWDIO | SWDIO |
| 3 SWCLK | SWCLK |
| 5 GND | GND |
最後に、デバッグしているLPC810の写真をお見せます。
&ref(LPC810_debug.png,,50%);
** コメント [#ff93bd6f]
#vote(おもしろかった,そうでもない,わかりずらい)
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
終了行:
[[Arduino勉強会]]
#contents
2021/12/29からのアクセス回数 &counter;
** jlink-OBとは [#bac9452b]
jlink-OBは、JTAGデバッガーの一つで、ARMのCortex系のデバッ...
そのため、RaspberryPi-Pico, XIAO, LPC11U35, LPC812, LPC81...
できます。
&ref(jlink-ob.png,,50%);
jlink-OBは求めやすい価格でAmazonやAliExpressから購入する...
** VScode(PlatformIO)の魅力 [#lf98c857]
VScodeはとても軽く、複数の言語に対して一貫した環境を提供...
このエディタで使える拡張機能のPlatformIOは、ボードのコン...
platform.iniファイルに記述するだけで整えてくれる優れもの...
*** PlatformIOのインストール [#e4aac671]
VScodeのCode>Prefrences>Extensionsとメニューを選択すると...
ここで、「platformio」と入力すると、先頭にPlatformIO IDE...
&ref(extensions.png,,80%);
** Raspberry Pi PicoのBlinkサンプルを動かす [#zdb595d7]
Rasberry Pi PicoのArduino環境が提供され、同時にPlatformIO...
ここでは、以下の手順でBlink(Lチカ)を動かしてみます。
+ Arduinoの基本サンプルBlinkのビルド
+ BlinkのバイナリのRasberry Pi Picoへのアップロード
+ デバッグ環境の構築
*** 新規プロジェクトの作成 [#x00595fb]
PlatformIOの新規プロジェクトの作成は、PlatformIO拡張機能...
VScodeのターミナルからコマンドラインで行った方が手短にで...
VSCodeでプロジェクトを作成したフォルダーを開きます(File>...
次にターミナルウィンドウを開き、Raspberry Pi Picoのボード...
Raspberry Pi PicoのID(pico)をメモします。
#pre{{
$ ~/.platformio/penv/bin/pio boards "Raspberry Pi Pico"
Platform: raspberrypi
=========================================================...
ID MCU Frequency Flash RAM Name
---- ------ ----------- ------- ----- --------------...
pico RP2040 133MHz 2MB 264KB Raspberry Pi P...
pico RP2040 133MHz 2MB 264KB Raspberry Pi P...
Platform: wizio-pico
=========================================================...
ID MCU Frequency Flash RAM N...
----------------- ------ ----------- ------- ----- -...
pico-dap RP2040 125MHz 2MB 256KB W...
raspberry-pi-pico RP2040 125MHz 2MB 256KB W...
}}
ボードのID(pico)を使って、pio init --board picoを実行し...
#pre{{
$ ~/.platformio/penv/bin/pio init --board pico
The current working directory /Users/take/Documents/Platf...
The next files/directories have been created in /Users/ta...
include - Put project header files here
lib - Put here project specific (private) libraries
src - Put project source files here
platformio.ini - Project Configuration File
Project has been successfully updated! Useful commands:
`pio run` - process/build project from the current direct...
`pio run --target upload` or `pio run -t upload` - upload...
`pio run --target clean` - clean project (remove compiled...
`pio run --help` - additional information
}}
platformio.iniをみると、以下の設定となっています。
#pre{{
[env:pico]
platform = raspberrypi
board = pico
framework = arduino
}}
*** ソースファイルの作成 [#s7d130d1]
srcフォルダーの下にmain.cppを作成し、以下の以下のプログラ...
#pre{{
#include <Arduino.h>
#define LED_PIN LED_BUILTIN
// the setup function runs once when you press reset or p...
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (...
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off ...
delay(1000); // wait for a second
}
}}
*** Blinkのビルド [#p5c8cb3c]
PlatformIOのアイコンをクリックし、PROJECT TASKSからGenera...
ここでは、コマンドラインからpio runを実行します。
#pre{{
$ ~/.platformio/penv/bin/pio run
Processing pico (platform: raspberrypi; board: pico; fram...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ra...
PLATFORM: Raspberry Pi RP2040 (1.4.0) > Raspberry Pi Pico
HARDWARE: RP2040 133MHz, 264KB RAM, 2MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, jlink, ra...
PACKAGES:
- framework-arduino-mbed 2.5.2
- tool-rp2040tools 1.0.2
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configur...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 30 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/pico/src/main.cpp.o
Generating LD script .pio/build/pico/cpp.linker_script.ld
Compiling .pio/build/pico/FrameworkArduinoVariant/double_...
途中省略
Archiving .pio/build/pico/libFrameworkArduino.a
Indexing .pio/build/pico/libFrameworkArduino.a
Linking .pio/build/pico/firmware.elf
Generating UF2 image
elf2uf2 ".pio/build/pico/firmware.elf" ".pio/build/pico/f...
Checking size .pio/build/pico/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home >...
RAM: [== ] 15.1% (used 40688 bytes from 270336 ...
Flash: [ ] 0.2% (used 4034 bytes from 2097152 ...
Building .pio/build/pico/firmware.bin
=================== [SUCCESS] Took 26.56 seconds ========...
}}
*** バイナリのアップロード [#uf7087b7]
ビルドで作成されたバイナリファイルをRaspberry Pi Picoにア...
最初にRaspberry Pi Picoの「BOOTSEL」とかかれた白いボタン...
RPI-RP2というボリュームがマウントされます。Macの場合/Volu...
そこで、platformio.iniに以下の行を追加します。
#pre{{
upload_port = /Volumes/RPI-RP2
}}
PROJECT TASKSからGeneral>Uploadを選択するとバイナリのアッ...
ここでは、コマンドラインからpio run -t uploadを実行します。
#pre{{
$ ~/.platformio/penv/bin/pio run -t upload
Processing pico (platform: raspberrypi; board: pico; fram...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ra...
PLATFORM: Raspberry Pi RP2040 (1.4.0) > Raspberry Pi Pico
HARDWARE: RP2040 133MHz, 264KB RAM, 2MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, jlink, ra...
PACKAGES:
- framework-arduino-mbed 2.5.2
- tool-openocd-raspberrypi 2.1100.0 (11.0)
- tool-rp2040tools 1.0.2
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configur...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 30 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio/build/pico/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home >...
RAM: [== ] 15.1% (used 40688 bytes from 270336 ...
Flash: [ ] 0.2% (used 4034 bytes from 2097152 ...
Configuring upload protocol...
AVAILABLE: cmsis-dap, jlink, picotool, raspberrypi-swd
CURRENT: upload_protocol = picotool
Looking for upload port...
Use manually specified: /Volumes/RPI-RP2
Forcing reset using 1200bps open/close on port /Volumes/R...
Uploading .pio/build/pico/firmware.elf
rp2040load 1.0.1 - compiled with go1.15.8
.Loading into Flash: [ ] 0%
Loading into Flash: [= ] 5%
Loading into Flash: [=== ] 11%
Loading into Flash: [==== ] 16%
Loading into Flash: [====== ] 22%
Loading into Flash: [======== ] 28%
Loading into Flash: [========= ] 33%
Loading into Flash: [=========== ] 39%
Loading into Flash: [============= ] 45%
Loading into Flash: [=============== ] 50%
Loading into Flash: [================ ] 56%
Loading into Flash: [================== ] 61%
Loading into Flash: [==================== ] 67%
Loading into Flash: [===================== ] 73%
Loading into Flash: [======================= ] 78%
Loading into Flash: [========================= ] 84%
Loading into Flash: [=========================== ] 90%
Loading into Flash: [============================ ] 95%
Loading into Flash: [==============================] 100%
=================== [SUCCESS] Took 4.51 seconds =========...
}}
** OpenOCDを使ったデバッグ [#j738443a]
OpenOCDは、様々なJTAGデバッガーとGDBを使ってデバッグでき...
オープンソースで公開されているため、多くの場面で使われて...
PlatformIOもデバッグにOpenOCDを使用していますが、その設定...
そのため、PlatformIOの環境でサポートされていないJTAGデバ...
しかし、カスタム設定を使ってOpenOCDの起動方法を指定するこ...
** Jlink-OBを使う [#g31127a4]
本題のjlink-OBを使ってデバッグできるようにplatformio.ini...
Raspberry Pi Pico用のopenocdは、特別なopenocdを使いますが...
#pre{{
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd-raspberrypi/...
-f openocd.cfg
}}
次にopenocd.cfgファイルを作成し、以下の内容とします。
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
adapter driver jlink
transport select swd
# CPUの設定
source [find target/rp2040.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
使用するインタフェース(JTAG)は、jlink-obなので、インタ...
使用するCPUに合わせて「ターゲットCPUの設定」をします。fin...
#pre{{
source [find target/rp2040.cfg]
}}
デバッガの初期化もほとんど変わりません。
*** jlink-obとRaspberry Pi Picoとの結線 [#be508121]
SWD方式のjlink-obが使う信号は、GND, SWDIO, SWCLKの3線で...
jlink-obのUSBケーブル1本でデバッグすることができます。
jlink-obとRaspberry Pi Picoとの結線は、以下の通りです。
| jlink-ob | Raspberry Pi Pico |h
| GND | GND |
| SWDIO | SWDIO |
| SWCLK | SWCLK |
| 3.3V | VSYS |
&ref(jlink-ob-pico-connection.png,,50%);
*** デバッグの実行 [#h6125f1d]
VScodeのメニューからRun>Start Debuggingを選択すると、デバ...
作成し、デバッガを起動します。
後は、デバッガー用アイコンとソースファイルのブレークポイ...
&ref(VScode_debug,,50%);
デバッガーを使った開発のもう一つの利点は、BOOTSELボタンを...
ただし、バイナリがデバッグ情報を含むため、サイズが大きく...
** XIAOを試してみる [#l399e868]
PlatformIOでのプロジェクトの作り方が分かったところで、See...
最初にボードのIDを調べます。
#pre{{
$ ~/.platformio/penv/bin/pio boards XIAO
Platform: atmelsam
=========================================================...
ID MCU Frequency Flash RAM Name
---------- ---------- ----------- ------- ----- ----...
seeed_xiao SAMD21G18A 48MHz 256KB 32KB Seee...
}}
Raspberry Pi Picoと以下のコマンドを実行して、プロジェクト...
#pre{{
$ ~/.platformio/penv/bin/pio init --board seeed_xiao
}}
デバッグ用にplatformio.iniに以下を追加します。今回はデフ...
#pre{{
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
src/main.cppもRaspberry Pi Picoのプロジェクトからコピーし...
OpenOCDの設定ファイルopenocd.cfgは、以下のようになります。
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
adapter driver jlink
transport select swd
# CPU設定
source [find target/at91samdXX.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
CPUの設定ファイルを見つける方法は簡単です。
Googleでplatformio XIAOで検索して、PlatfformIOのページに...
Hardwareの項目のMicorcontrollerからCPUがATMEL SAMDシリー...
つぎにsamdをキーワードに以下のコマンドで*.cfgファイルを検...
#pre{{
$ ls ~/.platformio/packages/tool-openocd/scripts/target/*...
/Users/take/.platformio/packages/tool-openocd/scripts/tar...
}}
これからtarget/at91samdXX.cfgだと分かります。
*** XIAOとjlink-obとの結線 [#j4bf2a96]
jlink-obとRaspberry Pi Picoとの結線は、以下の通りです。8...
XIAOのデバッグ用ピンは、基板の裏側にパットとして付いてい...
XIAO拡張ボードを使用すると便利です。
| jlink-ob | XIAO拡張ボード |h
| GND | GND |
| SWDIO | SWDIO |
| SWCLK | SWCLK |
| 3.3V | 3V3 |
*** デバッグの実行 [#ka6e303f]
Raspberry Pi Pico同様、VScodeのメニューからRun>Start Debu...
XIAOに書き込まれ、デバッガーが起動します。
&ref(XIAO_debug.png,,50%);
** 懐かしのLPC1114FN28で試してみる [#md04ddd1]
少し古くてCPU単体では入手できないLPC1114FN28は、クリスタ...
デバッグもできるとても便利なCPUでした。
ブレッドボードにそのまま挿して使うことがきるボード(mbed ...
スイッチサイエンスから販売されています(2021/12/26時点、...
このボードはLPC1114FN28を挿すだけで、mbedのように動く魔法...
ブラウザー・コンパイラーでコンパイルし、ダウンロードして...
プログラムが動く仕組みは画期的でした。しかもmbedのコンパ...
生成されたバイナリがとてもコンパクトになるのも特徴でした。
*** 古いmbed環境の構築 [#h5fdf042]
最初にLPC1114FN28のIDを調べます。
#pre{{
$ ~/.platformio/penv/bin/pio boards LPC1114FN28
Platform: nxplpc
=========================================================...
ID MCU Frequency Flash RAM Name
----------- ----------- ----------- ------- ----- --...
lpc1114fn28 LPC1114FN28 48MHz 32KB 4KB Sw...
}}
次にIDを元にプロジェクトを作成します。
#pre{{
$ ~/.platformio/penv/bin/pio init --board lpc1114fn28
}}
生成されたplatformio.iniは、以下のようになります。
#pre{{
[env:lpc1114fn28]
platform = nxplpc
board = lpc1114fn28
framework = mbed
}}
frameworkにはmbedを使用しているので、mbed版Lチカをmain.cp...
#pre{{
#include "mbed.h"
DigitalOut myled(LED2);
int main() {
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
}
}
}}
mbedのページを参考にLED2使ってブレッドボードに回路を組み...
https://os.mbed.com/platforms/LPC1114FN28/
&ref(LPC1114_mbed.png,,50%);
*** いざコンパイル [#n0d0b2b2]
準備ができたので、コンパイルするとエラーがでて失敗します。
#pre{{
Processing lpc1114fn28 (platform: nxplpc; board: lpc1114f...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nx...
PLATFORM: NXP LPC (9.0.0) > Switch Science mbed LPC1114FN28
HARDWARE: LPC1114FN28 48MHz, 4KB RAM, 32KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External ...
PACKAGES:
- framework-mbed 6.60900.210318 (6.9.0)
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
Collecting mbed sources...
Failed to extract configuration for LPC1114FN28.
It might not be supported in the this Mbed release.
================================= [FAILED] Took 2.21 seco...
}}
調べてみるとLPC1115FN28で使用できるmbedのバージョンは古い...
最新のmbed OS(6.9)ではサポートされていないことが分かり...
そこで、古いmbed(5.5)を使用するために、platformio.iniを...
#pre{{
[env:lpc1114fn28]
platform = nxplpc@3.5.0
board = lpc1114fn28
framework = mbed
}}
今度は、うまくコンパイルできました。
#pre{{
Processing lpc1114fn28 (platform: nxplpc@3.5.0; board: lp...
---------------------------------------------------------...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nx...
PLATFORM: NXP LPC (3.5.0) > Switch Science mbed LPC1114FN28
HARDWARE: LPC1114FN28 48MHz, 4KB RAM, 32KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External ...
PACKAGES:
- framework-mbed 5.51001.181029 (5.10.1)
- toolchain-gccarmnoneeabi 1.90301.200702 (9.3.1)
LDF: Library Dependency Finder -> https://bit.ly/configur...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 39 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/lpc1114fn28/FrameworkMbedCore/cmsis/...
途中省略
Linking .pio/build/lpc1114fn28/firmware.elf
Checking size .pio/build/lpc1114fn28/firmware.elf
Building .pio/build/lpc1114fn28/firmware.bin
Advanced Memory Usage is available via "PlatformIO Home >...
RAM: [== ] 16.3% (used 669 bytes from 4096 bytes)
Flash: [=== ] 26.5% (used 8696 bytes from 32768 by...
========================= [SUCCESS] Took 16.07 seconds ==...
}}
mbed LPC1114FN28は、cmsis-dapのJTAGデバッガを内臓している...
*** jlink_obで素のLPC1114FN28を動かす [#lad73ccc]
LPC1114FN28をそのままブレッドボードに挿して、jlink_obでデ...
openocd.cfgは、CPU設定は、lpc11xx.cfgを使用するようにしま...
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
adapter driver jlink
transport select swd
# CPU設定
source [find target/lpc11xx.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
platformio.iniには、XIAO同様デバッグカスタム設定を追加し...
#pre{{
[env:lpc1114fn28]
platform = nxplpc@3.5.0
board = lpc1114fn28
framework = mbed
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
LPC1114FN28とjlink_obの結線は、以下の通りです。
| LPC1114FN28 | jlink_ob |h
| VIN(dp20の位置) | 3.3V |
| SWDIO(dp12の位置) | SWDIO |
| SWCLK(dp3の位置) | SWCLK |
| GND(dp21の位置) | GND |
たったこれだけで、素のLPC1114FN28が動きます。
&ref(LPC1114_jlink_ob.png,,50%);
** 今入手できるLPC812を試してみる [#g2428f8d]
CPU不足の今でも、秋月から入手可能(2021/12/28現在、130円...
LPC812を使ったmbed製品には、LPC812 MAXがあります。
このボードには、トラ技ARMライタで使われているLPC11U35が載...
を書き込んだり、デバッグができるようになっています。
手元に素のLPC812がないので、LPC812 MAXを使ってjlink_obが...
pio boardsコマンドでLPC812-MAXのIDを調べると、lpc812であ...
#pre{{
$ ~/.platformio/penv/bin/pio boards LPC812
Platform: nxplpc
=========================================================...
ID MCU Frequency Flash RAM Name
---------------- ------ ----------- ------- ----- --...
elektor_cocorico LPC812 30MHz 16KB 4KB Co...
}}
プロジェクトを作成します。
#pre{{
$ ~/.platformio/penv/bin/pio init --board lpc812
}}
LチカのLEDは、LED1を使用するので、main.cppは以下のように...
#pre{{
#include "mbed.h"
DigitalOut myled(LED1);
int main() {
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
}
}
}}
LPC812もそのままではコンパイルでエラーになりました。
#pre{{
Processing lpc812 (platform: nxplpc; board: lpc812; frame...
---------------------------------------------------------...
Tool Manager: Installing platformio/framework-mbed @ ~6.5...
Unpacking [####################################] 100% ...
Tool Manager: framework-mbed @ 6.51506.201227 has been in...
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nx...
PLATFORM: NXP LPC (9.0.0) > NXP LPC800-MAX
HARDWARE: LPC812 30MHz, 4KB RAM, 16KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External ...
PACKAGES:
- framework-mbed 6.51506.201227 (5.15.6)
- toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1)
途中省略
Linking .pio/build/lpc812/firmware.elf
/Users/take/.platformio/packages/toolchain-gccarmnoneeabi...
bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-e...
Documents/PlatformIO/Projects/TestLPC812/.pio/build/
lpc812/LPC812.ld.link_script.ld:76 cannot move location c...
(from 0000000010000448 to 0000000010000000)
collect2: error: ld returned 1 exit status
*** [.pio/build/lpc812/firmware.elf] Error 1 [#m00f104d]
========================= [FAILED] Took 240.11 seconds ==...
}}
そこで、LPC1114FN28同様の古いmbedを使用するようにplatform...
#pre{{
[env:lpc812]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
}}
*** LPC812 MAXをjlink-obでデバッグ [#kcb2abc1]
LPC812 MAXを外部のJTAGデバッガーでデバッグする場合、P3の...
使用します。また、LPC812 MAX内のLPC11U35が動かないように...
P1のジャンパーを接続します。
ピン変換には、以下のような変換コネクターを使用します。
&ref(PIN_Convertor.png,,80%);
変換コネクターとjlink-OBの結線は、以下の通りです。
| 変換コネクター | Jlink-OB |h
| 1 VTref | VCC |
| 7 SWDIO | SWDIO |
| 9 SWCLK | SWCLK |
| 4 GND | GND |
LPC812用のopenocd.cfgは、以下のようになります。
#pre{{
# インタフェース設定
source [find interface/jlink.cfg]
transport select swd
# CPU設定
source [find target/lpc8xx.cfg]
# デバッガの初期化
adapter speed 1000
gdb_target_description enable
init
reset init
}}
最後にplatformio.iniのdebug_tool, debug_server項目を追加...
#pre{{
[env:lpc812]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
無事、デバッガーで動きました。
&ref(LPC812_debug.png,,50%);
** LPC810でjlink-OBを試す [#sdffc00a]
こちらも入手できなくなったLPC810で試してみます。
(現在ではLPC812の変換基板も販売されているので、こちらを...
プロジェクトは、LPC812 MAXを修正することで使えるようにな...
- board_build.mcuにlpc810をセット
- debug_build_flagsでサイズのオプティマイズとリンカスクリ...
残念ながら、mbedの高品質のコンパイラーに比べ、GCCの生成す...
platformio.ini
#pre{{
[env:lpc810]
platform = nxplpc@3.5.0
board = lpc812
framework = mbed
board_build.mcu = lpc810
debug_build_flags = -Os -g -Wl,-T$PROJECT_DIR/LPC810.ld
debug_tool = custom
debug_server =
$PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
-f openocd.cfg
}}
LPC812と810のメモリマップの違いは、フラッシュが16KBから4K...
リンカースクリプトの変更は、MEMOERYセクションのみとなりま...
#pre{{
{
FLASH (rx) : ORIGIN = 0x0, LENGTH = 0x1000
RAM (rwx) : ORIGIN = 0x10000000+0xC0, LENGTH = 0x0400-0...
}
}}
LPC810.ldスクリプトは、mbedのパッケージに含まれているので...
#pre{{
$ cp ~/.platformio/packages/framework-mbed@5.51001.181029...
}}
ピン配置がLPC812と異なるため、
https://os.mbed.com/users/va009039/code/lpc810_helloworld/
のmain.cppを使わせていただきました。
ここに引用させていただきます。
#pre{{
#include "mbed.h"
// LPC810 pinout
#define dp1 P0_5 // nRESET
#define dp2 P0_4 // WAKEUP
#define dp3 // SWCLK
#define dp4 // SWDIO
#define dp5 P0_1 // nISP
#define dp6 // VIN
#define dp7 // GND
#define dp8 P0_0
DigitalOut myled(dp8);
int main() {
while(1) {
myled = 1;
wait_ms(200);
myled = 0;
wait_ms(200);
}
}
}}
LPC810とjlink-OBの結線は、以下の通りです。
| LPC810 | Jlink-OB |h
| 6 VIN | VCC |
| 4 SWDIO | SWDIO |
| 3 SWCLK | SWCLK |
| 5 GND | GND |
最後に、デバッグしているLPC810の写真をお見せます。
&ref(LPC810_debug.png,,50%);
** コメント [#ff93bd6f]
#vote(おもしろかった,そうでもない,わかりずらい)
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
ページ名:
SmartDoc