==== トラ技増刊号の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秒といったところでしょうか。 (もちろん、自己責任でどうぞ)