ARM(LPC1114)をUbuntu12.04で使う(メモ)

.16 2012 ARM-setup comment(0) trackback(0)
この間の土曜日の空模様。芸術的ですね。



書泉で立ち読みしてたらトラ技10月号が目に止まり、気になったのでつい買ってしまった。
しかし基本的にWindows向けの開発環境しか解説されていないのでこれをLinuxで使えるようにする。
AVRと同じようにmake一発でコンパイルから書き込みまでできる環境を作るのが目標。

今回は試行錯誤したときのメモに留めておく。
近いうちにきちんと開発環境の構築についてまとめるつもりだ。

みんな言ってるけどなんでこんな頭悪そうな600milのパッケージにしたんだろう。



[コンパイラ編]
下準備としてARMのクロスコンパイラをインストール

% sudo apt-get install gcc-arm-linux-gnueabi

あとはここ読めばよい。

http://elm-chan.org/junk/32bit/report.html

基本的にここに書いてあるとおりで環境が整う。すばらしい。って今回もChaN様かっ!さすがです。

ただ、落としてきたMakefileそのままではバージョンが合わなかったりするのでコンパイラのパスなどを書き換える必要があった。
それでもまだ以下のエラーが出た。

/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: error: /usr/lib/gcc/arm-linux-gnueabi/4.6/libgcc_s.so.1: Conflicting architecture profiles A/M
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: failed to merge target specific data of file /usr/lib/gcc/arm-linux-gnueabi/4.6/libgcc_s.so.1

CFLAGSに-staticを足したら通った。

[参考]
https://github.com/libopencm3/libopencm3/issues/34



最近のgccではこのままでは先頭36byteにゴミ(.note.gnu.build-idセクション)が勝手に挿入されるのでMakefileにもう一点追加する必要があった。
LDFLAGSに-Wl,--build-id=noneを追加する。
この-Wlってのはリンカに渡すオプションを指定するときに使うらしい。

gccのオプションに--build-id=noneとやればよさそうなものだがだめらしい。

[参考]
https://dev.openwrt.org/ticket/3793


あと、リンカスクリプトよく見たらSRAMが8kで定義されていたがLPC1114のSRAMは4kだ(6行目)。



[書き込み編]

ライタに関してはlpcspをLinuxに移植するのは面倒そうな感じ(ReadFileでアクセスしているところを書き換えれば大体動きそうだけど今回は手間をかけずにさくっと試食したいのでlpc21ispを使うことにする)。

H/Wの方はライタと言ってもただのUSB-serialの変換器なわけだが、ARMのリセット解除時に特定のピンがLになっていたらシリアル経由で内蔵フラッシュに書き込むという仕様らしい。
LPC111xの場合、その特定のピンってのはPIO0_1のようだ(データシートp38より)。
となるとその2つは実質専用ピンと考えて配線したほうが無難かもしれない。

トラ技10月号では書き込みモードへの移行を手動で実現している模様。
具体的にはそれぞれにスイッチつけて同時押し→リセット放す→残りも放って感じ。
さすがに書きこむたびに毎度これやるのは面倒だ。
とりあえずAVR外付けにしてフロー制御(RTXあたりを監視して書きこみ開始を検出しCTSを制御する)をしつつResetやPIO0_1を制御している。
しかしどうもDTRをそのままResetに突っ込んでもよいという話もあるようなのでもう少し調査が必要。

[参考]
http://www.sugakoubou.com/doku/arm-flash


それからlpc21ispはそのままではLPC1114FNがデバイスリストに登録されていないので加筆が必要。

lpcprog.cの116行目(LPCtypes配列の要素中)に次の一行を追加。
{ 0x1A40902B, "1114FN.../102", 32, 4, 8, 1024, SectorTable_17xx, CHIP_VARIANT_LPC11XX },

[参考]
http://hp.vector.co.jp/authors/VA009278/arm/isp.html
http://www.sugakoubou.com/doku/arm-flash
http://www.meatandnetworking.com/tutorials/lpc1114fn28-with-open-source-tools/


ここまでやったら拾い物のLチカのコードをコンパイル〜書き込みまでやって動作確認できた。
メデタシメデタシ
関連記事

  • comment
  • secret
  • 管理者にだけ表示を許可する

trackbackURL:http://yuranos.blog11.fc2.com/tb.php/222-57a92de8