mbedをシステムに組み込む話

LPCXpresso LPC1769をmbed化して使っているのだけれど、大きさの都合からLPC-Link部分を切り離して使いたいので、その場合にどうやって書き込んだら良いのかを調べてみた。 また、今度プリント基板を発注してマイコンを直接実装する運びになりそうなので、mbedをシステムに組み込むときはどうしたら良いかも調べた。

mbedの仕組み

LPCXpressoや青mbedなどは、PCに繋ぐと外部ストレージとしてマウントされ、そこにbinファイルを置くだけで書き込める。 これはArduinoのようにブートローダーが起動して、binファイルを受け付けるようになっていると思っていたのだけれど違った。

青mbedの裏にはmbed HDKと呼ばれるデバッガ回路がついており、これがメインのマイコンファームウェアを書き込んでいるらしい。 mbedをPCに繋ぐと、mbed HDKによって外部ストレージとしてマウントされ、そこにbinファイルを置くと、 mbed HDKがメインのマイコンであるLPC1768に対してISPで書き込むという構成になっているようだ。

したがって、ARMマイコンだけをシステムに組み込みたい場合は、mbed HDKに相当するような外付けのライターが必要となる。

書き込み方法

外付けのライター/デバッガから書き込む方法は以下の2種類があるようだ。

  • ISP書き込み
  • SWD書き込み

ISP書き込み

1つ目は、ISP (In-System Programming)を使って書き込む方法。こちらのほうが手軽そう。 LPCのマイコン(他のARMマイコンにも?)には、特定のシリアルポートを使ってバイナリ書き込む方法がマイコン自体に備わっている。 試してないけれど、LPC + ISPとかで検索すると結線方法が出てくるのでその通りに結線したら書き込めるはず。 FT232等のUSB-Serial変換アダプタを使ってマイコンに書き込むなら、 FlashMagic というソフトを使えばよく、 青mbedをライターとして使ってマイコンに書き込むなら イカ醤油ぽっぽ焼きというソフトを使えば良いらしい。

SWD書き込み

2つ目は、ARMマイコンデバッグするためのSWDを使って書き込む方法。 SWDは物理的な結線方法らしく、実際のプロトコルはCMSIS-DAPとかJ-Linkとか色々あるらしい...? (良く分かってない)

CMSIS-DAPというのがARMの統一規格らしく、これをサポートしてるデバッガやマイコンが多いので、とりあえずはこれを使ったら良さそう。

LPCのマイコンに対して書き込んだりデバッグしたりするなら、LPC-Link2というデバッガが秋月で2800円で買えるのでお買い得。 LPC-Link Configuration Toolsというのを使ってLPC-Link2のファームウェアを書き変えると、CMSIS-DAPデバッガとして使ったり、J-Linkデバッガとして使うことが出来る。 これで2800円は安くない...?

J-Linkデバッガとして使うときはLPCマイコン限定っていう縛りがライセンス的にあった気がするけど、CMSIS-DAPデバッガとして使うときは他のメーカーのマイコンでも良いのかな...? 今回はLPC1768と1769なので、どちらにせよ大丈夫だけど。

KeilとかのIDEデバッグ時に書き込んでも良いけど、単にバイナリの書き込みだけしたいときは CoFlashというソフトを使うと良い。 CMSIS-DAPをサポートしてるので、LPC-Link2をCMSIS-DAPデバッガ化しておくと使える。 ただ、CoFlashを作っているCoocox社のサイトに全然繋がらないので、別の所からダウンロードするのが良さそうでした。 https://www.wyzbee.com/documentation/developers-guide/flash-the-application-to-wyzbee/

ちなみに、CoFlashで検索すると検索上位にSourceforgeのVer 1.3.6のものがあるのだけど、これだとCMSIS-DAPをサポートしてなかった。 上記のリンクだとVer 1.4.9がダウンロードできて、これだとサポートしてるのでこちらを使うべし。

LPCXpresso LPC1769をSWDで書き込む

LPC-Link2のJ7 (Target SWD/JTAG)とXpressoのJ1を接続する。Xpresso側はどちら向きでも刺さってしまうけど、矢印の1pin方向を合わせる必要がある。 あとはCoFlashでLPC1769を選んで書き込む。 f:id:yuki_tkd:20180916222339j:plain

参考URL

Prototype to hardware | Mbed

Android版LINEアプリの追記

yuki-tkd.hateblo.jp

前回のAndroid版LINEアプリの記事に対するアクセスがとても多いので、最近の状況についてメモしておきます

問題

  • [LINE]が繰り返し停止しています。
  • トーク画面での文字入力が重い

対処法

[LINE]が繰り返し停止しています。

僕の端末(Xperia XZ)だと、Androidバージョンが7から8にアップデートしたところ、 「[LINE]が繰り返し停止しています」の文字が出なくなりました。 (バックグラウンドアプリのメモリ解放方法が変わった?) もし上記エラーで困っている方は、OSのアップデートをされると改善されるかもしれません。

トーク画面での文字入力が重い

トーク画面での文字入力が異様に遅い場合、Bluetoothをオフにすると改善する場合があります。 (Bluetoothによる位置情報測位をバックグラウンドで動かしてる?)

この現象が発生したとき、LINEアプリに対するBluetoothの権限を無くしても重いままで、Bluetooth自体をオフにすると改善されます。 なので、直接LINEアプリの問題では無いのかもしれないのですが、動作が改善されることが多いので、この症状でお困りの方は試してみてください。

Andorid版LINEで「[LINE]が繰り返し停止しています」が出るときの対処法

2018/5/22 最近の状況こちらに書きました。 yuki-tkd.hateblo.jp

Xperia XZをAndroid 7.0にアップデートした夏あたりからLINEがよく落ちるようになった。 LINEを開いたあとに別のアプリを立ち上げると8割くらいの割合で、 「LINEが停止しました」というメッセージが出たり、何度も繰り返すと「[LINE]が繰り返し停止しています」が出てしまう。

f:id:yuki_tkd:20171025233847p:plain:w300

ぐぐってもあんまり出てこないので僕だけかと思ったけど、Twitterで調べたら同じような症状の人が居たのでどうやって対処したかを公開しておく。

変更すべき設定は以下の2つ

  • (Xperiaユーザのみ) スマートクリーナーの対象外アプリにLINEを追加する
  • 省電力機能Dozeの対象外アプリにLINEを追加する

1. (Xperiaユーザのみ)スマートクリーナーの対象外アプリにLINEを追加する

Xperiaにはスマートクリーナーという自動でメモリを開放してくれるアプリがついてくるのだが、 これが原因でバックグラウンドに回ったLINEのプロセスを止めていそう。 スマートクリーナーが働かないようにLINEを対象外アプリに追加する。

設定からストレージとメモリを選び f:id:yuki_tkd:20171025233916p:plain:w400

高度な設定を選ぶ

f:id:yuki_tkd:20171025233935p:plain:w400 f:id:yuki_tkd:20171025233936p:plain:w400

キャッシュを保持を選び、

f:id:yuki_tkd:20171025233937p:plain:w400

アプリタブでLINEを選択する。

f:id:yuki_tkd:20171025233938p:plain:w400

これによって、スマートクリーナーがLINEのプロセスを殺すことが無くなる。

2. Dozeの対象外アプリにLINEを設定する

1の設定により頻度は下がったものの、やっぱりLINEが落ちるのでもう少し調べたところ、 Android 7から搭載された省電力機能Dozeが悪そうだということが分かった。 そこで、Dozeの対象外アプリにLINEを追加する。

設定からバッテリーを選び、

f:id:yuki_tkd:20171025233939p:plain:w400

電池の最適化を選ぶ

f:id:yuki_tkd:20171025233940p:plain:w400 f:id:yuki_tkd:20171025233941p:plain:w400

アプリタブから、LINEを選び、チェックを付ける。

f:id:yuki_tkd:20171025233942p:plain:w400

これにより、Dozeによる電池の最適化からLINEが外れる。

そして、最後にAndroidを再起動させてください

少なくとも僕はこの2つを設定したことにより快適なLINE生活が帰ってきたので、お困りの方はお試しください。

Xperia XZを買いました

f:id:yuki_tkd:20170710100203j:plain

Nexus 5Xがダメになったので、新しい端末を探すことに。 ただ、 希望のスペックを満たすものが中々見つからず、結構苦労した。

  • Android搭載 (自分で作ったアプリ動かしたい)
  • なるべく素のAndroid (標準UIが好み)
  • IIJmioが使える (SIMフリーでドコモのバンドに合うもの or ドコモ機種)
  • なるべくカメラの画質は良いやつ (カメラ持ち歩かないので)
  • (出来れば)おサイフケータイ搭載

基本的にブラウザとSNSのために使っていて、スマホゲームするわけではないので、ハイエンドCPUとか大量のメモリとかは別に無くても良かった。 おサイフケータイは結構欲しいのだけれど、おサイフケータイ搭載 = 一部例外を覗いてほぼキャリア機種に限定される という点で、半分諦めていた。

この条件で探したところこの辺りが良さそうだった。 * Huawei P10 * NuAns Neo Reloaded * Xperia XZ (SO-01J)

Huawei P10はカメラがめちゃめちゃキレイで、もはやコンデジ要らんやんってくらい綺麗だったのだけど、 Androidに謎UIが搭載されていて、慣れるのが大変そうで辞めた。

NuAns Neo Reloadedは、SIMフリー機種なのにおサイフケータイ搭載してるし、素のAndroid搭載してるし、今後のアップデートも期待できそうだったのだが、 カメラの画質が良くないところと、デザインが人を選ぶ感じのデザインで、僕はあまり好みではなかった…

Xperia XZ(SO-01J)はカメラの画質もよく、おサイフケータイ搭載。 しかも、XZsの影響でXZの中古は5万円程度まで値段が下がっているという点も良かった。 ただ、SIMロックは掛かっている。6ヶ月以上経てば出来るのかと思っていたけれど、中古で購入した人はダメで、機種購入時の契約者じゃないと解除してもらえないらしい。 海外版SIMフリーXperia XZ, XZsはSIMフリーだけど技適通ってない。

結局、この中から一番バランスが取れていたXperia XZにすることにした。 SIMフリーが良かったけど、そんなに頻繁に海外に行くわけでもないし、もし行くとなったときはSIMフリーのモバイルWiFi買えば良いかな。

Xperia Z -> Xperia Z3 -> Nexus 5Xとスマホを持ってきたけど、結局Xperiaシリーズに出戻りすることになったな。

Nexus 5X Bootloop

yuki-tkd.hateblo.jp

昨年4月に購入したNexus5X (H791) 32GBモデルを購入し、普通に使っていたのですが、先日、突然壊れました。 Chromeブラウジングしてたら画面がフリーズしたので、強制終了したら起動しない状態になりました。

電源長押し -> バックライト点灯 -> Googleロゴ表示 -> バックライト消灯 -> バックライト点灯 -> Googleロゴ表示 の繰り返し

調べたところ、これは“Bootloop”と呼ばれる症状で、ある時期(2014年くらいから?)のLG端末で数多く報告されている問題らしい。 この問題の原因はハードウェアにあり、半田が経年劣化してクラックを起こすことで発生する製造上の問題だそうで。 “Nexus 5X Bootloop”で検索したら、同時期に購入した人で、同じ症状になった人がかなり見受けられました。 Redditによると、アメリカのLGは同様の症状になった端末に対して、無償修理か返金対応を行っているらしく、韓国LGは無償修理をしているらしい。

ただ、僕のやつはExpansys並行輸入したやつなので、厳しいかなと思いながらも一抹の望みにかけてLGにコンタクトを取ってみた。 が、結果的にはダメだった。 僕のはオーストラリアモデルなので、オーストラリアのLGに連絡を取ったところ、「購入先に連絡して」と言う返事で、購入先に連絡したところ、「保証期間の1年過ぎてるし、うちで販売終了してるし、LGリコールして無いので、うちとしてはどうにも出来ない」っていう返事だったので、修理も返品も無理な模様。LGが世界的にNexus 5Xをリコールしたら扱って貰えそうだけど、あまり期待できなさそう。

結局Sierraに乗り換えた

yuki-tkd.hateblo.jp

Sierraに乗り換えたいが、Karabinerが使えないからダメだっていう記事を書いたのだけれど、他のツールで目的が達成できるものがあったので、 Sierraに乗り換えた。

Karabiner-Elementsにvimモードっぽい機能がついたのかと思ったけれど、勘違いでやっぱり単独のキーのリマップしかできないようだった。 似たようなソフトとして、⌘英かな というものがあり、これで左右cmdキーでの日英IME切り替えと、ctrl+hjklでのカーソル移動ができることが分かったので、乗り換えることにした。 16GBのSDカードが手元にあったので、ここにインストールディスクを書き込んでクリーンインストールした。 クリーンインストールなので、色々設定復旧するの手間だなぁと思っていたけれど、WiFiのパスワード等はiCloudから復旧されるし、Chrome周りはGoogleアカウントから復旧されるしで、全然手間かからなかった。

半日くらいかけてデータ移したり、環境構築したので、ほとんど前と変わりなく使えるようになった。

ただ、VimPython周りだけが上手くいかなくて、少し困っている。 El capitanのときは、MacVimに–with-properly-linked-python2-python3みたいなオプション与えることで、 vimを+python2/dyn, +python3/dynで起動して、pyenvで入れたPython2と3を同時に使えるようにしてたんだけど、これができなくなっていた。 –with-properly-linked~のオプションは与えられるのだけれど、出来上がったバイナリみたら-Python3になっている… これの関係で、neocompleteでPython3の補完が効かなくなってしまった。 まぁ、あまりPython書かないので、ひとまず大丈夫そう。

Sierraに乗り換えたい

MacBook Pro (Late 2013)にEl capitanを入れて使っているのだけれど、そろそろmacOS Sierraにアップデートしたい。 新しいPagesやKeynoteにはレイヤー機能がついて便利そうだし、セキュリティ的にもSierraのほうが良さそう。 出た当初と違い、知見もだいぶ溜まってきていているので、作業自体は問題なくアップデートできそうなのだけど、Karabiner周りだけが気になる。

SierraにアップデートするとKarabinerが使えなくなるので、HHKB用に色々とカスタマイズしてあるキーリマップが効かなくなる。 Sierraユーザのために、Karabinerの作者の方がKarabiner-elementsというものを開発されている。 これを使うと左右cmdキー単発入力での日英切り替えができるようになるらしい。 GithubのIssuesを見た感じ、ctrl + hjklによるカーソル移動機能が最近サポートされたっぽい?ので、現状Karabinerに頼っている機能の大半はKarabiner-elementsで動きそうな気配はする。

Yosemite -> El capitanは上書きインストールで移行したので、Sierraへは久々にクリーンインストールして綺麗な環境にしたい。 ついでに、いつかやろうと思いながら手を付けてなかった下記のこともやろう。

  • bashを辞めてzsh
  • nodebrew, pyenvなどをanyenv経由で使うようにする
  • ホームディレクトリの整理