2013年12月30日月曜日

M25PX16をフルコントロール! (M25P16とM25PX16を比較してみる)

あらまし

2012年の10月にM25P16をフルコントロール!と題してM25P16の制御コードを公開しました。
今年に入ってM25PX16を使用する機会があり、それじゃあM25P16と何が違うの?というのを簡単に調べた結果をまとめてみました。一番下にはソースコードも示しましたのでご覧下さい。

M25P16とM25PX16

ブロック・ダイアグラムを見る限り、基本的な構成は変わりませんが、「64 OTP bytes」という何かが追加されています。ここで言うOTPとは、one-time programmableの略で、64バイトのワンタイム・ロムが存在するという事がわかります。なるほど、これは装置物に仕立てる時のアレコレに使えます。


次にメモリ・マップを確認してみると、M25PX16ではサブ・セクタが導入されている事がわかります。


M25PX16のコマンドがどうなっているのかというと、M25P16のコマンド・セットに加えて、幾つかの新しいコマンドが追加された形になっています。


M25PX16では、ロックレジスタが新設され、不用意なライトからメモリを保護できるように機能強化されています。また、DQ0とDQ1の二線を使って入出力ができる機能が追加されており、M25P16よりも高速にR/W可能なコマンドも用意されました。消去コマンドも、M25PX16ではサブ・セクタ単位での消去も可能となっています。

ざっと見た結果、M25P16を機能強化したのがM25PX16という感じで、M25P16を使用していた基板にM25PX16を使用する事もソフトウェアの変更のみで可能という事がわかりました。READ IDENTIFICATIONコマンドを発行すれば基板にどちらのフラッシュ・ロムが搭載されているのか検知可能ですから、下層でうまく実装する事で自動的に切り替える事も可能です。


ということで、M25P16とM25PX16に対する制御コードを記述し、実機動作確認済みのソースコード公開します。

ソースコード

  • 実機で動作確認済みのソースコードからターゲット依存箇所を取り除いたソースコードです。
  • 無保証です。一切の責任を負いません。
https://github.com/shinta-main-jp/M25PX16

2013年11月26日火曜日

ET2013のTOPPERSパビリオンでショートプレゼンテーションをさせて頂きました

TOPPERSアプリケーションコンテストに関連して、ET2013のTOPPERSパビリオンでショートプレゼンテーションをさせて頂きました。

ET2011では小規模組み込みシステム向けシェルのNT-Shell、ET2012では小規模組み込みシステム向けロガーのNT-Loggerと、二年連続でミドルウェアを提案しました。今回は、TOPPERSのsample1に対する改善という事で主旨を変更して提案しました。


ショートプレゼンテーションでは、リアルタイムオペレーティングシステムを使った組み込みシステムの設計、実装、検証について、日頃感じている事も少しだけお話させて頂いた次第です。これは、提案の題材として用いたシステムを使って実際に取得したデータから、リアルタイム性を確認する手段など簡単な手順を交えた内容としました。

非常に安価な装置を用いて、以下のように処理にかかる時間の分布などを得る事ができます。


リアルタイムオペレーティングシステムを使った組み込みシステムの場合、最悪値の検証が欠かせません。データを収集して整理するだけに留まらず、客観的に評価できるところまで落とし込む作業が必要です。


実開発では、正しく動作しているように見える時に「本当に意図した動作になっているのか?」まで確かめる必要があります。ショートプレゼンテーションでは、確認作業のアプローチの一つとして幾つかの方法を述べました。



2013年11月2日土曜日

adafruitでUOS-LPC800が紹介されていました

adafruit(http://www.adafruit.com/)でUOS-LPC800が紹介されていました。


彼らが販売しているLPC810 Mini Starter Packに絡めた紹介になっています。
これだけの部品で、小さなオペレーティング・システムが楽しめます。


ビルトイン・シリアル・ブートローダのおかげで、ホスト・ターゲット間でシリアル通信さえできればプログラムを書き込めるのも嬉しいポイントです。

2013年10月12日土曜日

オペレーティング・システムのスケジューラを書く人の強い味方「レジスタ将棋」を考案しました

「青空の下でLPC800 Mini-KitとUOS-LPC800を楽しもう!」の説明資料を作っていて、レジスタの扱いについて面白く説明する方法はないかなぁ?と考えていました。

オペレーティング・システムを書くとなると、あのレジスタをこっちにやって、このレジスタをあっちにやって・・・とだんだん頭がわけわからなくなってきます。UOS-LPC800のスケジューラを書いている時も、Cortex-M0+の命令セットをどう使うのか頭を悩ませた気がします。もう忘れましたが。


で、それを他人に説明する時の面白い方法が欲しいと思いました。
で、考えたのが「レジスタ将棋」です。

どんなものになるのか自分でもよくわからなかったので試しに百円ショップで将棋セットを購入。


うーん。
この金将とか歩兵とか邪魔だな・・・。


「裏面を使えば良いか!」と考えていたが、よく考えたら彼らはシチュエーションによって色んな奴に化けるのを失念していました。おぉ、両面に文字がある。


「くそぉー」ということで、耐水ペーパーでゴシゴシ削ってレジスタ名を記入することに。
これで「レジスタ将棋」の完成です。


ちなみに、青い字はLow Registersで、Cortex-M0+のSTM、LDM命令でもアクセス可能なレジスタ。
赤い字はHigh Registersで、Cortex-M0+のSTM、LDM命令ではアクセスできないレジスタです。


「レジスタ将棋」の使い方は至って簡単。
スタックポインタを起点に積んでいくレジスタ駒を並べて行くだけ。


R13はMSPやPSP、R14はLR、R15はPCでもあるので、裏面にひっくり返すとPSP、LR、PCなどと書いてあります。


レジスタの退避、復旧、複写は、アドレス・インクリメント・モードが複数あったり、他人に説明する場合にややこしくなりがちです。駒を動かして一つずつ操作を理解する事で、楽しくレジスタ操作を把握できるという算段です。

この「レジスタ将棋」のアイデア、駒を動かしてゲーム感覚でレジスタ操作を整理できるので、我ながら気に入っています。みなさまもオペレーティング・システムのスケジューラを書く際の友として如何でしょうか?

「青空の下でLPC800 Mini-KitとUOS-LPC800を楽しもう!」を開催しました

訳のわからないタイトル「青空の下でLPC800 Mini-KitとUOS-LPC800を楽しもう!」で企画したLPC800 Mini-KitとUOS-LPC800を楽しむ会を開催しました。


基本的にユルユルな会と見せかけながら、実はリアルタイムシステムの評価手法に関するノウハウなども公開したりといった内容としました。


開催場所は横浜市営地下鉄のセンター北駅から徒歩10分ほどの閑静な住宅街の中にある公園。


私は到着早々、今朝思いついたばかりの「レジスタ将棋」の思案を開始。
その直後、落ち葉が降ってきて「おぉー、秋ですなぁ~。」と感じるなど。


基本的に公園の中でやる事ではないのですが、いつもと違う感じが気持ち良かったです。


振り返ればそこは池!
鴨みたいなのとか、そうじゃないやつとか沢山いました。


皆さん思い思いの環境でLPC800 Mini-KitとUOS-LPC800を楽しんで頂いて何より。


14:00から16:00の開催時間をとっくに過ぎて16:30に終了。
二次会の締めとして喫茶店で続きを・・・。


前回の茶室で楽しむKOZOS拡張基板に福島からいらしてくれた方からは、「こんな手軽な環境でデバッガが使えるなんて嬉しいです」とも。あぁ、やって良かった「青空の下でLPC800 Mini-KitとUOS-LPC800を楽しもう!」企画!タイトルが長い!

2013年9月30日月曜日

青空の下でLPC800 Mini-KitとUOS-LPC800を楽しもう!

UOS-LPC800: A real-time operating system for NXP LPC800
2013年10月12日に開催します。
http://atnd.org/events/44156

2013年10月13日追記:ここにレポートを追加しました。

2013年8月31日土曜日

A capacitive touch sensing using an analog input port for mbed

先日のことですが、mbed用の静電容量式タッチセンサライブラリを公開しました。

[フレーム]

http://mbed.org/components/Touch-Sensor-using-an-analog-input-port/

まだまだ改良したい感もありますが、「ひとまずこれで公開!」というバージョンです。

AltStyle によって変換されたページ (->オリジナル) /