Tiny CLR OSが対応するボードのMPU
ボードの購入や、ポーティングの参考になればと思い、Tiny CLR OSが対応しているボードのMPUについて調べてみました。
対象はTinyCLR-PortsのDevices配下にあるもの。
FEZ
Arduinoピン互換のボードです。
カタログサイトには、"FEZ"という名前のArduinoフォームファクタが3つあり、どれを指しているのか分かりません。
それぞれのボードの回路図を見ると、FEZ LemurはSTM32F40x、FEZ Panda IIIはSTM32F427XX、FEZ Cobra IIIはLPC1788でした。(FEZ Cobra IIIはG120モジュールが載っていて、G120モジュールのデータシートから分かりました。)
docsのmbedについて書いてあるところにNucleo-F401REと同じMPUと書いてあるので、ボードはFEZ LemurでSTM32F401と思われます。
FEZCerberus
.NET Gadgeteerのボードです。
回路図を見ると、MPUはSTM32F40X。
tinyclr.jpによるとSTM32F405らしい。
G30
チップ単体の製品。SoCというカテゴリーのようです。
データシートによると、STM32F401。
G80
G30と同様、SoC。
データシートによると、STM32F427。
Netduino 3
Arduinoピン互換でありながら、.NET Gadgeteerも接続できるボードです。
回路図を見ると、STM32F427。
Quail
mikro BUSのボードです。(これ初めて知りました。)
mikro BUSに接続できるモジュールはClick Boardsらしく、すでに大量のモジュールが販売されています。
Specificationによると、STM32F427。
まとめ
ボード | MPU |
---|---|
FEZ | STM32F401 |
FEZcerberus | STM32F405 |
G30 | STM32F401 |
G80 | STM32F427 |
Netduino3 | STM32F427 |
Quail | STM32F427 |
TinyCLR OS ファームウェアビルド手順
環境構築して、デジタル出力の次は、デジタル入力…が普通だと思いますが、めっちゃポーティング欲が出てきているので、そっちへ向かいましょう!
やり方は、Porting TinyCLRに簡潔に書かれています。これにそってやりたいと思います。
TinyCLRをクローン
githubに挙がっているTinyCLRをローカルにcloneします。
git clone https://github.com/ghi-electronics/TinyCLR-Ports
GCCをインストール
GNU ARM Embedded ToolchainからGCCをダウンロード、インストールします。
今回は、gcc-arm-none-eabi-6-2017-q2-update-win32.exeをダウンロードして、起動することでインストールします。
デフォルトだと、C:\Program Files (x86)\GNU Tools ARM Embedded\6 2017-q2-update フォルダにインストールされます。
CMSISを配置
ARM.CMSIS.4.3.0.packをダウンロードして、拡張子を.zipに変更、中身をTinyCLRのCMSIS配下に配置します。
ARM.CMSIS.4.3.0.packには、このように入っているので、
C:\TinyCLR\TinyCLR-Ports\CMSIS に配置します。
TinyCLR Coreライブラリを配置
TinyCLR-PortsのreleasesからTinyCLR_Core.0.5.0.zipをダウンロード、中身をTinyCLRのCore配下に配置します。
よっしゃ、ビルドするぞー
コマンドプロンプトを立ち上げて、gccの環境変数設定バッチファイルを起動します。
"C:\Program Files (x86)\GNU Tools ARM Embedded\6 2017-q2-update\bin\gccvar.bat"
次に、カレントディレクトリをクローンしたところに変更。
cd C:\TinyCLR\TinyCLR-Ports
そして、ビルドのバッチファイルを起動!
build.bat FEZ
引数はFEZ, G30, G80, FEZCerberus, Netduino3, Quailが指定できます。 詳しくはbuild.batの中身を見てください。
おおーー!!
最後に
NETMFと比べて、非常に簡単。特にハマるところは無いでしょう。
それにしてもビルドが速い。Coreの部分が事前にビルドされているから当たり前といえばそうですけど。
LLILUMの何時間もビルドした結果、エラーとか体感していると幸福感ありますw
TinyCLR OS デジタル出力
TinyCLR OSでデジタル出力を試しました。
環境は下記で作ったものを使用します。
デジタル出力のやり方は、General Purpose Input Output (GPIO)に丁寧に書かれています。素晴らしい。
パッケージソースに追加
デジタル出力するには、プロジェクトにGHIElectronics.TinyCLR.Devices.Gpioのnugetパッケージをインストールする必要があります。
しかし、TinyCLR OSがアルファ版のためか、まだnuget.orgにはアップされていません。
そのため、適当なフォルダに.nupkgを置いて、パッケージソースにそのフォルダを追加することで、インストール可能にします。
ここからダウンロードできる、TinyCLR_Libraries.0.5.0.zipを適当なフォルダに解凍して、Visual Studioのパッケージソースに追加します。
ライブラリをインストール
そして、プロジェクトにGHIElectronics.TinyCLR.Devicesをインストールします。
Windows IoT Coreでお馴染みの、GpioControllerやGpioPinが含まれていますね。
コーディング
プログラムはこんな感じ。
using GHIElectronics.TinyCLR.Devices.Gpio; using System; using System.Threading; namespace TinyCLRApplication1 { class Program { static int PinNumber(char port, byte pin) { if (port < 'A' || port > 'E') throw new ArgumentException(); return ((port - 'A') * 16) + pin; } static void Main() { for (;;) { GpioPin led = GpioController.GetDefault().OpenPin(PinNumber('D', 15)); led.SetDriveMode(GpioPinDriveMode.Output); while (true) { led.Write(GpioPinValue.High); Thread.Sleep(100); led.Write(GpioPinValue.Low); Thread.Sleep(100); } } } } }
実行
青色LEDが点滅すれば成功です。
TinyCLR OS 環境構築方法
.NET MicroFrameworkが実質開発ストップしていますが、GHI Electronicsが分岐してシンプルにして(?)TinyCLR OSとして整備しているようです。
まだアルファ版ではありますが、現在公開されているTinyCLR OSの環境構築が上手くできたので、手順を書き留めておきます。
TinyCLRは未だアルファ版なので、リンクが切れたり手順が変更になったりする可能性があります。ご了承ください。
わたしの環境
作業前の、わたしのパソコン環境は次のとおりです。
- Surface Pro 4
- Windows 10 1703(15063.483)
- Visual Studio 2017 15.2(26430.15)
使用するデバイスはSTM32F4 Discoveryです。
- STM32F4 Discovery(STM32F407)
また、STM32F4 Discoveryに書き込むときに使用するdfu-utilは既にセットアップされていました。
必要なファイルをダウンロード
必要なファイルは次の3つです。
VisualStudio拡張
GHIElectronics.TinyCLR.VisualStudio.0.5.0.vsixです。
Tiny CLR Release Notesの0.5.0 on 2017-07-07をクリックした先のページでここからダウンロードできます。
ファームウェア
TinyCLR_Firmware.0.5.0.zipです。
Tiny CLR Release Notesの0.5.0 on 2017-07-07をクリックした先のページでここからダウンロードできます。
Windows用デバイスドライバ
GHI_TinyCLR_Interface.zipです。
フォーラムの回答からダウンロードできます。
VisualStudio拡張をインストール
GHIElectronics.TinyCLR.VisualStudio.0.5.0.vsixをダブルクリックで起動します。あとは画面の指示に従えばOKです。
Visual Studio 2015も入っていたのに、Visual Studio 2017しか表示されていないので、どうやらVisual Studio 2017にしか対応していないようです。
インストール完了後、Visual Studioの拡張機能と更新プログラムで確認すると、TinyCLR OS Project Systemが追加されたことがわかります。
プロジェクトの新規作成画面には、TinyCLRが追加されています。
デバイスとの接続方法はUSB/Serial/TCPIP。このあたりはNETMFのままですね。
ファームウェアをデバイスにインストール
ここのやり方が分からず苦労しました。
STM32F4 Discoveryは、TinyCLR_Firmware.0.5.0.zipに含まれている、GHI Bootloader(FEZ Bootloader.2.0.3.dfu)をdfu-utilなどでフラッシュメモリに書き込み、そしてTeraTermなどでGHI Bootloaderに接続してファームウェア(FEZ Firmware.0.5.0.glb)を転送します。
GHI Bootloaderの書き込み
STM32F4 DiscoveryをDFUモードで立ち上げます。下図のように、ボードの裏にあるJP2のジャンパーピンを外して、BOOT0とVDDを短絡します。
そして、パソコンとUSB接続します。
ここはちょっとコツが必要で、STM32 DiscoveryのminiUSB(CN1)とmicroUSB(CN5)をUSB-HUBに接続しておき、USB-HUBをパソコンに接続して、両方のUSBを同時に接続しないといけないようです。(都市伝説なのかも?)
デバイスマネージャにSTM32 BOOTLOADERが表示されれば成功です。
そして、dfu-utilなどを使って、FEZ Bootloader.2.0.3.dfuをフラッシュメモリに書き込んでください。
C:\>dfu-util -l dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Found DFU: [0483:df11] ver=2200, devnum=7, cfg=1, intf=0, path="1-1.4", alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="3259375D3036" Found DFU: [0483:df11] ver=2200, devnum=7, cfg=1, intf=0, path="1-1.4", alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="3259375D3036" Found DFU: [0483:df11] ver=2200, devnum=7, cfg=1, intf=0, path="1-1.4", alt=1, name="@Option Bytes /0x1FFFC000/01*016 e", serial="3259375D3036" Found DFU: [0483:df11] ver=2200, devnum=7, cfg=1, intf=0, path="1-1.4", alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg", serial="3259375D3036" C:\>dfu-util -a 0 -D "FEZ Bootloader.2.0.3.dfu" dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Match vendor ID from file: 0483 Match product ID from file: 0000 Opening DFU capable USB device... ID 0483:df11 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuERROR, status = 10 dfuERROR, clearing status Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 DfuSe interface name: "Internal Flash " file contains 1 DFU images parsing DFU image 1 image for alternate setting 0, (1 elements, total size = 14744) parsing element 1, address = 0x08000000, size = 14736 Download [=========================] 100% 14736 bytes Download done. done parsing DfuSe file C:\>
書き込みが完了したら、パソコンからUSB-HUBを外してJP2のジャンパーピンを元に戻します。
ファームウェアの書き込み
再び、USB-HUBをパソコンに接続すると、COMが2つ表示されるので、下の方にTeraTermで接続します。
COMが1つしか表示されないときは、GHI Bootloaderがすでにフラッシュメモリに存在するプログラムを起動しています。 このような場合は、PA15をGNDに繋ぎながらパソコンに接続すると、プログラム起動を抑止してCOMが2つ表示されます。
TeraTermで接続したGHI Bootloaderで、Uを入力してからFEZ Firmware.0.5.0.glbをXMODEMで送信します。送信のときに、オプションの1Kにチェックを付けてください。
HI Electronics, LLC Bootloader ------------------------------- OK. Are you sure (Y/N)? Waiting... CCCCCCCCCCCCCCCCCCCCCCCCCCCCC OK.
再び、USB-HUBを外して、USB-HUBをパソコンに接続すると、FEZという不明なデバイスが表示されればOKです。
Windows用デバイスドライバをインストール
GHI_TinyCLR_Interface.zipを適当なフォルダに解凍しておき、さきほどのFEZという不明なデバイスどのドライバ更新でzip解凍先を指定します。
FEZのビックリマークが消えればOKです。
Visual Studioから認識できるか確認
適当にTinyCLRプロジェクトを新規作成して、プロジェクトのプロパティにあるDeviceにFEZ_FEZと表示されれば、デバイスがきちんと認識できています。
最後に
とりあえずデバイスをセットアップすることができました。
次は、GPIOのやり方を確認したいと思います。
TinyCLR OS触り始めました(途中で挫折編)
TinyCLR OSが良い感じになってきているようなので、動かしてみました。
TinyCLR OSをダウンロード
TinyCLR OSのReleasesにある、0.4.0 on 2017-05-10をクリックして、TinyCLR.0.4.0.zipをダウンロードします。
中身は、デバイスに入れるブートローダー.binとVisualStudio拡張.vsix、nugetパッケージ.nupkg。.ghiというのがありますが詳細不明。
- G120 Bootloader.2.0.2.ghi
- G120 Firmware.0.4.0.ghi
- G30 Firmware.0.4.0.ghi
- G400 Bootloader.2.0.2.bin
- G400 Firmware.0.4.0.ghi
- G80 Firmware.0.4.0.ghi
- GHIElectronics.TinyCLR.BrainPad.0.4.0.nupkg
- GHIElectronics.TinyCLR.Core.0.4.0.nupkg
- GHIElectronics.TinyCLR.Devices.0.4.0.nupkg
- GHIElectronics.TinyCLR.Drawing.0.4.0.nupkg
- GHIElectronics.TinyCLR.Pins.0.4.0.nupkg
- GHIElectronics.TinyCLR.Storage.0.4.0.nupkg
- GHIElectronics.TinyCLR.VisualStudio.0.4.0.vsix
- License.txt
VisualStudio拡張をインストール
GHIElectronics.TinyCLR.VisualStudio.0.4.0.vsixをダブルクリックしてインストールします。
本PCはVisual Studio 2015もインストールしてありますが、一覧に表示されていないところをみると、Visual Studio 2017専用のようです。
インストールボタンをクリックすればOK。
VisualStudioはどう拡張されたのか
プロジェクト新規作成のテンプレートに、TinyCLRが追加されました。
試しに、TinyCLR Applicationプロジェクトを新規作成してみると、こんな感じ。
GHIElectronics.TinyCLR.Coreを参照しているだけ(笑)。とってもシンプル。
ビルドしてみると一瞬で完了します。そりゃそうですね。
デバイスとの接続を設定できるよう、プロジェクトのプロパティにTinyCLR OSが追加されています。中身はNETMFのソレと同じで、接続方法にUSB,Serial,TCP/IPの選択が表示されました。
で、デバイスは?
VisualStudio側がシンプルなのは十分わかりました。
では、デバイスはどうすれば良いのでしょうか。
既出のTinyCLR.0.4.0.zipに、G30,G80,G120,G400のファームウェアっぽいものが入っています。
- G30 Firmware.0.4.0.ghi
- G80 Firmware.0.4.0.ghi
- G400 Bootloader.2.0.2.bin
- G400 Firmware.0.4.0.ghi
- G120 Bootloader.2.0.2.ghi
- G120 Firmware.0.4.0.ghi
GHI Catalogによると、これらはSTM32,LPC,SAMのようです。
うーむ、どれも持っていない…。
STM32F4 Discoveryが対応しているっぽいので、マルツで買ってきました。(また基板が増えてしまった。)
STM32F407なので、きっとG80 Firmware.ghiを入れるんだろうと思いながらも、拡張子.ghiなのが気がかり。 STM32 Bootloaderの手順に従って、DfuSe USB device firmware upgrade STMicroelectronics extensionをダウンロード、インストールすることに。
と、ここまでやったところで、Tiny CLR OS 0.5.0のダウンロードを発見した。
振出しに戻る。
つづく。
Unity 3Dの.NETバージョンが謎すぎるので調査中
HoloLensの開発にUnityを使っていますが、UWPであるにもかかわらず、nugetが使えなかったり、UWP固有の呼び出しができなかったりして謎すぎるので調べています。
現時点では全てが明確に判明したわけではないです。気づいた点があればコメントいただけると嬉しいです。
使用している環境
- Unity 5.6.1f1
- Visual Studio 2017(15.2)
ビルドと実行環境のタイミング
UnityのScriptのビルドと実行環境は、次のものがあります。
- UnityからScriptの編集
- Unityで実行
- Visual StudioからUnityにプロセスアタッチしてデバッグ
- UnityからBuild
- Build出力のビルドと実行
さらに、Unityからリモート実行とか、HoloLensエミュレータで実行とかあるようですが未確認。
それぞれについて、フレームワークに何が使われているか調べてみました。
UnityからScriptの編集
UnityからScriptをOpenした状態。 プロジェクトフォルダ直下にある.sln, .csprojを開いたVisual Studio。
Unityで実行
Unityで再生マークを押して実行している状態。
Visual StudioからUnityにプロセスアタッチしてデバッグ
UnityからScriptの編集で立ち上がったVisual Studioを実行すると、Unityにプロセスアタッチします。 なので、Visual Studioで実行してから、Unityで実行すると、Unityで実行している状態をVisual Studioでデバッグすることができます。
UnityからBuild
UnityのBuild SettingsでBuildボタンをクリックしてビルドすること。
Build出力のビルドと実行
UnityからBuild時に指定したフォルダに作成された、.slnを開いたVisual Studio。 (Unity C# Projectsをチェックしている場合は編集できたり、)ビルドしてHoloLensにデブロイ、リモート実行すること。
調べ方
(そのうち書く!m(__)m)
結果
状況 | フレームワーク |
---|---|
UnityからScriptの編集 | .NET3.5 / .NET4.6 |
Unityで実行 | mono(.NET2系)っぽい |
Visual StudioからUnityにプロセスアタッチしてデバッグ | mono(.NET2系) |
UnityからBuild | UWP(UAP)っぽい |
Build出力のビルドと実行 | UWP(UAP) |
【メモ】Visual Studio Code + Nucleo-L476RG
Wataraiさんが分かりやすい記事をアップしました。そちらが分かりやすいです。
手順の精査は必要ですが、とりあえず動いたのでメモ。
- OpenOCDを使う。(NucleoはST-LinkなのでpyOCDはダメ)
- OpenOCDはコマンドラインで事前に起動しておく。(VSCodeからのlaunchだと、なぜかVSCodeからGDBサーバーへ接続しようとしない。)
- VSCodeからのGDBサーバー起動は無し。(launch.jsonのdebugServerPathを削除)
OpenOCD起動コマンド
C:\OpenOCD\openocd.exe -s C:\OpenOCD\tcl -f board\st_nucleo_l476rg.cfg -c init -c "reset init"