いろいろ試す19

あっという間に(仕事上の)夏が終わってしまいました・・・日記上は更新してないので
夏ばてしてた様に見えるでしょうけどもじつは更なる跳躍のために私なりにいろいろ
やっていたのですよぅ!
とくに東海自然歩道関連もトレーニングを重ねて猛暑の中で難所をクリアしてきたので
こちらも近いうちにじっくりと・・・


●夏休みの工作・LPC4088

さて、円高の頃に買い込んでいた基板やチップの中で最後の大物で残っていたLPC4088
に着手をはぢめました。

基板はLPC1788ですがLPC4088はほぼピンコンパチなのでそのまま乗っけられます。生
基板なので仕事や家事終わったあとに大量の部品をちまちまちまちま付け続けお盆休み
明けにようやくFatFsまで動作を確認しました。

LPC1788のときと同様に大容量のSDRAM乗っけてます。STM32系と違ってheapや
stackとしてがんがん使ってもコケないのがすばらしい!(STM32系のFSMCはerrataとして
FSMC上のSRAMをheapやstackに使うなととうとう明記されてしまいました)

LPC4088はLPC1788には存在しないSPIFIインターフェースを持ちます。しかし・・・
困ったことにLPC1788系と互換性を保った結果LPC4300系と違いSSPポートの互換性がなく
OpenOCDから書けないことが判明orzOpenOCDはSPIFIではなくポート互換のSSPで書いて
たんですよね〜・・・ドライバの対応はnuvotonドライバの時よりしんどそうだったので早々に
あきらめ外付けのコネクタを設けてFlashROMを使って書き込みする作戦に変更しました。
SPIFIは容量を喰うFONTXファイルの置き場に使用していきます。

あと付けてないのはLCDインターフェースですがこれは私がいつも使ってるMCUバスでは
なくRGBでつなげるタイプのものを必要とするのでそれに合う液晶の調達から手を付ける
予定です。




●Kinetis K20/K10シリーズを触る
わざわざ独立の記事にするほどでもない超小ネタなのでここでさらっと紹介します。
少し前にFRDM-K20なるボードが販売されましたがこのシリーズの一番小規模のチップで
あるMK20DX32VLF5MK10DX32VLF5をちょっと触りました。写真はK10のほうです。

K20はUSBと内蔵3.3Vレギュレータが付いてて本当にこれひとつで完結した基板も作れ
ます。実際に安価に製作されている方もいるようです。

ねむいさんがこれを単品で購入した理由はOpenOCDの書き込み/デバッグ確認のため
だけに過ぎません・・・が、このチップ特有の機能にちょっとはまってしまいました。

以前、私はKL25やKL05を触りOpenOCDへの書き込み/デバッグを可能にしてきましたが、
K10/K20もコアがCortex-M4(F無し)違いでKLシリーズと同じように楽勝だろうと高を
くくってました。しかしPOR後のウォッチドッグタイマの挙動が違っていてブート直後に
即効ウォッチドッグの機能を殺しにいかないとせっかく書き込んだのにセキュリティ状態に
突入してしまい、mass-eraseして解除してからGDBからイメージをもう一回ロードしないと
デバッグできない事態になることが判明!

工場出荷時はセキュリティ状態は解除されてるらしいですがこのウォッチドッグリセットの
せいで実質セキュリティ状態になってる為STLink/V2などのMDM-APを直接叩くことが
不可能なデバッガハードウエアでは手詰まりになってしまいます・・・ぬぎゃー
(これFRDM-K20が国内販売されたらまたねむいさんのとこにプログラムが書けなくなった
 って質問飛んでくるんだろうなぁ・・・・)


●EFM32シリーズもおさわり
同じくOpenOCDの書き込み確認のために単品購入したチップです。EnergyMicroという
メーカのチップでしたが現在はSiliconLabs社に吸収されています。

Gecko(ヤモリ)のマークがチップ上に付けられたイカすデザインでCortex系のマイコンでは
超低消費電力方面に力を込めたラインナップとなっています。

ねむいさんがチラッと触った限りではCMSISライブラリがSTM32ばりに充実していてCMSIS
にどっぷりつかったねむいさんの流儀に非常に組み込みやすく最初の取っ掛かりのLチカ
作成が最速の30分で完成しました(逆に一番難儀したのはあちこちにファイルが点在して
て把握しづらく挙句の果てにKeilのサンプル中にしかCMSISヘッダファイルが無い品種も
あるKinetis・・・てか公式のサイトでリンク切れはまずいですよぅ)。

書き込みデバッグももちろんすんなり完了ですごい相性よかったのでメインのSTM32から
ちょっと浮気しちゃいそうです・・うそですよぅうふふふ




というわけでOpenOCDのバイナリには上記3品種の書き込みcfgファイルを追加してます。
パッチも前回から不備が見つかったものをさらに改修してますので私と同じ環境をお
持ちの方は試してみてくださいね〜
・・・すっかりOpenOCDありきのマイコンいじりになってしまいましたが実務ではルネサ
(日記はここで途切れている)

FM3が富士通からスパンションになりましたよ記念

20161123追:
富士通のFM3を喰ったSPANSIONはCypressに喰われました。



富士通のFM3マイコンに関する記事はもう更新しないでクローズにしようと思っていましたが、
国産マイコンだったFM3シリーズが大人の事情でSPANSIONというメモリ中心のチップベンダに
移譲された
ので記念に小ネタを更新します。

前回まではFM3マイコンにFatFsやTFT-LCDドライバなりを積だのを紹介してましたが
今回はOpenOCDのFM3フラッシュ書き込みドライバの改良についてです。


いつも参考にさせてもらっているjujurouさんによると小規模のRAM物理量が少ない品種で
書き込みが出来ない
とのことで、Kinetis-LシリーズやNuvotonのフラッシュ書き込み
ドライバを実装して実力をつけた私も調査してみました。




上の二つの図はFM3マイコンに収納されたフラッシュ書き込みのバイトコード(書き
込みアルゴリズム)と書き込むべきデータを簡略化した物の修正前と後の比較です。

フラッシュ書き込みはJTAG/SWDから内蔵SRAMに流し込んでおいたバイトコードをOpenOCD
側の"run_algorithm"にて実行させることにより行われていますが、その中でSRAM上にある
"u32DummyRead"と"u32FlashResult"の値を参照しています。この二つの変数は、アルゴ
リズムを確保したメモリの先頭に置かれるため、アルゴリズム開始アドレスは、本来は
基底アドレス(BaseAddress)から+8ずれることになります。

おそらく最初にドライバを作った時のデバイスがMB9BF506NだけだったようでSRAMの基底と
なるアドレスが0x1FFF8000に固定化されていました。しかしFM3シリーズの内蔵SRAMの
構造は、0x20000000をベースとして上下に伸びていく仕組みなので安全牌で動かすためには
本来なら基底を0x20000000にしなければなりません。現状ではSRAM量が物理的に少ない
品種ではOpenOCDのcfgファイル内でSRAM量とSRAM開始アドレスを"正しく"指定すると、
jujurouさんの指摘通りSRAMが存在しないアドレスを参照することになり、書き込みが必ず
コケる羽目になってしまいます。


というわけで私も私なりに修正してなおかつ書き込みパフォーマンスを上げる修正を盛り
込んでパッチを作成しました。先ず以前使っていたMB9BF618Tで当然のように書き込みを
確認しました。さらに今回の問題が修正されてるのを確認するためにebayで小規模のFM3
マイコンMB9AF112K(Flash:128kB/SRAM:16kB)を仕入れて動作確認を行いました。
↓やっけつ基板


ログはこんな感じです。ばっちり書き込み出来てますね♥
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/vsllink_swd.cfg -f target/mb9af112k_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.8.0-dev-00117-gf7fed92-dirty (2013-08-12-20:01)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : OpenOCD runs in SWD mode
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
trst_only separate trst_push_pull
adapter speed: 500 kHz
cortex_m reset_config sysresetreq
verify Capture-IR is disabled
Info : Versaloon(0x15)by Simon(compiled on May 22 2013)
Info : USB_TO_XXX abilities: 0x0000076E:0x010001EF:0xC0000007
Info : clock speed 500 kHz
Info : Found SWD-DP id:0x2BA01477
Info : mb9bfxx2.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000114 msp: 0x20002000
auto erase enabled
Info : Fujitsu MB9[A/B]FXXX: Sector Erase ... (0 to 2)
Info : Fujitsu MB9[A/B]FXXX: FLASH Write ...
wrote 131072 bytes from file main.elf in 4.344639s (29.462 KiB/s)
verified 33456 bytes in 0.109398s (298.651 KiB/s)
shutdown command invoked

> Process Exit Code: 0
> Time Taken: 00:05



さて、上記FM3の修正のほかにkinetisドライバとNuvotonドライバのブラッシュアップも
行い、8月11日時点のOpenOCDのコミットに適用したパッチ群も更新しました。
もちろんOpenOCDのバイナリも修正していますので奇しくも時を同じくして一般販売と
なった「FM3-USBSTICK」を購入された方は試してみてください(私はMB9AF112Kで試し
ましたがメモリ構造が同様のMB9AF312Kでもまったく同様に使用できます)。



・・・
本来はこの程度の小ネタはブログトップのサブタイ欄にちょっと書いて終わるはずな
のですがVersaloonのBBSにKinetis-LドライバやNuvotonドライバのパッチを紹介した
ことでntfreakリンサンの目に留まり、OpenOCDのgerritにFM3の修正を含めたいくつかの
パッチを叩き上げられることにめでたく相成りました。しかし、そのFM3ドライバのパッチ
はまだバグが修正仕切れてなかった欠陥版だったのがつい最近判明したので、
汚名返上のために私自身もOpenOCDのコードレビューシステムに電撃参戦する意を
決めました!!

とはいえパッチを提供するまでに覚える事柄が非常に多く英語による意思の疎通も
非常に重要になります。なんにせよひとつずつ目的達成までの課題をあせらずクリア
していくほかありませんが汚名挽回をしてしまわないように気をつけます・・・。

Go to top of page