==== トラ技増刊号のMARY基板を使ってみた。 ====

2枚入り!組み合わせ自在!超小型ARMマイコン基板
\\
トランジスタ技術 増刊号に「組み合わせ自在!超小型ARMマイコン基板」がというものがあって、LPC1114Fのマイコン基板が2枚付録として付いてきます。\\
同誌は、LPCXpresso IDEを使って開発することを前提に記されているのですが、LPCXpresso IDEはWindowsとLinuxにしか対応していません。\\
\\
が、私の手元のマシンはMac OS X 10.7 (Lion)ですので、こいつでなんとかしたいものです。ということで、手元のLionマシンに開発環境を構築したので、その手順などをメモしときます。\\
ちなみに、この手順は2011年12月24日時点で最新版で揃えてます。\\
=== コンパイラ ===
MacPortsでインストールしようと思ったのですが、どうもサクッとビルドできなかったので、別の方法を当たりました。\\
そこで、YAGARTO (Yet another GNU ARM toolchain) というものを見つけたので、これで構築しました。\\
YAGARTOのWebサイトの"YAGARTO GNU ARM toolchain"をダウンロードします。\\
ディスクイメージをマウントし、入ってる yagarto-4.6.2.app をディスクの展開したい場所にコピーします。(私はホームディレクトリにしました。)\\
ダブルクリックすると展開され、"yagarto-4.6.2"というディレクトリができます。\\
パスを通すために、.bashrcに次の行を追加し、source .bashrcします。\\
export PATH="$PATH:$HOME/yagarto-4.6.2/bin"
export PATH="$PATH:$HOME/yagarto-4.6.2/tools"
=== ISPツール ===
ビルドしたhexファイルをMARYに転送するツール、lpc21ispはMacPortsで放り込みました。
$ sudo port install lpc21isp
とするだけです。
=== CP2104のドライバ ===
MARY基板にはCP2104というUSBシリアル変換ICが搭載されています。これのドライバは、Silicon Labs社のWebサイトからダウンロードできます。\\
[[http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx|CP210x USB to UART Bridge VCP Drivers]] こちらのページの、"Download for Macintosh OSX (v2.9)"の下、"VCP Driver Kit"からダウンロードできます。
=== コードの修正 ===
CQ出版が配布しているサンプルコードをWebサイトからダウンロードしてきます。\\
CQ.zipというファイルですが、[[http://toragi.cqpub.co.jp/tabid/433/Default.aspx|ここ]]に置いてありました。\\
\\
こいつのMakefileは、なにかとWindowsになってます。\\
ですので相対パスにしてガシガシ書き換えましょう。\\
PROG01_COLOR_LEDを書き換えたときのdiffはこちら。\\
要は、PROG01_COLOR_LEDの下のmakefile, lpc1114_Debug_lib.ld, src/subdir.mk と\\
/CMSISv1p30_LPC11xxのsrc/subdir.mkを書き換えました。
diff -ur CQ.orig/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk CQ.new/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk
--- CQ.orig/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk 2011-04-17 15:10:52.000000000 +0900
+++ CQ.new/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk 2011-12-24 22:34:57.000000000 +0900
@@ -20,7 +20,7 @@
src/%.o: ../src/%.c
@echo 'Building file: $<'
@echo 'Invoking: MCU C Compiler'
- arm-none-eabi-gcc -DDEBUG -D__CODE_RED -D__REDLIB__ -I"C:¥CQ¥LPC1114¥workspace¥CMSISv1p30_LPC11xx¥inc" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ arm-none-eabi-gcc -DDEBUG -D__CODE_RED -D__REDLIB__ -I../../CMSISv1p30_LPC11xx/inc -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo 'Finished building: $<'
@echo ' '
diff -ur CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile
--- CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile 2011-04-17 15:11:02.000000000 +0900
+++ CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile 2011-12-24 22:32:05.000000000 +0900
@@ -29,7 +29,7 @@
LPC1114.axf: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: MCU Linker'
- arm-none-eabi-gcc -nostdlib -L"C:¥CQ¥LPC1114¥workspace¥CMSISv1p30_LPC11xx¥Debug" -Xlinker -Map=LPC1114.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "lpc1114_Debug.ld" -o"LPC1114.axf" $(OBJS) $(USER_OBJS) $(LIBS)
+ arm-none-eabi-gcc -nostdlib -L../../CMSISv1p30_LPC11xx/Debug -Xlinker -Map=LPC1114.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "lpc1114_Debug.ld" -o"LPC1114.axf" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
$(MAKE) --no-print-directory post-build
diff -ur CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk
--- CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk 2011-04-17 15:11:02.000000000 +0900
+++ CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk 2011-12-24 22:30:07.000000000 +0900
@@ -77,7 +77,7 @@
src/%.o: ../src/%.c
@echo 'Building file: $<'
@echo 'Invoking: MCU C Compiler'
- arm-none-eabi-gcc -D__USE_CMSIS=CMSISv1p30_LPC11xx -DDEBUG -D__CODE_RED -D__NEWLIB__ -I"C:¥CQ¥LPC1114¥workspace¥CMSISv1p30_LPC11xx¥inc" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
+ arm-none-eabi-gcc -D__USE_CMSIS=CMSISv1p30_LPC11xx -DDEBUG -D__CODE_RED -D__NEWLIB__ -I../../CMSISv1p30_LPC11xx/inc -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo 'Finished building: $<'
@echo ' '
diff -ur CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld
--- CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld 2011-04-17 15:11:02.000000000 +0900
+++ CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld 2011-12-24 21:36:10.000000000 +0900
@@ -5,4 +5,5 @@
* (created from newlib_nohost_c.ld (LPCXpresso v3.6.2 [Build 279] [29/01/2011] ) on Sun Apr 17 15:11:01 JST 2011)
*/
-GROUP(libgcc.a libc.a libm.a libcr_newlib_nohost.a)
+/* GROUP(libgcc.a libc.a libm.a libcr_newlib_nohost.a) */
+GROUP(libgcc.a libc.a libm.a)
=== ビルド ===
修正したら、LPC1114/workspace/PROG01_COLOR_LED/Debugの下でmakeします。\\
するとLPC1114.hexのタイプスタンプが現在時刻になってるはず。\\
makeする前にmake cleanしたほうがいいかも。
=== 転送 ===
書き込みは、ドライバのインストールが済んでいる状態で、
$ lpc21isp -control hogehoge.hex /dev/tty.SLAB_USBtoUART 115200 12000
というコマンドで行えます。
ただ、繋いでコマンドを打つだけじゃ、うまく転送ができません。\\
Synchronizing (ESC to abort)...
と"."が順に表示されているときに、MARYのCN1の5か6ピンの3.3Vを、CN5の3ピンのPIO0_0とショートして3.3VをPIO0_0に加えてやります。\\
すると転送が開始されます。加える時間は0.5秒〜1秒といったところでしょうか。 (もちろん、自己責任でどうぞ)