2017年9月30日土曜日
ARMv6-Mと戯れる 第1号 ~ARMv6-Mと戯れる準備をしよう~
まえがき
大抵の場合「ARMマイコン!ARMマイコン!」と言っているその中身は、ARM社が提供しているプロセッサに加えて、チップベンダー各社が周辺回路を加えてパッケージングされたものだったりします。 「マイコンを使えます」という人でも、自分が使っているマイコンがどういったプロセッサを使用しているのか詳細を答えられる人は稀で、せいぜい「Cortex-M0+です」とかその程度のものでしょう。
4年前の2013年、LPC810でも動作するUOS-LPC800を設計し、その過程でARMv6-Mのレジスタセットについて学習しました。 この学習過程を振り返った上で、再度見直して楽しんでみようというのが本シリーズです。
ブート!
学習過程を振り返るというお題があるので、学習を始める過程も挙げておきます。 まずは題材となるマイクロコントローラのデータシートを見ます。
NXP社のウェブよりLPC81X_LPC83X: Low-Cost Microcontrollers (MCUs) based on ARM® Cortex®-M0+ Coresには、ARM Cortex-M0+と書かれていますね。でも、この段階では「あぁ、ARM Cortex-M0+っていうのを使っているんだ。」程度にしかわかりません。
次に「このARM Cortex-M0+って何だ?」というのは、ARM社の情報を見る事になります。 https://developer.arm.com/products/processors/cortex-m/cortex-m0-plusには、ARM Cortex-M0+という絵の中に「CPU ARMv6-M」とあり、「あぁ、ARMv6-Mと呼ばれるCPUを使っているんだなぁ」と先ほどのARM Cortex-M0+から一段掘り下げた情報が得られます。
で、ハイライトを見ると、ISA Supportの欄に「Thumb/Thumb-2 subset.」と書かれています。この「ISA」というのは、Instruction Set Architectureの略で、命令セットアーキテクチャは「Thumb/Thumb-2のサブセットだよ」と言っています。
ここまでで、「ARM Cortex-M0+は、ARMv6-Mと呼ばれるCPUを使っていて、命令セットアーキテクチャはThumb/Thumb-2のサブセットである。」という事がわかりました。
さて、プロセッサと戯れるためには、ここで止まってはいけません。 更にhttps://developer.arm.com/products/architectureから、M-Profile Architecturesの情報https://developer.arm.com/products/architecture/m-profileに辿り着きます。
概要ページにはARMv6-Mアーキテクチャの概要も書かれており、「T32命令セットをサポート」と書かれています。 新しいキーワードT32命令セットが出てきましたね。
Instruction Setsのページhttps://developer.arm.com/products/architecture/instruction-setsを見ると、A64、A32、T32の各命令セットについてリンクが張られています。
https://developer.arm.com/products/architecture/instruction-sets/a32-and-t32-instruction-setsには「T32命令セットはARMv8アーキテクチャ以前にThumbとして知られていたもの」と書かれています。つまり、先に出てきたThumbと呼ばれる命令セットはT32命令セットである事がわかりました。
今回のまとめ
「ARM Cortex-M0+は、ARMv6-Mと呼ばれるCPUを使っていて、命令セットアーキテクチャはThumb/Thumb-2のサブセットである。T32命令セットはThumbとして知られている。」という事がわかりました。
次回は、ドキュメントのページhttps://developer.arm.com/products/architecture/m-profile/docsに辿り着いて色々と見てみましょう。
http://docs-api-peg.northeurope.cloudapp.azure.com/assets/ddi0419/c/DDI0419C_arm_architecture_v6m_reference_manual.pdfがアーキテクチャのリファレンスマニュアルです。
2017年7月30日日曜日
ARM-Cortex-M0などの小規模なマイコンでも簡単にシリアル入出力機能を実現するMicroShellのウェブサイトを少しだけ修正した話
修正したのはAPIのページで、以前は定義や関数がズラズラと並んでいるだけのページでした。サイトを構築する際、このAPIページを眺めた後にExampleページを御覧頂く事を考えていましたが、実際にAPIページを見るだけで嫌になりそうです。というのも、読み手からして見れば早く理解して使いたいのに、何の説明もないAPIページを見させられたのではたまったものではありません。かと言って、唐突に自分に関係があるのかわからない具体的なプラットフォームに対するサンプルを提示するのも考え物です。
特に、実際のサンプルでは、複数のモジュールを組み合わせて実際のアプリケーションに近い例を見せていたため、どのAPIが必須なのか、どのモジュールで何を提供しようとしているのかが非常に不明瞭でした。
これらの振り返りをふまえ、新しいAPIページでは以下の対応をしました。
- 提示しているAPIが必ず必要なものなのか、それとも選択的に使用すれば良いものなのかわかるように[Core]と[Optional]という表記を追加した。
- 単にモジュール名称を提示するのではなく、一体何を提供しようとしているのかわかる説明をモジュール名称の前に追加した。
- かなり短いサンプルコードを対象APIのみを使って記述した。
2010年12月12日日曜日
LPCXpresso LPC1768のデバッガとターゲットを切り離して使う
でも、「じゃあ製品に組み込む時どうすんの?」とかそういう話になってくると「いやー、LPC-LINK使うかなぁ?(←使わないでしょ。)」とか、「本当に動くのかなー。(←そりゃ動くだろうよ。)」みたいな話になってきます。
そこで、今回はLPCXpressoのターゲットだけを切り離して、JTAGデバッガと接続するお話です。
まずは回路図を確認します。
LPCXpressoは以下のようなデザインになっています。
LPC-LINK側から+3.3[V]を給電してもらってターゲットが動作するようになっています。
「じゃあ、USBに接続しないで動作させるにはどうするの?」という話ですが、これは図にある通り、「Expansion connector」から外部電源電圧(+5.0[V])をもらい、それがそのままLPC-LINKに入って、先ほどの+3.3[V]を生成するという設計です。
ちょっと考えてみましょう。
LPC-LINKとターゲットを切り離してみてください。
そして、整理してみます。
- LPC-LINKは+5.0[V]から+3.3[V]を生成する。
- ターゲットは+3.3[V]を給電されて動作する。
- ターゲットは+5.0[V]を給電されても、LPC-LINKにそのまま渡すだけ。(要するにターゲットと+5.0[V]は一切関係ない。)
また、図面には「Superset of mbed connector」と書かれていますが、これは大嘘。
なぜなら、mbedの40ピン目は+3.3[V]の出力です。
LPCXpressoのターゲットはLPC-LINKを接続している限り「+3.3[V]を出力」しますが、切断した途端にここから+3.3[V]を入れるという前提になっています。これでは当該ピンから+3.3[V]が供給される前提で設計されているベースボードは動作しないことになります。
これは明らかにスーパーセットではありません。
この時点で「superset of mbed pinning」は信用しないことにしました。
この設計はLPC-LINKを使わせる前提なのでしょう。
以下は図面の最後のページのピンアサインです。
初めは「self powered」の意味がわかりませんでしたが、「デバッガ+ターゲット=セルフ」ということみたいです。
そうなると「じゃあどうするの?」という現実的な問題になってきます。
- LPCXpressoのターゲットの問題は単に+3.3[V]のみ。
- 手軽に取り出せるのは、例えばUSBの+5.0[V]。
- パソコンとターゲットとデバッガI/Fだけで開発したい。
私はこうしました。
- LPCXpressoのターゲット上で+3.3[V]を+5.0[V]から生成するようにしよう。
- LPCXpressoのデバッガは+3.3[V]の出力にダイオードを突き当ててるから大丈夫。
- ターゲット用の+5.0[V]はUSBから頂こう。
LPCXpresso上の配線は以下のようになっています。
EXT_POWXから+5.0[V]をもらい、+3.3[V]に降圧してからVIO_3V3Xに給電です。
コンデンサは後で。
こうすれば(※J6-29にUSBの+5.0[V]を渡す必要もある。)電源面から見ると「mbedとほぼsuperset」と言えます。また、パソコンさえあればデバッグが開始できます。
通常、デバッガはターゲットのI/O電源電圧をリファレンスとしてもらってI/Oを駆動する形をとります。
LPC-LINKは積極的にターゲットに電源を供給する前提で設計されています。
そういう意味で「切り離して使えます」と言われてはいるものの、LPCXpresso LPC1768にかなりフォーカスしたデバッガと考えていた方が良いかもしれません。
この次にJTAGKey2Pによる動作確認です。
2010年7月9日金曜日
Amontec JTAGkey-2P
今日になってやっと動作確認しました。
昨日ドライバを導入して動かずに困って問い合わせたところ。
「今ウェブサイトをアップデートしています。ちょっとアップデートを間違ってたみたい。」
ということで間違った方のドライバをインストールしていたみたいです。
Amontec JTAGkey (Channel A)正しいのはこっちだと送っていただいたリンク先にあるドライバで更新したところAmontec JTAGkey Demo 060307で認識しました。
2009年11月10日
2.6.0.0
http://www.amontec.com/download/amontec-jtagkey-driver-d2xx-20091124.zip
ちなみに動かなかったバージョンは
JTAGkey ( Channel A )です。
2005年12月01日
3.1.2.0
2010年7月8日木曜日
ARM開発環境の構築(Ubuntu 9.10)
以下をリポジトリリストに追加する。
deb http://www.emdebian.org/debian/ lenny main
以下で認証キーを追加する。
wget -O- http://www.emdebian.org/0x97BB3B58.txt | sudo apt-key add -
ツールチェインのインストール。
EABIを入れれば良いでしょう。
sudo apt-get install gcc-4.3-arm-linux-gnu g++-4.3-arm-linux-gnu (OABI)
sudo apt-get install gcc-4.3-arm-linux-gnueabi g++-4.3-arm-linux-gnueabi (EABI)
binutilsをインストール。
sudo apt-get install binutils-multiarch
環境を構築したらmebd上でFreeRTOSを動作させることに挑戦します。
あ、その前にCQ-STARMでLEDピコピコかな。
2010年5月30日日曜日
OpenOCD
http://www.olimex.com/dev/arm-usb-ocd.html
http://www.amontec.com/jtagkey2p.shtml
なかなか決断できないのは既に今月たくさんの設備投資をしているため。
無駄に買い物に走っているわけではないのですが、ついつい自制モードです。
時間の無駄?
まぁ、作れば良いじゃんっていうのもあってそれも決断を鈍らせる要因。
FT2232Hとレベル変換さえあれば良いんだから・・・。
作るモードになると美しく作りたいので基板設計する勢いです。
こういうのって車輪の再開発・・・。と反省したりします。
こだわらなければいいのに・・・。
という具合で永久ループです。
が、時間がもったいないのでそろそろ結論を出します。
ちなみに今月の(無駄な?)設備投資は・・・。
* Arduino (いらないだろ!)
* mbed NXP LPC1768 (これは目標にあってる!)
* 60th LED Luminous CLOCK (前から欲しかった!)
* その他
と約2万円近く。