flink: Hello worldへの作戦を考える
DA14531MOD は、そもそも開発用の拡張ボードと一緒に使うことが想定されているため、単体ではプログラムを書き込む手段が無い。
とりあえず:
- JTAGを開通させる
- メモリマップを調べ、SDKとその辺のgccを使ってプログラムをリンクする -- 公式SDKではKeil(本家SDK https://pages.switch-science.com/mdkarm/ )を前提にしている
- JTAG経由でプログラムを送りこみ、動作を確認する
というステップで行きたい。
prev
今見たら700円以上に値上っている。。円安というわけではなく、そもそもモジュールの卸値がかなり上がっているようだ。
配線
適当に配線。。Raspberry Pi Pico側は、
- 4 = SWDCLK
- 5 = SWDIO
- 6 = NC(UART TX)
- 7 = UART RX
JTAGの開通
OpenOCDを適当に設定する。
source [find target/swj-dp.tcl]
set _CHIPNAME da14531
set _ENDIAN little
# FIXME: Source?
set _CPUTAPID 0x0bc11477
swj_newdap $_CHIPNAME cpu -irlen 4 -expected_id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
こういう感じにTCLを書いて、
./src/openocd -f interface/cmsis-dap.cfg -c "adapter speed 5000" -f target/da14531.cfg -s tcl
のようにすることで、ちゃんと認識された。
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 0 SWDIO/TMS = 0 TDI = 0 TDO = 0 nTRST = 0 nRESET = 0
Info : CMSIS-DAP: Interface ready
Info : clock speed 5000 kHz
Info : SWD DPIDR 0x0bc11477
Info : [da14531.cpu] Cortex-M0+ r0p1 processor detected
Info : [da14531.cpu] target has 4 breakpoints, 2 watchpoints
Info : starting gdb server for da14531.cpu on 3333
...データシートにこの辺の情報が無い。。Cortex側のconfig情報くらい載せてくれても良いと思うんだけど。。
GCC_EXEC_PREFIX
が設定されない問題
"environment variable 'GCC_EXEC_PREFIX' not defined"
これはCrosstool-ng側の問題な気がする。。とりあえず手で設定してからビルドする。
export GCC_EXEC_PREFIX=/opt/yuniboard/arm-m0p/lib/gcc/
ビルド結果がでかい
とりあえず https://github.com/dialog-semiconductor/BLE_SDK6_examples/tree/1be8e291bbbdf1c56724667ac876e318b6ee8706/connectivity/active_scanner のサンプルをビルドしてみる。
text data bss dec hex filename
23080 4324 2716 30120 75a8 /home/oku/repos/flink-priv/build/flink_531.elf
... でかい。。あと、そもそもサンプルのビルドシステムをパッチしないと正常にビルドできなかった。
diff --git a/build_utils/gcc/dialog-sdk.cmake b/build_utils/gcc/dialog-sdk.cmake
index 042ba679..c25a1575 100644
--- a/build_utils/gcc/dialog-sdk.cmake
+++ b/build_utils/gcc/dialog-sdk.cmake
@@ -280,6 +280,8 @@ set(DIALOG_SDK_SOURCES_531
${DIALOG_SDK_PATH}/sdk/platform/arch/boot/system_DA14531.c
${DIALOG_SDK_PATH}/sdk/platform/arch/boot/GCC/ivtable_DA14531.S
${DIALOG_SDK_PATH}/sdk/platform/arch/boot/GCC/startup_DA14531.S
+
+ ${DIALOG_SDK_PATH}/sdk/platform/system_library/src/DA14531/system_library_531.c
)
set(DIALOG_SDK_SOURCES_58x_BLE
まぁそのうち直るかな。
動いてるんだけどデータが化けている
ちょっと配線がダメすぎるか。。?ロードは単にCPUをhaltしてメモリに書き込み、レジスタ SYS_CTRL_REG
の15ビット目に1を設定してリセットを掛ける。( SYS_CTRL_REG
の残りのビットはJTAGのポートとメモリのremap。)
halt
load_image /home/oku/repos/flink-priv/build/flink_531.hex
write_memory 0x50000012 16 0x81a2
Debuggerの配線を抜くと正常になる。なのでPicoprobe側のUARTは正常で、問題はUARTのGPIOを正常に設定できていないというところだろうか。
だいたい1周期6msくらいで、ピークが3mA程度。仕様の範囲内だな。