Kinetis Lシリーズはぢめました
20161123追:
FreeScaleはNxPに喰われました!
"OpenOCD + CMSIS-DAP"の検索で飛んできた方はこちらをご覧ください。
バレンタインチ○コのかわりに先行で公開しておりましたが、Versaloonと
OpenOCDを使用したいつもの書き込み・デバッグ環境がFreescaleのCortexM0+
コアが載ったKL25シリーズでもできるようになりましたのでお伝えします。
●もうこういう無駄な買い物は止めようはと思います…が
このFRDM-KL25ZというボードにはMKL25Z128VLK4というKinetis L
シリーズの石が乗っかっています。当時はいち早くCortexM0+コアを搭載を
謳っていた物で、OpenSDAというオープンソース(らしい)デバッガハードウエアも
搭載されて1000円台で販売されてます。それにしてもこのボードも安いですね。
どのメーカもデバッガハードウエアがついて1000円台が当たり前の時代に
なりました。
時系列的には同じくCortexM0+コアを持つLPC800と同時期に入手して
いましたがFreeScaleの石はあまり食指が伸びずほおっていました。
そのまま腐らせるのももったいないのでちょっといじってみようと思い
たったわけです。
私が目を付けたのはKL25Zの石よりもOpenSDAの方でした。とにかくデバッガ
側のUSBコネクタをPCと繋げるとマスストレージとVCPとが認識されます。
このマスストレージはmbedでおなじみのD&Dで書き込みができるってタイプの
奴です。ソースコードデバッグを行うためにはOpenSDAのファームウエアを
書き込む必要があります。同じくこれに対応したGDBサーバをP&Eマイクロから
取得する必要があります。
が、
フリー版のそれは使用に耐えないくらい動きがカクカクでプログラムのダウン
ロードも制限されています。我慢してこれ使うくらいなら最初のマス
ストレージ使う書き込みでカットアンドトライした方が10000倍マシです。
というわけでボード単体でデバッグ環境建てるやり方に見切りをつけて
冒頭で述べたSWD接続方式のVersaloon+OpenOCDという王道で環境を
作ることにしました。
↑カカロット!お前がカクカクナンバーワンだ!
↑ちなみにOpenSDAのファームをCMSIS-DAPに入れ替えるとCoFlashが使えます。
●Versaloon+OpenOCDで使えるようにしてみる
FreeScaleの石といえどもコアがCortexM0+なのでSWDで引っ掛けるのは
たやすいです。先ずはマスストレージで書き込んだプログラムをOpenOCDと
insightでデバッグは問題なく確認できました。ちなみにOpenSDAのSWDは
切り離さずともVersaloonとつながるので基板パタンのカットなどの作業は
必要なくSWDの線を引っ張り出すだけです。
次に書き込みですが…OpenOCDのkinetisドライバは現在KL25Lシリーズには
対応していないのでLPC800の時と同じように自分で実装する必要が
ありました。kinetisドライバはフラッシュ書き込みを行うのにRAMにプログラム
を乗っけて一気に書き込む方式と4バイトずつ書き込んでいく方式があります。
これはkinetisの各モデルで使用できる書き込み方式が決まっていてKL25では
後者の"Program Longword"というコマンドでしか書き込むことはできません。
幸いにもKL25シリーズはチップ固有IDがかなり細かいところまでわかるので
これを利用して既存のモデルの書き込みになるべく影響しないようにKL25の
書き込みルーチンを作りこんでいきました。
↓そして完成したドライバの書き込み結果がこちら
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/vsllink_swd.cfg -f target/kl25z_swd_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.7.0-dev-00159-g87668ae-dirty (2013-02-15-17:44)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : OpenOCD runs in SWD mode
none separate
Info : add flash_bank kinetis pflash
adapter speed: 1000 kHz
cortex_m3 reset_config sysresetreq
Info : Versaloon(0x15)by Simon(compiled on Feb 20 2013)
Info : USB_TO_XXX abilities: 0x0000076E:0x010001EF:0xC0000007
Info : clock speed 1000 kHz
Info : kl25z.cpu: hardware has 2 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x000000cc msp: 0x20003000
Rize up to Internal PLLed Clock!
Info : Probing flash info for bank 0
Info : KL24/25Series Erase All Blocks
Info : Write to MCU security status unsecure
erased sectors 0 through 127 on flash bank 0 in 0.046875s
Warn : KL24/25 supports Program Longword execution only.
wrote 6676 bytes from file main.elf in 5.453125s (1.196 KiB/s)
verified 6676 bytes in 0.156250s (41.725 KiB/s)
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:07
先にも述べましたが低速な"Program Longword"による書き込みは現状のkinetis
ドライバではDAPを毎回叩いてチマチマホストPCから命令をおくっているため通信の
オーバーヘッドが非常に大きくなりMAX2kByte/Secくらいしか速度が出ませんorz
STM32みたくRAM上に小さいブートローダー流し込んでそこをデータの受け
渡し場にしてアトミックに書き込みを行うようにしないとこれ以上速度は出ませんが
↑結局自分で実装しました!超快適です♥
↓ちなみにSTLink/V2でも当たり前のように書き込み・デバッグが可能です。
20130419追:重要!!!
STlink/V2 firmware version MUST upgrade to V2.J17.S0!
↓
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/stlink-v2.cfg -f target/kl25z_hla_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.7.0-dev-00159-g87668ae-dirty (2013-02-15-17:44)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
none separate
Info : add flash_bank kinetis pflash
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v16 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.894991
Info : kl25z.cpu: hardware has 2 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x000000cc msp: 0x20003000
Rize up to Internal PLLed Clock!
Info : Probing flash info for bank 0
Info : KL24/25Series Erase All Blocks
Info : Write to MCU security status unsecure
erased sectors 0 through 127 on flash bank 0 in 0.046875s
Warn : KL24/25 supports Program Longword execution only.
wrote 6676 bytes from file main.elf in 5.078125s (1.284 KiB/s)
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x2000002e msp: 0x20003000
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x2000002e msp: 0x20003000
verified 6676 bytes in 0.062500s (104.312 KiB/s)
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:05
まぁOpenSDAのマスストレージからの書き込みが使い勝手が非常に良いので
書き込みはMSCから、デバッグはVersaloon+OpenOCDと使い分けるのがよい
でしょう。そのうちkinetisドライバに手を入れてくれる人が出ると思い
ますから…ふふふふふふふふふふふふふふふふf
●FreeScale Kinetisシリーズを使う上で必ず守るべき事項
今回の記事はこの項を特に頭に叩き込んでください!!
知らずにやってしまうとゴミにしてしまいます!!!!!
KinetisシリーズのARMマイコンはNxP系のARMマイコンと同じくフラッシュ
メモリの特定の領域にMCUのコンフィグレーションが設定されています。
具体的に言うと0x00000400番地以降の16バイトが相当します。
メーカお仕着せのツールではこの番地にユーザープログラムを置かないように
配慮されておりますがGCCで一からプロジェクトを作り上げる人はこの番地は
コンフィグレーション専用の番地としてしっかり設定して置きましょう。
具体的にどうやるかは私のサンプルを参考にしてください。
ついでですがメーカ提供のUARTドライバというかいろんなものがちょっと
出来が悪すぎるのでSTM32でも使ってるUARTドライバを移植してます。
話がそれましたが、一番気を付けるべきはフラッシュメモリの0x0000040Cから
読みだし設定されるFSECというレジスタです。ここの値の下2bit分が(00,01,11)
の場合Secure状態と判断されSWD経由のアクセスがある特定の操作を除いて
一切不可能になります(マニュアル73-74p参照)。
…もうお気づきだとは思いますが、つまりは内蔵フラッシュメモリの2番目の
セクタの消去orメモリ全消去の操作をしてアンプログラムド(すべてのビットが1)
にしてしまうとコードセキュリティが働いて以後のSWDのアクセスが特定の
操作以外は実質不可能になってしまいます!!!
おまけにSTM32やLPCマイコンでは可能だったシステムブートローダからの
起動によるセキュリティ状態をキャンセルするという軟弱な救済措置は、
KL25シリーズではシステムブートローダ自体が存在しないため不可能という
非常に男気あふれる仕様となっております!!
(注:工場出荷時は0x0000040Cに0xFEを書き込んで出荷されているため、いきなり
動作不能とかはないです)
唯一の解除方法はデバッグポートの下位のレベルの"MDM-AP Control register"
に全消去ビットを送り込んで(この操作を行うと全消去された後0x0000040Cに
0xFEが書き込まれる)で工場出荷時のフラッシュメモリの状態に戻すことです。
ねむいさんが試したところではOpenSDAのマスストレージモードやCMSIS-DAPは
この操作を先に行っているようで、わざと0x0000040Cが0xFFなプログラムとか
書き込んだ後でもふつーに操作可能です。
幸いにもOpenOCD中のarm_adi_v5.cにはkinetisマイコンに対してローレベルで
SW-DPを叩くことができるコードが追加されています。ねむいさんはこちらにも
手を加えて、KL24/25シリーズでもこの復活措置を可能にしました。
しかしながらこの操作はSRSTの物理操作が必ず要求されるため、Versaloonに
SRSTの線を追加するかもしくは手動リセットでタイミングよく解放してやる
等の小手先の技が要求されます。
秒単位の話なのでタイミングに慣れるとそれほどの事じゃないですが…
それと当たり前ですがarm_adi_v5.cを経由しないSTLink/V2やTI-ICDIのような
API召還型のタイプのアダプタは直接SW-DPを叩けないため、この回復技は
一切不可能なのでご注意を。
ちなみに0x0000040Cにはmass_erase許可ビットも4-5bit目に存在しており、
"0xEF"と書き込んじゃうとSW-DPを直接たたく全消去操作もできなくなって
しまい完全にゴミと化します
ねむいさんが公開しているFRDM-KL25Z向けのサンプルプログラムとKL24・25
シリーズに対応したOpenOCDはプログラム上でも書き込み時も0x0000040Cに
0xFFにしてしまわないように配慮を行っているので安心してお使いください。
Versaloon+OpenOCDの組み合わせだけでも幸せになれると思います。
ぱっちもここに置いてるのでだれか腕のある人続けてくだち…。
↑結局自分で実装しました!超快適です♥
GPSモジュールを試用する8
20230822追:
最強のGNSSモジュールSAM-M10Qをゲットせよ!
20230822追:
去年、東海自然歩道の家山->久能尾のルートにてGLONASSに対応したGms-g6aという
GNSSモジュールをお披露目しました。今回はこのモジュールと過去の製品と実際の
フィールド上で性能比較を行いましたのでお知らせします。
去年私はMT3339というQZSS(みちびき)対応のチップが載ったPA6Cを紹介しています。
Gms-g6aはそれに加えてロシア版GPSであるGLONASS、同じく欧州版のGALILEOに対応
(ただしオプション扱い)したMT3333というチップが搭載され、アンテナもパッチ
アンテナではなく軽量小型のチップアンテナとなっています。過去の製品と
カタログ上のスペックを比較すると以下のようになります。
"
一般的には受信感度は利得に指向性があるパッチアンテナ>チップアンテナと
なりますが、Gms-g6aではGLONASSも標準で測位に利用できるのでそれがどこまで
寄与できるかに焦点が集まるはずです!その前に…
先にも言ったようにGms-g6aは指向性が低いチップアンテナのため実装時はパッチ
アンテナの物と全く違う配慮が必要になります。データシートをよく読んで設計を
行いましょう。
もちろん電源の配線も重要です。受信感度の低下を抑えるためにVCCラインの
ばたつきは50mV以内に収める必要があります。今回は秋月さんの3端子コンデンサ
を使い、綺麗な電源電圧波形を得ています。
また、Gms-g6aではGLONASS補足時に吐き出される一部センテンスが動的に
変わります。たとえば$GPRMCの場合は$GNRMCとなりGLONASSの捕捉が
わかる仕組みとなっています。
したがって自作のGPSロガーで使用する場合、"$GNxxx"のセンテンスの解釈を
新たに加える必要性があります。
さらに使ってみて判明しましたが一定時間補足できないとローパワーモードに入って
しまい黙ってしまうのでテストパケット等を送信して起こしてやる必要もあります。
詳しい操作はは私のSTM32Primer2を使ったGPSロガーのソースコードを参照
してください。厳しい環境に耐え抜いて使用されてきたお墨付きです。
そして今回の目玉の実地における比較ですが、今回は上空が開けていて遮蔽物が
ない場所として、地元の東山山頂公園(将軍塚の近くにある)を実験場所として
選びました。
因みにここは野良猫が
沢山いるのですがどの子も不自然に丸々と太った…
ひなたぼっこして…
おっと失礼、本来の目的はGPSモジュールの比較試験でしたね〜
今回の比較試験の対象としてMTK3329が載ったUP501,MT3339が載ったおなじみPA6C、
そして今回の目玉のMT3333が載ったGms-g6aをサンプルとして選び、各モジュールの
cold,warm,hotスタート時の補足時間の平均を行います。
このモジュールはSTM32Primer2をベースにしたGPSロガーに接続され、同ロガーの
VCP機能を経由してPCにUARTのデータを垂れ流しにします。
PC側のツールはGTopが提供するGNSS対応の新しいツール"GPSViewer"を使って
ます。各起動状態のテスト回数の指定もできてxlsx形式でデータが保存できる
すごいやつです!
Gms-g6aから各状態からの補足時間を記録していきました。この日の最低気温は
氷点下になっていたそうですが…めっちゃ寒かった…ぶるぶる…
…Gms-g6aのコールドスタートの補足がなかなかうまくいきませんので後回し…
まぁ他のモジュールもコールドはこんなもんでしょと思ったのですが…
(UP501の補足テスト中)
やべー曇ってきたよ…風も出てきた…
(↑見えづらいですが雪が舞ってます)
ブルブルガクガク
さてGms-g6aのコールドのデータ取り直そう…
いつの間にか猫ちゃん達も暖かい場所に逃げたようで居なくなっていました。
すっかり体が冷え切った頃に最後のデータも採り終わりましたがおかげで風邪
ひいてしまいました。さて、気になる結果ですが、下の表に今回使用した3つの
モジュールの各状態からのTTFFと各DOPの平均です。
御覧の通りPA6Cが全てにおいて圧倒的な性能を見せつけました…orz
PA6CとGms-g6aはパッチアンテナvsチップアンテナという空中線の性質の差も
あります。
残念ながらGLONASSの付与を持ってしてもパッチアンテナの物との差は埋められ
ないようですね。とはいえチップアンテナは非常に軽量でパッチアンテナよりも
壊れずらいので測位が少し劣るのを理解して使う分では十分使用に足ると思います
(私も実際に東海自然歩道で使用しましたし)。
というわけでPA6C最強伝説が図らずも証明されてしまいましたがMT3333/MT3332の
乗ったモデルはパッチアンテナ版も存在するようなので為替レートが落ち付いたころに
またパッチアンテナ版を購入して挑戦していきたいと思います!
-
免責・連絡先は↑のリンクを
↓SNSもやってます↓
powered by まめわざ- ARM/STM32 (117)
- OpenOCD (27)
- ARM/NxP (34)
- ARM/Cypress (5)
- ARM/Others (3)
- ARM/Raspi (1)
- AVR (13)
- FPGA (4)
- GPS/GNSS (19)
- MISC (80)
- STM8 (2)
- Wirelessなアレ (16)
- おきぱ (1)
- ブラウザベンチマーク (28)
- 日本の自然歩道 (25)
- STM32U0はぢめました
⇒ ねむい (08/07) - STM32U0はぢめました
⇒ ひかわ (07/28) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (05/17) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - いろいろ試す61(と今年の反省会)
⇒ ねむい (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/01) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (12/31) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ひかわ (12/31)
- 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 (7)
- May 2009 (14)
- January 1970 (1)
Copyright(C) B-Blog project All rights reserved.