OpenOCD小ネタ19 -Nuvotonドライバの統合-
今をさかのぼること2年前、いろんな行き違いによって同じNuvotonのCortex-M0
向けフラッシュ書き込みドライバが同時にマージされる事態になってしまいました。
その間もいろいろあってなかなか更新できなかったのですが今秋に両者を統合
するドライバがマージされたのでようやく報告できた次第です。
さて、この統合されnumicroと名前を変えたこのフラッシュ書き込みドライバは
少しトリッキーな動きをします。それを少し解説します。
●Undocumented Registerの存在
NuvotonのARMマイコンのフラッシュ領域はユーザプログラム用のAPROMとブート
ローダ専用のLDROMの二つがあり、書き換えをするためにはそれぞれ別のフラッシュ
ブートモードから再起動する必要があります。つまりAPROMを書き換えたい場合は
LDROMのブートモードに切り替えコアリセットを掛けるという手間がかかります。
これが公式のマニュアルに記載されている手順です。
しかし!このような煩雑な手順を踏まなくてもどのモードでもAPROM,LDROM,
CONFIGの書き換えそしてチップ全消去コマンドが実行できる方法が解析により
見つかっています。
マニュアルに記載されていないレジスタ0x5000C01Cに1を書き込むとフラッシュ
に対する全てのアクションが出来てしまうようです。Nu-Linkのツールではこれを
自動で行っていることから気づき解析されたみたいですね。
そして上記の成果はOpenOCDに反映されましたがこのときはまだmini51シリーズのみ
だったため、私の手持ちの他のシリーズ(NUC120,NUC220,M051,NANOシリーズ等)で
この技が効くかどうか確認し、OpenOCDの更新が落ち着いたタイミングを見計らって
今回の統合をおこない、無事マージされました。長かった…!
上記の修正を掛けたドライバでNANO130に書いた時のログはこんな感じです。
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd  -s C:/Devz/ARM/OCD/tcl -f interface/vsllink_swd.cfg -f target/numicro_swd_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.10.0-dev-00036-g48787e1-dirty (2015-10-02-09:14)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : VSLLink SWD mode enabled
swd
adapter speed: 1000 kHz
none separate
cortex_m reset_config sysresetreq
Info : Versaloon(0x15)by Simon(compiled on Sep 16 2014)
Info : USB_TO_XXX abilities: 0x0000176E:0x010001EF:0xC0000007
Info : clock speed 1000 kHz
Info : SWD IDCODE 0x0bb11477
Info : NuMicro.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x21000000 pc: 0x000002d6 msp: 0x20003ff0
auto erase enabled
Info : Device ID: 0x00113034
Info : Device Name: NANO130SE3BN
Info : bank base = 0x00000000, size = 0x0001ec00
Info : Nuvoton NuMicro: Sector Erase ... (0 to 40)
Info : Nuvoton NuMicro: Flash Write ...
wrote 20992 bytes from file main.elf in 4.078360s (5.027 KiB/s)
verified 20800 bytes in 0.281266s (72.218 KiB/s)
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:05
一応デバッグもできますが今回の統合に至るまでにnuvotonのドライバの他にadi_v5や
cortex-mのコードにかなりの修正が掛かっており、リセット直後の状態が特殊な
nuvoton系のARMマイコンでは正攻法が通じなくなっていました。
そこで上手くデバッグできるようにcfg側も仕込んでトリッキーなことをしています。
gdbが接続した瞬間にresetとhaltを連続してかけ("reset halt"だと駄目)、さらに
プログラムカウンタを強制的に0にしておきます。

当然割り込みベクタの一番頭で停止しますがここでcontinueすると・・・

無事main関数の頭でブレークしました★
ちなみにOpenOCD側だけでは不完全でプロジェクト側も多少の修正は必要でした。
おきぱのNUC120,M0516のプロジェクトはすでに新しいOpenOCDに対応しています。
念のため他の品種も洗ってみたのですがnuvotonドライバだけではなくLPC4300系の
SPIFIの書き込みもおもいくそ影響を受けていて書き込みできてませんでしたorz

↑最後のほうでエラー出てますがコアリセットをソフト的に強制的に掛けてるので
こうなります。動作としては問題ないです。
こちらも現行のOpenOCDで正しく動作するようにcfgファイルに修正をかけておきました
ので皆さん安心して使い倒すことができると思います。
根幹に近い文字通りコアな部分をひっそり変えられると思わぬところで上手く動か
なくなるのはよくある事なので私の目の黒いうちはしっかり注視していこうと思います。
	

免責・連絡先は↑のリンクを
↓SNSもやってます↓
powered by まめわざ
	- ARM/STM32 (119)
 - OpenOCD (27)
 - ARM/NxP (34)
 - ARM/Cypress (5)
 - ARM/Others (3)
 - ARM/Raspi (1)
 - AVR (13)
 - FPGA (4)
 - GPS/GNSS (20)
 - MISC (86)
 - SDCard_Rumors (1)
 - STM8 (2)
 - Wirelessなアレ (16)
 - おきぱ (1)
 - ブラウザベンチマーク (29)
 - 日本の自然歩道 (27)
 
	- GNSSモジュールを試用する21 -SAM-M10Qが壊れた…!?と思ったら直せた(おまけあり)-
⇒ Kenji Arai (05/29) - GNSSモジュールを試用する21 -SAM-M10Qが壊れた…!?と思ったら直せた(おまけあり)-
⇒ ねむい (05/26) - GNSSモジュールを試用する21 -SAM-M10Qが壊れた…!?と思ったら直せた(おまけあり)-
⇒ Kenji Arai (05/24) - 中部北陸自然歩道を往く -砺波平野の県境を駆け抜ける!-
⇒ ねむい (12/18) - 中部北陸自然歩道を往く -砺波平野の県境を駆け抜ける!-
⇒ ひかわ (12/15) - STM32U0はぢめました
⇒ ねむい (08/07) - STM32U0はぢめました
⇒ ひかわ (07/28) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (05/17) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) 
	- October 2025 (1)
 - September 2025 (1)
 - August 2025 (1)
 - July 2025 (1)
 - June 2025 (1)
 - May 2025 (1)
 - April 2025 (1)
 - March 2025 (1)
 - February 2025 (1)
 - January 2025 (1)
 - December 2024 (2)
 - November 2024 (1)
 - October 2024 (1)
 - September 2024 (1)
 - August 2024 (1)
 - July 2024 (1)
 - June 2024 (1)
 - May 2024 (1)
 - April 2024 (1)
 - March 2024 (1)
 - February 2024 (2)
 - January 2024 (1)
 - December 2023 (4)
 - November 2023 (2)
 - October 2023 (2)
 - September 2023 (1)
 - August 2023 (2)
 - July 2023 (1)
 - June 2023 (2)
 - May 2023 (3)
 - April 2023 (1)
 - March 2023 (1)
 - February 2023 (1)
 - January 2023 (1)
 - December 2022 (2)
 - November 2022 (1)
 - October 2022 (1)
 - September 2022 (1)
 - August 2022 (1)
 - July 2022 (1)
 - June 2022 (1)
 - May 2022 (1)
 - April 2022 (1)
 - March 2022 (1)
 - February 2022 (1)
 - January 2022 (1)
 - December 2021 (2)
 - November 2021 (2)
 - October 2021 (1)
 - September 2021 (1)
 - August 2021 (1)
 - July 2021 (1)
 - June 2021 (1)
 - May 2021 (1)
 - April 2021 (1)
 - March 2021 (1)
 - February 2021 (1)
 - January 2021 (1)
 - December 2020 (3)
 - November 2020 (1)
 - October 2020 (1)
 - September 2020 (1)
 - August 2020 (1)
 - July 2020 (1)
 - June 2020 (2)
 - May 2020 (1)
 - April 2020 (1)
 - March 2020 (1)
 - February 2020 (1)
 - January 2020 (1)
 - December 2019 (3)
 - November 2019 (1)
 - October 2019 (1)
 - September 2019 (2)
 - August 2019 (1)
 - July 2019 (1)
 - June 2019 (1)
 - May 2019 (1)
 - April 2019 (1)
 - March 2019 (1)
 - February 2019 (1)
 - January 2019 (1)
 - December 2018 (3)
 - November 2018 (2)
 - October 2018 (1)
 - September 2018 (1)
 - August 2018 (1)
 - July 2018 (1)
 - June 2018 (1)
 - May 2018 (1)
 - April 2018 (2)
 - March 2018 (1)
 - February 2018 (1)
 - January 2018 (1)
 - December 2017 (2)
 - November 2017 (2)
 - October 2017 (1)
 - September 2017 (1)
 - August 2017 (1)
 - July 2017 (1)
 - June 2017 (1)
 - May 2017 (1)
 - April 2017 (1)
 - March 2017 (2)
 - February 2017 (2)
 - January 2017 (2)
 - December 2016 (7)
 - November 2016 (2)
 - October 2016 (2)
 - September 2016 (1)
 - August 2016 (1)
 - July 2016 (1)
 - June 2016 (1)
 - May 2016 (2)
 - April 2016 (1)
 - March 2016 (2)
 - February 2016 (1)
 - January 2016 (1)
 - December 2015 (3)
 - November 2015 (1)
 - October 2015 (3)
 - September 2015 (2)
 - August 2015 (2)
 - July 2015 (3)
 - June 2015 (3)
 - May 2015 (4)
 - April 2015 (2)
 - March 2015 (4)
 - February 2015 (1)
 - January 2015 (3)
 - December 2014 (3)
 - November 2014 (2)
 - October 2014 (1)
 - September 2014 (2)
 - August 2014 (2)
 - July 2014 (3)
 - June 2014 (2)
 - May 2014 (1)
 - April 2014 (1)
 - March 2014 (4)
 - February 2014 (4)
 - January 2014 (3)
 - December 2013 (5)
 - November 2013 (4)
 - October 2013 (3)
 - September 2013 (2)
 - August 2013 (2)
 - July 2013 (2)
 - June 2013 (3)
 - May 2013 (2)
 - April 2013 (2)
 - March 2013 (2)
 - February 2013 (2)
 - January 2013 (3)
 - December 2012 (4)
 - November 2012 (2)
 - October 2012 (2)
 - September 2012 (4)
 - August 2012 (1)
 - July 2012 (3)
 - June 2012 (2)
 - May 2012 (3)
 - April 2012 (3)
 - March 2012 (2)
 - February 2012 (3)
 - January 2012 (3)
 - December 2011 (5)
 - November 2011 (3)
 - October 2011 (2)
 - September 2011 (2)
 - August 2011 (2)
 - July 2011 (2)
 - June 2011 (2)
 - May 2011 (2)
 - April 2011 (2)
 - March 2011 (2)
 - February 2011 (2)
 - January 2011 (3)
 - December 2010 (7)
 - November 2010 (1)
 - October 2010 (1)
 - September 2010 (1)
 - August 2010 (3)
 - July 2010 (4)
 - May 2010 (1)
 - April 2010 (2)
 - March 2010 (2)
 - February 2010 (2)
 - January 2010 (3)
 - December 2009 (3)
 - November 2009 (8)
 - October 2009 (7)
 - September 2009 (5)
 - August 2009 (4)
 - July 2009 (6)
 - June 2009 (6)
 - May 2009 (14)
 - January 1970 (1)
 
Copyright(C) B-Blog project All rights reserved.
Comments
Post a Comment