Coretex-M3/M4 =
GCC + OpenOCD with PN2

IMAGE12.GIF - 2,801BYTES

2012年7月8日 追記 OpenOCDでの問題とその解決(ここ)
2012年5月3日 追記 MB9BF618T関連
2012年5月1日 新規作成

STM32L152に関してはここに追加情報を記載しました(2012/8/19)
1 はじめに
2 開発環境
3 どんなCPUを使ったか
3.1 STM32L152
3.2 STM32F407
3.3 LM3S9B92
3.4 LPC1768
3.5 MB9BF618T
4 サンプルプログラム


1 はじめに
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<やりたいこと>
色々なCPUを使う為に色々な開発環境で、無償版の多くの制限事項をだましだまし使用してきました。
ARMのCPUを本命として、ブレークポイントを使った本格的なDebugまで出来る総合的な無償の開発環境をなるべく制限なしで作りたいと思いました。


<ねむいさんのぶろぐ>
ARMの開発を続ける中で困ったことがあると、いつも助けてもらう場所がねむいさんのぶろぐです。
今回、開発環境を刷新することにしました。
実は、各社の無償版による制限をもう少し緩和するには、ねむいさんの開発環境に移行するのが良いとの結論となりました。
今まではARMを下記のような環境で開発してきました。

CPU 開発環境
(1)
開発環境
(2)
PC環境
LPC1768 Eclipse
+ GCC (Sourcery G++ Lite)

Debug環境無し
(OCDを使いこなせていない)

code_red LPCXpresso
+ LPC-Link

無償版:128KB以下のROMサイズ
Microsoft Windows XP
Professional Version 2002
Sevice Pack 3
STM32L152 Atollic TrueSTUDIO
+ ST-Link/V2

無償版:ブレークポイントは一箇所のみ
LM3S9B92 TI Code Composer Studio 4
+ ICDI

無償版:期間限定

趣味の電子工作を楽しむには、無償で開発環境を作ることが重要と思っているのですが、上記の様にやっぱり中途半端です。
特にEclipse上での環境は、実機でトレースやブレークポイントを設定したうえでのDebug設定が上手く出来ていません。

そんな中、「ねむいさんのぶろぐ」でEclipseを使用しないでデバッグ環境を構築していることがわかり、早速全部をいただいて環境を作ってみました。
ねむいさん、本当にありがとうございます。これからもよろしく。

ねむいさんの開発環境の設定と特徴は、このページに書かれています
私も殆どの部分を、ねむいさんの情報を基に構築していますが、OpenOCDとしてVersaloonはまだ使用していません。




2 開発環境の構築
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<Webからもらってくるもの>

ソフトウェア 入手場所 (私の使用したツールの)バージョン情報 その他の情報
Sourcery CodeBench Lite Edition Mentor Graphics arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1 必読
ねむいさんのぶろぐ
ARMマイコンをGCCでビルドする環境を整える(2012年版)
Programer's Notepad 2 (PN2) Programmer’s Notepad Version: v2.3.230
OpenOCD Joomla! Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25) 正式リリース版はここです
ねむいさんのパッチ当て済バージョンでないと、FM3など動きません
OpenOCDコンフィグ
(その1)
GITORIOUS タイムスタンプは2012/02/17 22:20
各Directoryの全てのファイルをもらってくる
.
OpenOCDコンフィグ
(その2)
Nemui TrinomiusさんのSkyDrive >公開>Tool>OpenOCD>OpenOcd_cfgs ./tcl/target内のcgfファイルのタイムスタンプは2012/04/25 14:14を使用させていただきました 必読
ねむいさんのぶろぐ
ARMマイコンをGCCでデバッグする環境を整える(2012年版)
Insight SourceForge.JP arm-none-eabi-insight-7.4.50.20111222-cvs-mingw32-netx.0.7z
utils Nemui TrinomiusさんのSkyDrive
>公開>Tool
./utils/bin内の殆どのExeファイルのタイムスタンプは2010/01/20 3:10 .
usblib SourceForge Download libusb-win32-bin-1.2.6.0.zip (913.2 kB) 必読
ねむいさんのぶろぐ
いろいろ試す11


<注意点>

1) ねむいさんの環境を全て踏襲しているわけではありませんので、Versaloon等を使用する場合にはここだけでは不充分であることに注意ください。
2) PN2の条件設定は、ねむいさんのぶろぐで詳しく紹介されています。ここの後半を参考にしてください
3) Programer's Notepad 2 (PN2)は、ソースファイルがどのプロジェクトに属しているか管理していませんので、参照用に開いたファイルを誤って書き換える失敗を防げません。気をつけてください。
4) ねむいさんが指摘しています(最後の部分)が、OpenOCDを確実に停止することをしないと再開出来ません。taskkillコマンドをバッチファイルとして実行するようにすべきです。


<謝辞>

やりたいことは、ほぼ出来たと思います。
何から何まで、ねむいさんのおかげです。
改めて感謝の意を表します。
今までは、開発環境の構築に注力するしかありませんでしたが、これからは作りたいものに集中できます(但し、何をつくろうか?)。



3 どんなCPUを使ったか
IMAGE12.GIF - 2,801BYTES
3.1 <STM32L152>
TOP02_001.PNG - 934BYTES

STM32L152に関しての追加情報はここに記載しました

1.使用ボード
 ここで紹介しているSTM32L-Discoveryを使用しました。

2.OpenOCDインターフェイス
 ねむいさんのぶろぐで、ボードに実装している「ST-Link/V2」のSWD機能をそのまま使用してOpenOCDのインターフェイスが実現できることを知りました。
 makefile内では、下記のような記述をしています。

OCD = openocd
OCD_CMD = -s $(OCDIR)/tcl -f target/stm32lx_stlink_flash.cfg

WSHELL = cmd
GDBDIR = C:/gcc/arm-none-eabi-insight/bin
INSIGHT = $(GDBDIR)/arm-none-eabi-insight

# Flash and Debug Program
debug :
$(WSHELL) /c start /B $(INSIGHT) $(TARGET).elf target_cmd=remote localhost:3333
$(OCD) $(OCD_CMD) -c "soft_reset_halt"
program :<BR>
$(OCD) $(OCD_CMD) -c "mt_flash $(TARGET).elf"


 サンプルプログラム(STM32L_Discovery_FreeRTOS_wrk2.zip)の書込みを実行した場合に、下記のようなメッセージが流れます。

> "C:\utils\bin\make.exe" program openocd -s C:/ARM/OCD/tcl -f target/stm32lx_stlink_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
1 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
Info : clock speed 1 kHz
Info : stm32lx.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08003454 msp: 0x20004000
auto erase enabled
Info : flash size = 128kbytes
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
wrote 20480 bytes from file main.elf in 3.281250s (6.095 KiB/s)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x20004000
verified 19774 bytes in 0.687500s (28.088 KiB/s)
shutdown command invoked

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

 デバッグはこのような画面で実行できます


3.サンプルプログラムの構成
 FreeRTOS V7.1.0をベースに、STM32L-Discovery上でLED点滅とLCD画面表示を行うシンプルなタスクを動かしています。
 このサンプルソフトは、購入したままのボードを使い、素子の追加やはんだ付けをしないで動作させることが出来ます。
 使用しているソフトウェアは下記のようなものです。 

ソフトウェア 入手先 入手ソフト 修正の有無 コメント
今回のソフトウェアの全体構成(修正あり=赤)
FreeRTOS SourceForge FreeRTOSV7.1.0.exe あり 現時点(2012年5月)では最新
STM32L-Discovery firmware package
V1.0.2 3052KB
STMicroelectronics
STM32L-DISCOVERY
Design Support
stm32l-discovery_fw_pack.zip あり ZIP内にExeファイルがあり、展開するとタイムスタンプが変化するので、修正の有無は自己管理要
makefile
リンカー用LDファイル
system call関連
デバッグ用ファイル
ねむいさんのおきば STM32L152RBT6_STM32LDiscovery_20120303.zip あり 下記をいただきました。
system_calls.c
syscalls_if.h
stm32f10x_io_view.c(名前修正)
→stm32l1xx_io_view.c
STM32L1XX_MD.ld
STM32L_FLASH.ld
makefile
FatFs ChaNさん ff9.zip なし .
上記のソフトウェアをミックスしましたが、現在のアプリケーションでは使用していない機能(ソースファイル)が多くあります

4.追加情報(7月8日更新)
 現在、OLIMEXのSTM32-P152ストロベリー・リナックスから購入してプログラム作成しています。
 液晶にヒビが入っているとクレームを入れてしまいました(保護フィルムが貼ってあり、フィルムの切りきずを勘違いしてしまった)。

JTAG(IDCD)でのDebugの様子
LCD制御とJTAG信号が共有されている為、
LCD表示が制限を受けます
DiscoveryボードのSWDを借用してDebug中
こちらは、書込みに時間がかかりますが
LCD制御に問題ありません
いつものことですがFreeRTOS上で、
RS232C(PCとの通信)、SDカード制御、LCD制御、
アナログ入力(内部温度、バッテリー電圧、右下(赤ダイアル)のTRIM電圧)、
RTC(カレンダー)、スイッチ入力、LED制御
などが動作することを確認しました
GPS接続、USB制御、I2CとSPIで大気圧センサーとGセンサーを追加していくことが今後の課題で、
それらをまとめると定番のGPSロガーとしてまとめられると思いますが・・・・
この基板にはリチウムイオン電池(3.7V)の充電回路も搭載されているので、
スタンバイ制御(FreeRTOS上でどう制御する?)も是非検討したいと思います


 順調に開発が進んでいたのですが、省電力制御を追加している最中に、プログラム書込みが出来なくなる不具合が発生しました。
 原因はまだ詳細がわかりません(どこで何をすると起こるのかがまだ解明できず)が、書込みを実行するノウハウがわかりましたので紹介します。
 症状は下記の様になります。

 過去にも同じような症状が出ることがありましたが、電源再投入(メインボードとJTAG(もしくはSWD)の電源投入順番も重要)で解決していました。
 今回は、それだけでは解決しませんでした。

 解決方法:RESETスイッチ(今回のボードにはRESETスイッチが付いていました)を押したままでプログラムコマンドを起動して、タイミングよくRESETボタンを離します。
 コツを覚えると離すタイミングが判ります。


 FreeRTOSのサンプルプログラムはもう少し公開まで時間がかかります・・・


3.2 <STM32F407
TOP02_001.PNG - 934BYTES

1.使用ボード
 ここでは、STM32Lしか紹介しませんでしたが、何とかSTM32F4-Discoveryのボード上でFreeRTOSを動作させることが出来ました。

2.OpenOCDインターフェイス
 STM32Lと同様に「ST-Link/V2」のSWD機能をそのまま使用してOpenOCDのインターフェイスを実現しました。

 サンプルプログラム(STM32F4-Discovery_FreeRTOS_V710_wrk0.zip)の書込みを実行した場合に、下記のようなメッセージが流れます。

> "C:\utils\bin\make.exe" program openocd -s C:/ARM/OCD/tcl -f target/stm32f4x_stlink_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
1 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
3750 kHz
Info : clock speed 3750 kHz
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080066c0 msp: 0x10010000
Info : stm32f4x errata detected - fixing incorrect MCU_IDCODE
Info : device id = 0x10006413
Info : flash size = 1024kbytes
stm32x mass erase complete
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000042 msp: 0x10010000
wrote 29508 bytes from file main.elf in 0.968750s (29.746 KiB/s)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x10010000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x10010000
verified 29508 bytes in 0.609375s (47.288 KiB/s)
shutdown command invoked
> Process Exit Code: 0 > Time Taken: 00:19



3.サンプルプログラムの構成
 FreeRTOS V7.1.0をベースに、STM32F4-Discovery上でLED点滅を行うシンプルなタスクを動かしています。
 このサンプルソフトは、購入したままのボードを使い、素子の追加やはんだ付けをしないで動作させることが出来ます。
 使用しているソフトウェアは下記のようなものです。 

ソフトウェア 入手先 入手ソフト 修正の有無 コメント
今回のソフトウェアの全体構成(修正あり=赤)
FreeRTOS SourceForge FreeRTOSV7.1.0.exe あり 現時点(2012年5月)では最新
STM32F4DISCOVERY board firmware package, including 22 examples (covering USB Host, audio, MEMS accelerometer and microphone…) and preconfigured projects for 4 different IDEs
ver.1.1.0
STMicroelectronics
STM32F4DISCOVERY
Design Support
STM32F4-Discovery_FW_V1.1.0.zip あり ZIP内にExeファイルがあり、展開するとタイムスタンプが変化するので、修正の有無は自己管理要
makefile
リンカー用LDファイル
デバッグ用ファイル
ねむいさんのおきば STM32L152RBT6関連の流用
及び
STM32F407ZGT6_FatFS_DISP_20120405.zip
あり 下記をいただきました。
stm32f4xx_io_view.c
STM32F4xx.ld
STM32F4_FLASH.ld
makefile
上記のソフトウェアをミックスしましたが、現在のアプリケーションでは使用していない機能(ソースファイル)が多くあります




3.3 <LM3S9B92>
TOP02_001.PNG - 934BYTES

1.使用ボード
 ここに紹介した、TIからいただいたボードを使用しています。

2.OpenOCDインターフェイス
 EKS-LM3S9B92のボードは2枚構成となっています。
 本体のEvaluation BoadとJTAG回路のIn Circuit Debug Interface (ICDI) Board)です。
 このJTAG回路構成はこのドキュメントのP22(July 5,2011版)にあるように、FT2232を使用している為、汎用性に富んでおりOpenOCDに対応可能になっています。

 サンプルプログラム(LM3S9B-enet_lwip_wrk0.zip)の書込みを実行した場合に、下記のようなメッセージが流れます。

> "C:\utils\bin\make.exe" program openocd -s C:/ARM/OCD/tcl -f interface/luminary-icdi.cfg -f target/stellaris_flash.cfg -c "mt_flash enet_lwip.elf"
Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
100 kHz
Info : device: 4 "2232C"
Info : deviceID: 67353818
Info : SerialNumber: 0B0103EFA
Info : Description: Luminary Micro ICDI Board A
Info : clock speed 100 kHz
Info : JTAG tap: lm3s.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : lm3s.cpu: hardware has 6 breakpoints, 4 watchpoints
500 kHz
cortex_m3 reset_config vectreset
Resetting Core Peripherals
Info : JTAG tap: lm3s.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Warn : Only resetting the Cortex-M3 core, use a reset-init event handler to reset any peripherals
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x000074dc msp: 0x20008a08
auto erase enabled
wrote 105472 bytes from file enet_lwip.elf in 26.531250s (3.882 KiB/s)
verified 104752 bytes in 1.250000s (81.838 KiB/s)
500 kHz
cortex_m3 reset_config vectreset
Resetting Core Peripherals
Info : JTAG tap: lm3s.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Warn : Only resetting the Cortex-M3 core, use a reset-init event handler to reset any peripherals
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:29



3.サンプルプログラムの構成
 このサンプルプログラムは、FreeRTOSを使用していません(FreeRTOSも動き出していますが、もう少し確証を取りたい部分が残っていますので公開はもう少し後で)。
 TIのサイトで入手可能なプログラムで、Ethenetのデモです。 

ソフトウェア 入手先 入手ソフト 修正の有無 コメント
EK-LM3S9B92 Firmware Package ここを参照ください
<サンプルの入手>
SW-EK-LM3S9B92-8555.exe あり
(但し、本質的な変更なし)
150MBを越える大きなファイル群です
サンプルソフトを入手する手続きが大変です
makefile
リンカー用LDファイル
ねむいさんのおきば STM32L152RBT6関連の流用 あり .
上記のソフトウェアをミックスしましたが、現在のアプリケーションでは使用していない機能(ソースファイル)が多くあります




3.4 <LPC1768
TOP02_001.PNG - 934BYTES

1.使用ボード
 以前から紹介している、このハードウェアを使用しています
 従って、このサンプルソフトを動作させるのは大変です。
 追加のボード上に多くの部品を配置して、GPSも接続しないといけません。

2.OpenOCDインターフェイス
 LM3S9B92用のIn Circuit Debug Interface (ICDI) Board)を下記の様にして使用します。 

ICDIのJTAG(20pin)コネクタに追加ボードを接続。3.3Vの電源をUSBから独立してLPC1768へ供給
TIボード用のJTAG回路を流用 製作したIF(上記構成)と右のLPC1768を
コネクタで接続した様子
LPC1768のLPC-Link部分を分離


 追加したボードには、3.3Vの電源とコネクタが載っているだけ。

 サンプルプログラム(LPC1768-FreeRTOS_V710_wrk..zip)の書込みを実行した場合に、下記のようなメッセージが流れます。

> "C:\utils\bin\make.exe" program openocd -s C:/ARM/OCD/tcl -f interface/luminary-icdi.cfg -f target/lpc1768_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
none srst_pulls_trst
DEPRECATED! use 'adapter_khz' not 'jtag_khz'
500 kHz
Info : device: 4 "2232C"
Info : deviceID: 67353818
Info : SerialNumber: 0B010194A
Info : Description: Luminary Micro ICDI Board A
Info : clock speed 500 kHz
Info : JTAG tap: lpc1768.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : lpc1768.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : JTAG tap: lpc1768.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Warn : Only resetting the Cortex-M3 core, use a reset-init event handler to reset any peripherals
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc
cortex_m3 reset_config sysresetreq
10 kHz
Info : JTAG tap: lpc1768.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x1fff0080 msp: 0x10001ffc
6000 kHz
500 kHz
auto erase enabled
wrote 131072 bytes from file main.elf in 14.937500s (8.569 KiB/s)
verified 111152 bytes in 0.515625s (210.515 KiB/s)
requesting target halt and executing a soft reset
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x01000000 pc: 0x00010b94 msp: 0x10007ff0
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:20

 上のメッセージ内容と、LM3S9B92のメッセージを比較すると、下記の部分が共通であることがわかります。

Info : device: 4 "2232C"
Info : deviceID: 67353818

Info : Description: Luminary Micro ICDI Board A



3.サンプルプログラムの構成 

ソフトウェア 入手先 入手ソフト 修正の有無 コメント
GPSデータロガー NXP LPC1768 Application on FreeRTOS FreeRTOSはV7.1.0をベースにしました あり .
makefile
リンカー用LDファイル
ねむいさんのおきば STM32L152RBT6関連の流用 あり .





3.5 <MB9BF618T / FM3>
TOP02_001.PNG - 934BYTES

1.使用ボード
 Interface 2012年6月号に付属しているFRK-FM3基板を使用しています。
 CPU製造元のFujitsuもWebにサポートページを開設しました

2.OpenOCDインターフェイス
 ここでもねむいさんの先行して準備してもらった、サンプルとOpenOCD関連のファイル群に全面的におんぶにだっこの状態です。
 ねむいさんのファイル群をダウンロード(2012年4月27日時点)してくると下記の様に既に、
 Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25)
 とバージョンアップしており、更に、
 Rize up to Internal PLLed Clock!
 6000 kHz
 と書込みクロックを高速化しています。
 ねむいさん、改めてありがとうございました!!

 書込みとDebugは、LM3S9B92及びLPC1768と同じTI製ICDIを用いました。

FRK-FM3(MB9BF618T)+JTAG I/F



 ねむいさんの作成したサンプルプログラム(MB9BF618T_Simple_20120425.zip)の書込みを実行した場合に、下記のようなメッセージが流れます。

> "C:\utils\bin\make.exe" program openocd -s C:/ARM/OCD/tcl -f interface/luminary-icdi.cfg -f target/mb9bf618t_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-dev-00531-gfdbf706-dirty (2012-04-27-09:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
trst_only separate trst_push_pull
500 kHz
cortex_m3 reset_config sysresetreq
verify Capture-IR is disabled
Info : device: 4 "2232C"
Info : deviceID: 67353818
Info : SerialNumber: 0B010194A
Info : Description: Luminary Micro ICDI Board A
Info : clock speed 500 kHz
Info : JTAG tap: mb9bfxx8.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : mb9bfxx8.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : JTAG tap: mb9bfxx8.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000114 msp: 0x20000000
Rize up to Internal PLLed Clock!
6000 kHz
auto erase enabled
Info : Fujitsu MB9Bxxx: Sector Erase ... (0 to 0)
Info : Fujitsu MB9B500: FLASH Write ...
wrote 16384 bytes from file main.elf in 1.750000s (9.143 KiB/s)
verified 804 bytes in 0.421875s (1.861 KiB/s)
Info : JTAG tap: mb9bfxx8.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:04



3.サンプルプログラムの構成
 Sample-1)このサンプルプログラムは、ねむいさんのものです。私はmakefileの環境を変えただけで何もしていません。 

ソフトウェア 入手先 入手ソフト 修正の有無 コメント
LED点滅プログラム ねむいさんのおきば MB9BF618T_Simple_20120425.zip なし 私は何もしていません
OpenOCD関連ファイル OpenOcd_cfgs.zip
ocd.tar.gz
なし

 Sample-2)FreeRTOSの最新版にはMB9BF618用のデモプログラムはありませんので、./FreeRTOSV7.1.0/Demo/CORTEX_MB9B500_IAR_Keilをベースとしました。
        これをGCC用に修正し、LEDをFRK-FM3基板のポートに合わせています。 

ソフトウェア 入手先 入手ソフト 修正の有無 コメント
LED点滅プログラム
(FreeRTOS)
SourceForge FreeRTOSV7.1.0.exe あり .
ドライバーソフト Fujitsu
サンプルプログラム
ダウンロード
mb9b610t-files.zip なし 使用許諾に同意して必要事項を
記入の上、ダウンロードします
OpenOCD関連ファイル ねむいさんのおきば OpenOcd_cfgs.zip
ocd.tar.gz
なし .
起動ルーチン MB9BF618T_Simple_20120425.zip なし startup_mb9bf61xt.s
上記のソフトウェアをミックスしましたが、現在のアプリケーションでは使用していない機能(ソースファイル)が多くあります





4.追加情報(2012年5月3日)
FreeRTOSのプログラム(上記Sample-2も含む)を作成中、タスクの起動周期がおかしいことに気づく。
調査したところ「SystemCoreClock」の値が、本来なら144MHzでなければいけないところ、16MHzとなっていた。
上記デモプログラムのLED点滅周期をシンクロなどでチェックしていれば直ぐに判ったことなのだが、何も検証しなかったので発見出来ず(ごめんなさい)。
原因が判明し起動周期が意図した値になったので、メモを残す。
おかげ様で、MB9BF618Tのシステムクロックの設定に関する一通りの理解が出来た。

ポイント:

計算ミスの原因:

オリジナル  u32RegisterRead = (__CLKMO * (((FM3_CRG->PLL_CTL2) & 0x1F) + 1));
 masterClk = (u32RegisterRead / (((FM3_CRG->PLL_CTL1 >> 4) & 0x0F) + 1));
PLLの出力周波数は、Fout=Fin/K * Nで計算されるが、Nの値をPLL_CTL2から呼び出して抽出しているが、抽出に失敗
修正 /* masterClk = (Input Freq.)/K * N (M=don't care)              */
/* Input Freq. select : PSW_TMR Bit#4:PINC = (0=CLKMO,1=(diabled) ) */
/* K : PLL_CTL1 Bit#7-4 : PLLK[3:0] mask bit = 0x0F, shift = 4     */
/* N : PLL_CTL2 Bit#5-0 : PLLM[5:0] mask bit = 0x3F, shift = 0     */
 if (((FM3_CRG->PSW_TMR) & 0x10) == 0) {
  u32RegisterRead = (__CLKMO * (((FM3_CRG->PLL_CTL2) & 0x3F) + 1));
 } else {
  u32RegisterRead = (__CLKHC * (((FM3_CRG->PLL_CTL2) & 0x3F) + 1));
 }
 masterClk = (u32RegisterRead / (((FM3_CRG->PLL_CTL1 >> 4) & 0x0F) +1));
上記の様にNの値の抽出に6Bitを使うか5Bitを使うかの違い。
間違ったN=4を使って16MHzと計算するか、正しい値N=36を使って144MHzと計算するかの違い

Sample-2のアップデート:

ファイル 修正点 コメント
main_blinky.c SystemInit()の呼出し削除 ねむいさんのstartup_mb9bf61xt.sで呼ばれていますので、こちらを削除しました
system_mb9bf61x.c 上記、SystemCoreClock計算方法変更 PLLのクロックソースとして①メイン発振回路と②高速CR発振回路が
選べるようですので、上記の様に変更しましたが、②は推奨していないようです
system_mb9bf61x.h クロック設定データの見直し過程で追加したコメント 結果として何の問題もなく、元のままでも使えます









4 サンプルプログラム
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

CPU ZIPファイルへのリンク 備考 注意点
STM32L152 STM32L-Discovery_FreeRTOS_wrk2.zip ボードのみで動作 出典を変更しないで使用した
ソースファイルはREAD ONLYと
しているのもが多いので
注意願います
STM32F407 STM32F4-Discovery_FreeRTOS_V710_wrk0.zip ボードのみで動作
LM3S9B92 LM3S9B-all_sample.zip ボードのみで動作

LM3S9B-driverlib-cm3
LM3S9B-third_party
LM3S9B-usblib
の3つのプロジェクトを利用して
LM3S9B-enet_lwip_wrk0
をコンパイル
LPC1768 LPC1768-FreeRTOS_V710_wrk1.zip HWの準備が必要
MB9BF618T Sample-1
ねむいさんのぶろぐから入手してください
ボードにJTAG用コネクタを接続すれば動作
Sample-2
MB9BF618-FreeRTOS_V710_wrk0.zip
及び
20120503_modified_files.zip
(2012年5月3日、アップデート用ファイル
この中のファイルで置き換えてください)








TOP02_001.PNG - 934BYTES