2012年10月14日

STM32F4-discoveryでuITRON最小セットカーネルのTOPPERS/SSPを試用してみたー

最近いろいろと遊ばせてもらってますSTM32F4-discoveryですが、今回はuITRONの最小セットOSである、TOPPERS/SSPを動作させてみることにしました。

IMG_20120831_062451.jpg

TOPPERSは、7年ほど前に趣味でVFDパネルを動かして遊ぶのにTOPPERS/JSPカーネルを秋月のH8/3069Fボードで使用したことはありましたがそれっきりいじっていませんでした。

今回はたまたま、CQ出版のInterface 2012年11月号で「リアルタイムOS「TOPPERS/SSP」誕生!」という記事がありまして、では僕もいじってみたいなーと思い、お試ししてみました。



TOPPERS/SSPは最小セットカーネルと呼ばれるだけあり、かなり小さいメモリーサイズで動作するカーネルだそうで、実際Cortex-M3の環境でROM 3kバイト、RAM 24バイトであるとの事でした。
今回は、STマイクロのCortex-M4FマイコンボードのSTM32F4-discoveryを持っているので、STM32F4用に移植して動作させてみることにします。

TOPPERS/SSPに関しては以下のサイトを御覧ください。
http://www.toppers.jp/ssp-kernel.html

既にDesignWaveマガジン付属CQ_STARM用、R8C用、Interface付属RX62N用のツリーがアップされています。

今回はSTM32F4にポーティングする元となるツリーとして、CQ_STARM用をダウンロードしました。
CQ_STARMは、STマイクロのSTM32F103VBT6を使用したボートです。(多分このボード僕も持っていると思うのですが、積み基板ボックスを漁りましたが見つかりませんでした。変だなー・・・)
STM32F4-discovery(STM32F407VGT6)で動作させるには最も筋が良いでしょうね。

こんなのです。
http://www.cqpub.co.jp/dwm/Contents/0126/dwm012600520.pdf

TOPPERS/SSPはいくつかのディレクトリで構成されているのですが、アーキテクチャ別のディレクトリ(./arch)とターゲット別のディレクトリ(./target)があり、ポーティングは主にその中をいじれば良いようになっているようです。
今回はSTマイクロのCortex-M3用がベースなのでarch以下はいじらず、./target以下だけをいじっています。

主に周辺機能周りのレジスタとか、アドレスマッピング等はSTM32F1とSTM32F4とでは差分があり、STマイクロの仕様書を見ながら変更していきました。
それなりに試行錯誤もありまして、ソースがごちゃごちゃしたのでgithubに上げる際にソース整理しました。

STM32F4-discovery用TOPPERS/SSP(お試し)は以下のgithubのリポジトリで公開していますので、以下からダウンロード、ビルドしてお手持ちのSTM32F4-discoveryに焼き込めば動作するはずです。
https://github.com/yishii/toppers_ssp_stm32f4_discovery

電源投入すると、加速度センサー周辺の4 LEDは点灯状態になりますので動作したかわかりやすいかと思います。

具体的な改変内容はgithubのコミットログを御覧くださいませー。

なお、コンパイル方法ですが、Windows上で行います。
Cygwinを使用しています。また、Sourcery CodebenchのARMツールチェインをインストールしてパスを通しておきます。無償のLite editionのEABI ReleaseでOKです。
Cygwinは、DevelopmentのカテゴリをInstallにすれば必要な物は足りるはずです。

Cygwin : http://www.cygwin.com/
Sourcery Codebench : http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

あと、TeraTermのCygterm機能を使ってCygwinのシェルにアクセスしました(これは必須ではありません)。


実は当初、STM32F4の開発環境をUbuntu上に構築していたこともあり、TOPPERS/SSP関連の開発もUbuntuでやろうと思っていました。
ただ、提供されているTOPPERSのコンフィグレータ(CFG.EXE)はWindows用にビルドされていましたので、コンフィグレータのソースからビルドしてUbuntu上のビルドに組み込んでみたのですが、コンフィグレータ実行時にSIGSEGVが発生してしまいまして、落ちたタイミングでバックトレースするとBOOSTライブラリの奥深くで発生してるようで、コンフィグレータの仕様を理解して解析するのはめんどくさいのでWindowsに乗り換えました。^^;


まずは、githubからソース取得し、展開したらconfigureします。

./configure -T stm32f4_discovery_gcc

そしてmakeです。

make

ビルドに成功すると、「ssp.exe」というELF形式のバイナリを生成しますので、これをSTM32F4-discoveryにロードします。
OpenOCDを起動し、その後シェルから

arm-none-eabi-gdb ./ssp.exe
(gdb) tar extended-remote :3333
(gdb) load ssp.exe
(gdb) c

上記手順で実行開始します。
上記はsample1.cというサンプルコードが実行されます。

sample1.cの操作
シリアル入出力はRxD = PB7、TxD =PB6でボーレートは115200bpsになってます。UART-RS232(またはUSB)変換基板をそのポートに接続して使用して下さい。
マイコンボードの電源を入れると、TOPPERS/SSPのバナー(Copyright表示など)が出てきます。ここで、シリアルコンソールからのコマンド待受けしてますので、TeraTerm等からキーインします。

【タスク関連】--------------------------------
"1" : TASK1を選択
"2" : TASK2を選択
"3" : TASK3を選択
"a" : 選択したタスクを起床(act_tsk)
"e" : 選択したタスクの終了指示メッセージを投げる
"z" : 選択したタスクでCPU例外を発生させるメッセージ
【アラームハンドラ関連】----------------------
"b" : アラーム ALM1を設定(sta_alm)
"B" : アラーム ALM1を停止(stp_alm)
【サイクリックハンドラ関連】-------------------
"c" : サイクリックハンドラ CYC1を起動(sta_cyc)
"C" : サイクリックハンドラ CYC1を停止(stp_cyc)
【その他】-----------------------------------
"Q" : プログラム終了(ext_ker)
--------------------------------------------


なお、ROM/RAMサイズは変更してませんのでSTM32F1のままです。リンカスクリプト(cq_starm_*.ld)を変更するだけで対応できると思います。

※デバッグ環境の、OpenOCDのWindows用については「ねむいさんのぶろぐ」のものをそのまま使用させていただいてます。ありがとうございます。

今回はSTM32F4のブート処理の初期設定をいろいろ調べながら実験していく過程で、いろいろ勉強させていただきました。PIC24に移植してみたいと思っているのですが、PICはソースの公開の制限が大きいので、解決してからにしたいと思います。

ところでどうやら、先日僕にも、Raspberry Piの発送しましたメールが届きまして、間もなく届くのだと思います。7/Eオーダーでしたので長かったー!!
ひとまずここでSTM32F4は区切ってRaspberry Piで遊んでみたいです!

ARMでOS超入門 (ARMマイコン)
桑野 雅彦 岡田 好一 共著
CQ出版
売り上げランキング: 101688


ラベル:TOPPERS uITRON
posted by いしいっち at 02:23| Comment(2) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2012年10月06日

Nexus 7買ってみました!

話題の? Nexus 7という7インチのタブレット端末を買ってみました〜。
元々日本で発売前も海外の輸入して買うとかいろいろ方法はあったみたいで、欲しいとは思っていたんですが、スマートフォン持ってるし、自宅ではノートPC使うから、タブレットの出番あるだろうか?という思いがありましてずっと買えずにいました。だけど19800円っていう値段を見てしまったので、衝動買いしちゃいました! ^^;

P1120528.JPG

持ってみると、なかなか軽いしいいかも〜。ちなみにGalaxy Nexus(4.65インチ画面のスマホ)と比較すると、画面見やすい!

早速通勤電車で座った時に使ってみました。電車内で使う端末はスマホで充分と思ってたんですが、ことドキュメント閲覧に関して、A4のページに文字がずらっと並んでるようなpdfファイルを読む場合などは、文字が小さすぎて読みづらいと思っていたのですが、Nexus 7では、そのような事もなく、非常に快適に資料を読むのに使えました!
別な端末になりますが、AmazonのKindle touchのような800×600の画面では文字が潰れてしまうような資料でもそうはならず、実用的に使えています。(まだ見たことはありませんが、Kindle Paperwhiteは解像度上がってるらしいので資料読むのとかによさそうですね…。)

P1120529.JPG

さて、とりあえずUSBポートを使って見ることにしました。USBポートから映像を取り出すMHLインターフェースがついている場合、以下のようなケーブルを介することでHDMI端子から映像出力を得ることができます。

IMG_20121006_073748-1.jpg

結果はダメでしたー。対応してないのね、残念。ハード的にもダメなのかなー?

次はUSBホストです。
以下のiBuffaloのケーブルを使用しました。



USBマウスを繋いでみたのですが、試してみるとアッサリ繋がりました!

ただ、ストレージデバイス(USBメモリーとか、SDカードリーダーとか)はそのままでは認識してくれません。
今回は、100円ショップで買ったSDカードリーダを使ってデジカメ画像を見ようとしたんですが、確かにそのままでは認識しませんでした。

IMG_20121005_225215.jpg

Google PlayからNexus Photo Viewerという無料アプリをインストールする事で、サクッと読み込み出来ました。便利便利!
(Galaxy Nexusと同様ですね)

Google Play : Nexus Photo Viewer
https://play.google.com/store/apps/details?id=com.homeysoft.nexususb.viewer&hl=ja

こんな感じ。
アプリはUSB Host APIでマスストレージデバイスを認識し、アプリ内に持たせたファイルシステムからアクセスしているんかな?と理解してます。アプリ内でメディアからのデータを取り出したり出来る作りです。デジカメ画像のプレビュー機能もあり、サクサク動作してくれたので快適でした。動画や音楽の対応もあるみたいですが、まだ試していません。

IMG_20121005_225307.jpg

Eye-Fiも持ってますが、これでサクッと取り込んだほうが手っ取り早くていいかなと思っちゃいました。




iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
バッファロー (2011-11-01)
売り上げランキング: 165


usb dac 内蔵小型 パソコンスピーカー(25W+25W) KS-1HQM
株式会社クリプトン
売り上げランキング: 7322



posted by いしいっち at 08:39| Comment(0) | TrackBack(0) | Android利用関係 | このブログの読者になる | 更新情報をチェックする