ラベル mbed の投稿を表示しています。 すべての投稿を表示
ラベル mbed の投稿を表示しています。 すべての投稿を表示

2016年4月27日水曜日

mbed Repository APIをGo言語から使う

Repository APIを使ったプログラムをGo言語で作ってみました。

実行例 test_repo,test_repo2のリポジトリをコマンドラインから作製しています。


作成時のメモ

Compile APIと同じくmbedのアカウントでBASIC認証。

リポジトリの作製に成功した時のレスポンス例。

既に存在するリポジトリ名で作製しようとした時のレスポンス例。

プログラムのリポジトリを作製する時は、repotype=prog に設定する。
ライブラリのリポジトリを作製する時は、repotype=lib に設定する。
repotypeを設定しない時はライブラリとして作製されます。

参考資料

Repository APIのドキュメント
https://developer.mbed.org/teams/mbed-api-users/wiki/Repository-API

作ったプログラム

rhgini.go Repository APIを使ったコマンド作成例
https://bitbucket.org/va009039/rarmcc/src/83490fd23f1c61eaf31b31eb0c81336905a19ca2/rhgini.go

Repository API クライアントのライブラリ
https://bitbucket.org/va009039/mbedapi

Windows用の実行ファイル(rhgini.exe)は次のサイトからダウンロードして下さい。
https://developer.mbed.org/users/va009039/notebook/mbed-api-client/

(2016/4/27)
---

2016年4月19日火曜日

mbed Compile APIをGo言語から使う

Compile APIを使ったプログラムをGo言語で作ってみました。

LEDチカチカmbed_blinkyをmbed LPC1768用にコンパイルしてバイナリファイルをダウンロードする実行例。


プログラム作成時のメモ

mbedオンラインIDEのアカウントのユーザ名とパスワードでBASIC認証をする。
Teams » mbed API users https://developer.mbed.org/teams/mbed-api-users/ に加入しなくても使える。

tasks/compiler/startで指定するプラットフォーム(platform)はmbedオンラインIDEとは関係ない。
mbedオンラインIDEでプラットフォームを追加しなくてもエラーにはならない。

プログラム(program)で指定したときはプログラムワークスペースのプログラムが対象になる。
対象外のプログラム名を指定するとコンパイル時にInternal errorになる。

リポジトリ(repo)でURL指定したときはパブリッシュされたプログラムが対象になる。
プライベートリポジトリ(private)も対象になる。
mbedオンラインIDEのアカウントとは関連のないリポジトリも対象なのでインポートしなくてもバイナリを作製出来た。

tasks/compiler/outputでコンパイルエラーの時のレスポンスはbinaryフィールドに文字列ではなくて、falseが返ってきます。
jsonライブラリ(encoding/json)の構造体への変換(json.Unmarshal)でエラーになってしまう。現状はエラーを無視して対応。

tasks/compiler/binでバイナリファイルをダウンロードをするのにタスクID(task_id)だけを指定すれば良さそうなものだが、バイナリファイル名(binary)とプログラム名(program)も指定しないとインターナルサーバーエラー(500)になる。
outputのレスポンスのbinary、programと同じでなければならない。

リポジトリでプログラムを指定した時はrepomode=1を設定しています。
repomode=だけではインターナルサーバーエラーになる。

参考資料

Compile APIのドキュメント
https://developer.mbed.org/handbook/Compile-API

作ったプログラム

Compile APIを使ったコマンド
https://bitbucket.org/va009039/rarmcc

Compile APIクライアントのライブラリ
https://bitbucket.org/va009039/mbedapi

Windows用の実行ファイル(rarmcc.exe)は次のサイトからダウンロードして下さい。
https://developer.mbed.org/users/va009039/notebook/mbed-api-client/

(2016/4/19)
---

2016年1月5日火曜日

LPCXPresso1769/CD(OM13085)をmbedとして使う

LPC1769 LPCXpresso/LPCXPresso1769 with CMSIS-DAP(OM13085)に搭載されているデバッガー(LPC11U35)のファームウェアを書き換えてmbed対応にしました。

LPC1768/LPC1769専用のフラッシュアルゴリズムに変更。
DAP_LEDでファイル書込み・シリアル通信のLEDを代用。
プログラム書込み後に自動リセットするように変更。

動作例



mbed対応方法


SW1を押しながらUSB接続するとCRP DISABLDのドライブが現れるので、firmware.binを削除して次のファイルをコピーします。
lpc11u35_lpcxpresso1769_if.bin(29,236 バイト) または lpc11u35_lpc_if.bin(29,712 バイト)

printf()等のUSBシリアル通信を使うには R66 R67 を付けて下さい。


WindowsでCMSIS-DAPを使うにはUSBシリアルドライバ(mbedWinSerial_16466.exe)をインストールして下さい。

https://developer.mbed.org/users/va009039/code/lpcxpresso1769_helloworld/

ファームウェアの再構築方法


Keil MDK-Lite 4.74 をダウンロード、インストール。
リポジトリ https://bitbucket.org/va009039/lpc11u35_cmsis-dap をダウンロード(クローン)。
MDKでプロジェクトファイル interface/mdk/lpc11u35/lpc11u35_lpcxpresso1769_interface.uvproj を開く。
ターゲット lpc11u25_lpcxpresso1769_if をビルド。
ファームウェア firmware/lpc11u35_lpcxpresso1769_if.bin が出来上がります。

(2016/1/11)
(2016/2/5)修正
---

2015年12月10日木曜日

"LPCXpresso1769/CD"互換機の試作



最新の「LPCXpresso 1769 with CMSIS-DAP」はデバッガーがLPC11U35に変更になりました。
まだ入手できそうもないので、互換機をTG-LPC11U35-501と旧版のLPCXpresso LPC1769 Rev.Bで作ってみました。

製品のファームウェアの詳細がわからないが、mbedインターフェースのを使えば書込み用のソフトウェアを使わずにドラッグ・アンド・ドロップでプログラムを書き込む事が出来ます。
ローカルストレージが付いていない mbed LPC1768 とほぼ同等になります。
イーサネットのPHYチップがLAN8720で違いますが、mbedライブラリが自動判定して動きます。

結線

TG-LPC11U35-501とLPCXpresso LPC1769を次のように繋げます。
TG-LPC11U35-501 LPCXpresso1769 Rev.B
TARGET_SWDIO CN1-6(PIO0_8) J4-4
TARGET_SWCLK CN1-8 (PIO0_7) J4-6
TARGET_NRESET CN2-11(PIO0_1) J4-12
TARGET_TXD CN1-10(PIO0_19) J6-21(P0_2)
TARGET_RXD CN1-9(PIO0_18) J6-22(P0_3)
TARGET_ISP CN2-15(PIO1_15) J6-51(P2_10)
ISP は使ってないがファームウェアの動作確認のために繋げておきます。
Flash Magic に対応して DTR/RTS で RESET/ISP を制御するのかもしれない。

回路図

ファームウェア

TG-LPC11U35-501に次のファームウェアをUSB ISPで書込みます。
(2015/12/10)
---

2015年9月13日日曜日

Nitrous IDEでmbedプログラミング

注意

Nitrous IDEの無料のworkspaceは2週間使わないと削除されます。
1週間前、24時間前に削除予告のメール通知があります。なお、アカウントは削除されません。

11月10日以降に無料のworkspaceは作製出来なくなりました。2週間毎にログインしていれば保持できたようです。(2015/12/13追加)

無料のworkspaceが作製出来るようになりました。一ヶ月に50時間まで使用出来るようです。
Account Setting - Bonus HoursのGet Bonus Hoursで11時間追加出来ます。
https://community.nitrous.io/posts/the-nitrous-free-tier-is-back
(2016/2/13追加)

プログラムのエクスポート


mbedオンラインコンパイラ(mbed.org)でプログラムをGCC(ARM Embedded)でエクスポートして
mbed_blinky_gcc_arm_nucleo_l152re.zip をローカルに保存します。

Nitrous環境の構築


GCC ARM Embeddedをインストールします。
sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

ファイルのアップロード


ファイルツリーのnitrousフォルダで右クリックメニューUpload Files to nitorusで
mbed_blinky_gcc_arm_nucleo_l152re.zipをアップロードします。


unzipコマンドでZIPファイルを展開します。
unzip mbed_blinky_gcc_arm_nucleo_l152re.zip

mbed_blinkyディレクトリに展開されます。

ビルド


makeコマンドを実行します。
cd mbed_blinky
make

mbed_blinky.binが作製されます。

ダウンロード


ファイルツリーのmbed_blinky.binの右クリックメニューDownload mbed_blinky.bin
からダウンロードします。


(2015/9/3)
(2015/9/13)追加
(2015/12/02)追加
---

2015年9月2日水曜日

Koding IDEでmbedプログラミング

プログラムのエクスポート


mbedオンラインコンパイラ(mbed.org)でプログラムをGCC(ARM Embedded)でエクスポートして
mbed_blinky_gcc_arm_nucleo_l152re.zip をローカルに保存します。

Koding IDE環境の構築


GCC ARM Embeddedとmakeをインストールします。
sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install make

ファイルのアップロード


IDEのファイルツリーにドラッグ・アンド・ドロップで mbed_blinky_gcc_arm_nucleo_l152re.zip をアップロードします。


右クリックメニューのExtractでZIPを展開します。

mbed_blinky_gcc_arm_nucleo_l152re/mbed_blinkyフォルダにファイルが展開されます。

ビルド


cd mbed_blinky_gcc_arm_nucleo_l152re/mbed_blinky/
make

mbed_blinky.binが作製されます。

ダウンロード


mbed_blinky.bin をWebフォルダにコピーします。


ブラウザから http://KODING_USERNAME.koding.io/mbed_blinky.bin に接続して mbed_blinky.bin をダウンロードします。


詳しくは:
How do I transfer/copy files to and from my VM?
http://learn.koding.com/faq/transfer-files/

mbed_blinky.bin を mbed のドライブにコピーしてプログラミングを実行します。

(2015/9/2)
---



2015年9月1日火曜日

Cloud9 IDEでmbedプログラミング

プログラムのエクスポート


mbedオンラインコンパイラ(mbed.org)でプログラムをGCC(ARM Embedded)でエクスポートする。

mbed_blinky_gcc_arm_nucleo_l152re.zip が保存されます。

Cloud9環境の構築


Cloud9でworkspaceを作製する。workspaceの種類はどれでもよい。demo-projectでもよい。

次のコマンドを実行して GCC ARM Embedded をインストールする。
sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

プログラムのインポート


メニューFile - Upload Local Files でmbed_blinky_gcc_arm_nucleo_l152re.zipをアップロードする。


unzipコマンドでZIPファイルを展開します。
unzip mbed_blinky_gcc_arm_nucleo_l152re.zip

mbed_blinkyディレクトリに展開されます。

ビルド


makeコマンドを実行します。
cd mbed_blinky
make

mbed_blinky.binが作製されます。

ダウンロード


mbed_blinky.binファイルの右クリックメニューのDownloadでローカルにダウンロードします。
mbed_blinky.binが現れない時はmbed_blinkyディレクトリでRefreshします。

mbedのドライブに直接ダウンロードしてもよい。プログラムが実行されます。

(2015/9/1)
---

2015年8月14日金曜日

EmBitzでmbed LPC1768のデバッグ設定(暫定)

MDKのようなソースコードレベルでのデバッグはまだ出来ていませんが、
pyOCDバイナリ版のpyOCD_Winを使えばフラッシュ書込み、アセンブラレベルでのステップ実行くらいならできるようになったので設定方法です。

pyocd_win.exe を次のサイトからダウンロードします。
https://launchpad.net/gcc-arm-embedded-misc/pyocd-binary/

EmBitzのメニューDebug - interfacesでGDBサーバとしてpyOCDを設定します。
Generic
IP address: localhost
port: 3333
Executable: pyocd_win.exe
Pathはpyocd_win.exeをBrowse入力すると自動で設定されます。


メニューDebug - start sessionでデバッグを開始すると初回のみセキュリティ確認がでますが、
pyOCDが実行されてmbed LPC1768のデバッグが出来るようになります。


ただし、ソースコードレベルでブレークポイントで止めたりステップ実行は出来ない。
ディスアセンブル表示の中ではブレークポイント、ステップ実行は効きます。
EmBitz側で設定しなければならないところがあるのだろうと思います。

pyOCDなのでCMSIS-DAPのmbedなら同様にデバッグ出来そうだが未確認です。

参考:
pyOCD Binary Version
https://developer.mbed.org/blog/entry/pyOCD-Binary-Version/

(2015/8/14)
---

LPC812エミュレータの試作



LPC812(Cortex-M0+,V6Mアーキテクチャ)のエミュレータを試作してみました。
とりあえず、mbed_blinky(Lチカ)のバイナリを動かすまでは出来ました。

mbed LPC1768で動作します:https://developer.mbed.org/users/va009039/code/emu812/

pythonでの検証
まずは、動作速度は関係なく、V6Mアーキテクチャを理解するためにpythonで書き初めました。
ステップ実行のレジスタやメモリアクセスの様子をログに残すようにして、他の言語で書いたものと機械的に比較して間違いを検出しやすくするようにします。

大まかな動作は次のとおりです。
プログラムカウンタが指すアドレスから命令を取り出す。
ジャンプテーブルで命令の上位バイトから256通りに分岐します。
命令をデコードしてレジスタにアクセスするための添字を求めます。
演算(データ処理)またはデータ転送をします。

ゼロフラグ(Z)、符号フラグ(N)は演算結果から求める事はできる。
キャリーフラグ(C )、オーバーフローフラグ(V)はどうするのだろうと調べてみたら、演算前の最上位ビットと演算後の最上位ビットから求める事ができるのがわかりました。
ADD Rd,Rn,Rm のそれぞれRd,Rn,Rmの最上位ビットからテーブルを引いています。

ADD Rd,#imm レジスタとイミディエートとの演算、ADD Rd,Rn レジスタとレジスタの演算を共通化するためにイミディエート用の仮のレジスタを作りました。
命令をデコードしたときにイミディエートの値をR[17]に入れます。
つまり、 R0 = R1 + #imm は R0 = R1 + R17 に換えて演算処理に渡します。

演算結果を求めるのでなくてフラグの結果だけを知りたい比較命令CMPと減算命令SUBを共通化します。
比較命令を Rd = Rn - Rm に共通化するために 命令のデコードでRd をR[18]に書き換えて演算結果を捨てるようにします。

pythonでのLPC810エミュレータです:https://bitbucket.org/va009039/emu810


C++への半自動変換
pythonで書いたプログラムをC++に書きなおすのですが同じような作業の繰り返しなので簡単な文字列置換のプログラムを作ってC++へまとめて変換します。
pythonでは冗長なselfでのメソッド変数へのアクセスは文字列置換には好都合です。
ジャンプテーブルの自動作成のために命令範囲をコメントとして書いています。同じ形式の関数名にして抽出しやすいようにしています。
変換に作ったプログラムです: conv.py

ペリフェラル
初期設定を進めるためにPLLがロックしたとみなすステータスを返すようにします。
wait()タイマーはMRTを使っているので適当な間隔でTIMER0を進めます。
GPIOはDIRレジスタをみて出力だけをホストMCUに渡すようにしています。
LPC1114版も作ってみました: https://developer.mbed.org/users/va009039/code/emu1114/

参考文献
(2015/8/14)
---

2015年5月21日木曜日

mbedオフライン環境にEmBitz beta 0.31を試す(Nucleo F411RE編)

インストール

EmBitz beta 0.31をダウンロードする。
EmBitz_Beta 0.31.7z
http://www.emblocks.org/forum/viewtopic.php?f=1&t=595
7zipで展開、EmBitz_Beta 0.31.exeを実行してインストールする。

プログラムのエクスポート

オンラインコンパイラからmbed_blinky_emblocks_nucleo_f411re.zipを保存する。展開する。


プログラムのインポート

EmBitzでmbed_blinky.eixを開く。


ビルドするとmain.cppで使っているmbedライブラリのwait関数が他のライブラリのと衝突する。


wait関数を使わない(例えば、代わりにwait_msを使う)か、次のようにmbedライブラリを最初にリンクするように変更する。


ビルドは成功する。


実行・デバッグ

デバッカを起動して実行ファイルをNucleo F411REに書込む。


デバッカでステップ実行も出来ます。


バイナリーファイルの作成

mbedに書込むだけならバイナリーファイル形式が便利なので、EmBitzのToolsメニューにELFファイルからの変換を追加します。

メニューのTools - Configure tools… - Add - Edit tool で以下のように設定します。


(2015/5/23)
---


2014年11月1日土曜日

mbedオフライン環境にEm::Blocks IDEを使う(Nucleo F401RE編)



Em::Blocks IDEをNucleo F401REのmbedのオフライン環境に試してみました。
本体がC++で書かれているのでCoIDEやLPCXpressoIDEに比べて軽快に動きます。
GCCコンパイラは内蔵されているので別途インストールする必要はありません。

Em::Blocks IDEのインストール

次のサイトから EmBlocks_2.30.zip をダウンロードする。
http://www.emblocks.org
http://www.emblocks.org/web/downloads-main
(ファイルサイズは40Mバイトと小さいのだが回線が細いようなのでダウンロードに20分くらいかかってしまった)
展開して、EmBlocks_2.30.exe を実行する。

プログラムのエクスポート

mbedオンラインコンパイラからプログラムを emblocks でエクスポートする。


exportしたファイル(mbed_blinky_emblocks_nucleo_f401re.zip)を展開しておく。

Em::Blocksで mbed_blinky.eix をインポートする。


《重要》 mbedライブラリを最初にリンクするように移動する。(Project build options)
最後にリンクしているとmbedライブラリのwait関数(wait_api.c)とシステムライブラリ のwait関数(syswait.c)が衝突してリンクエラーになります。


ビルドする。buildフォルダに 実行ファイル mbed_blinky.elf が作成されます。


実行ファイルを書込むだけの機能は内蔵されていないのでデバッガを開始させて書込む。
Reset Run でプログラムを実行します。


(2014/11/1)
---

2014年10月23日木曜日

mbedオフライン環境にCoIDEを使う



Nucleo F401REのmbedのオフライン環境にMDK-Liteを使っていたのだが、
32Kバイトを超えるコードはリンク出来ないのでサイズ制限のないCooCox CoIDEを試してみました。

CoIDEのインストールと設定


CooCoxのサイトからCoIDEをダウンロードしてインストールする。
http://www.coocox.org/CooCox_CoIDE.htm
http://www.coocox.org/Tools/coIDE-1.7.7.exe 422MB(442,827,819バイト)

CoIDEを起動して、Toolchain Path を設定する。


本来はgccを新規にインストールするのだが、LPCXpresso付属のgccを使う。


プログラムのエクスポート


mbedオンラインコンパイラのexportの変更によりmbedライブラリが付くようになりましたのでmbed-srcへの変更は必要なくなりました。
mbedオンラインコンパイラからexportする前にmbedライブラリを mbed-src に切替える。
(mbedライブラリを削除して mbed-src をインポートする)
http://developer.mbed.org/users/mbed_official/code/mbed-src/


プログラムをToolchain CooCox CoIDE形式でエクスポートする。


exportしたファイル Nucleo_blink_led_coide_nucleo_f401re.zip を展開する。

CoIDE でプロジェクトファイル Nucleo_blink_led.coproj を開く。(Open Project…)

リビルドする。(Rebuild)

実行コードをNucleo-F401REに書き込み、実行する。(Download Code To Flash)

現在の問題点

wait()関数が速くなってLチカが10倍くらい速く動く。
しかし、printf()を実行した後なら正しい時間間隔になる。原因は未調査です。

(2014/10/23)
(2014/11/1)修正 mbed-srcへの変更、現在の問題点を削除。
---

2014年9月11日木曜日

TinyJS on mbedをLPC4088,FRDM-K64Fで動かす



TinyJS on mbedをLPC4088,FRDM-K64Fで動かしてみました。

GAEでオンラインコンパイラ風(ソースコードを繫げてるだけ)にしています。
オンラインエディタでコードを入力してbuildボタンでバイナリーがダウンロードされます。
次のURLで試すことが出来ます。
http://tinyjsmbed.appspot.com/

PinNameの違いはpython-on-a-chipで使っていたPinNameテーブルを使っています。PinNameTable.h

LPC1768版ではメモリの都合で外されていたjavascriptの関数を追加しました。
TinyJS_Functions.cpp(registerFunctions)
exec(jsCode) eval(jsCode) trace() Object.dump() Object.clone() Math.rand() Math.randInt(min, max) charToInt(ch) String.indexOf(search) String.substring(lo,hi) String.charAt(pos) String.charCodeAt(pos) String.fromCharCode(char) String.split(separator) Integer.parseInt(str) Integer.valueOf(str) JSON.stringify(obj, replacer) Array.contains(obj) Array.remove(obj) Array.join(separator)

更に数値・三角関数も追加しました。
TinyJS_MathFunctions.cpp(registerMathFunctions)
Math.abs(a) Math.round(a) Math.min(a,b) Math.max(a,b) Math.range(x,a,b) Math.sign(a) Math.PI() Math.toDegrees(a) Math.toRadians(a) Math.sin(a) Math.asin(a) Math.cos(a) Math.acos(a) Math.tan(a) Math.atan(a) Math.sinh(a) Math.asinh(a) Math.cosh(a) Math.acosh(a) Math.tanh(a) Math.atanh(a) Math.E() Math.log(a) Math.log10(a) Math.exp(a) Math.pow(a,b) Math.sqr(a) Math.sqrt(a)

メモリが多いNucleo-F401REでも動いてほしいのだが、microlibのボードとは相性が良くないみたいです。

print(mbed.memfree());での残りメモリの表示。
LPC4088版
47645バイト
36301バイト TinyJS_Functions.cpp(registerFunctions)を使用。
23733バイト TinyJS_Functions.cpp(registerFunctions)と TinyJS_MathFunctions.cpp(registerMathFunctions)を使用。

FRDM-K64F版
122101バイト TinyJS_Functions.cpp(registerFunctions) と TinyJS_MathFunctions.cpp(registerMathFunctions)を使用。

TinyJS on mbed
http://mbed.org/users/ohneta/code/TinyJS/

GAE用に修正したTinyJS on mbed
http://mbed.org/users/va009039/code/TinyJS/

GAEで動いているWebアプリのソースコード
https://bitbucket.org/va009039/tinyjsmbed

(2014/9/11)
---

2014年6月12日木曜日

Nucleo F401RE用のUSBホストライブラリの試作



Nucleo F401REはmbedのUSBホストでサポートされていないので簡易版を試作してみました。

ホストチャネルドライバ(stm32f4xx_hal_hcd.c)を改造してKL46Z-USBHostのハードウェア依存部分への
インターフェースを互換にしたので、USBDeviceのようにターゲットを切替えるだけでNucleo F401REと
FRDM-KL46Zは同じライブラリを使えるようにしました。
ですのでKL46Zで使うだけなら以前に作成したKL46Z-USBHostと完全互換です。

KL46Zの場合は1つのエンドポイントパイプを全てのエンドポイントが共有して送受信していましたが、
F401REでは8個のエンドポイントパイプ(ホストチャネル)を持っているので、
コントロール転送、バルク転送、インタラプト転送、アイソクロナス転送で分けて使っています。

たぶん、KL46Zのように共有できると思うのですが、ホストチャネルHALTの仕組みを完全に理解していないのと、
デバッグで各チャネルのレジスタの振る舞いがみたいので、暫時分けています。
今のところアイソクロナス転送は1つだけに限定しています。

ホストチャネルドライバは汎用USBホストに使うよりは、
あらかじめ接続されるUSBデバイスが解っているUSBホストの作成には相性がよさそうです。

現在の重大な不具合はUSBメモリへの書き込みが出来ない。
BOT(バルクオンリー転送)での書き込みに失敗します。
送信FIFOの容量が足りないのか、連続トークンOUTがいけないのか今後調べてみたいです。


使用例をmbedサイトに置きました。KL46Z用のサンプルプログラムでライブラリを入れ替えただけです。
他にもGPSレシーバー(バルク転送IN)、マウス(インタラプト転送IN)は動きました。

Webカメラの使用例(アイソクロナス転送IN)
F401RE-USBHostC270_example

BTstackでの使用例、Bluetoothマウスからの受信のみ。(インタラプト転送IN、バルク転送IN,OUT)
F401RE-BTstack_example

参考:
stm32f4xx_hal_hcd.c
stm32f4xx_ll_usb.c
RM0368 Reference manual STM32F401xB/C and STM32F401xD/E advanced ARM-based 32-bit MCUs
UM1720 User manual STM32Cube™ USB host library

(2014/6/12)

USBメモリへの書き込み不具合を解消しました。
F401RE-USBHost

(2014/6/13追加)
---

2014年4月27日日曜日

FRDM-KL25Z・FRDM-KL46Zをmbedインターフェースとして使う(更新)


ターゲットへの配線間違いを防ぐためにSWDとリセットのピンアサインを共通化してみました。
DAP_config.h

・uv4等でCMSIS-DAPが動かない時はSWDIO,SWCLKへの配線を確認。
・CMSIS-DAPは動くがドラッグアンドドロップ終了しない(MSC書込みLEDが点滅しない)時はリセットへの配線を確認。
・ドラッグアンドドロップが終了するがfail.txtが出来る時はSWDIO,SWCLKへの配線を確認。
・MBEDドライブが見えない時はUSB接続、ファームウェアの書込みを確認。
・ドラッグアンドドロップは出来るがシリアルポートが認識しない時はmbedWinSerial_16466.exeをインストール。

FRDM-KL25Z・FRDM-KL46Zをmbedインターフェースとして使う
http://mbed.org/users/va009039/notebook/frdm-kl25z-mbed-if/

(2014/4/27)
---

2014年4月24日木曜日

EA LPC4088 QSB用のUSBホストライブラリの試作



EA LPC4088クイックスタートボードはmbedのUSBホストでサポートされていないので試作してみました。

LPC4088のUSBコントローラは0x10000000から始まるメインSRAMにはアクセス出来なく、
0x20000000からのメモリAHBSRAM0,AHBSRAM1のみにアクセス出来ます。(以下USBRAMと略す)

USBRAMに転送データがあれば問題無いのだがmbed OfficialのUSBHostとインターフェース互換に
したかったので、USBデバイスへの転送の都度、USBRAMにコピーしてからUSBコントローラを
起動してしています。
実装ではUSBRAMからfirst-fitアルゴリズムで64バイト単位で転送領域を切り出すようにしています。
もちろん、HCED,HCTD,HCITD,HCCAも切り出しています。

USBコントローラの初期設定はLPC1768のとほぼ同じです。
LPC4088のLPCOpenのサンプルコードを参考にしたところ、
USBポートの機能設定がLPC_PINCONからLPC_IOCONに変わっているだけでした。
LPCOpenサンプルコードとはP1_19の扱いが違うのでLPCOpenのように設定してはいけない。
EA LPC4088 QSBではUSBホストへの電力供給イネーブルに使っています。
#if defined(TARGET_LPC1768)
    LPC_PINCON->PINSEL1 &= ~((3<<26) | (3<<28));  
    LPC_PINCON->PINSEL1 |=  ((1<<26)|(1<<28));     
#elif defined(TARGET_LPC4088)
    LPC_IOCON->P0_29 = 0x01; // USB_D+1
    LPC_IOCON->P0_30 = 0x01; // USB_D-1
    // DO NOT CHANGE P1_19.
#else
LPC_USBのレジスタ名が違っていたのでLPC1768の名前で再定義しました。
#define HcRevision Revision
#define OTGStCtrl StCtrl

ハードウェア依存以外はKL46ZのUSBホスト試作のコードを使いました。
ノンブロック型転送の場合にUSBHost::poll()を呼び続ける事以外は
OfficialのUSBHostとインターフェース互換です。
制限事項も同じく、USBデバイスは予め接続しておかなければいけない。
USBデバイスの取り外しには対応していません。
USBハブは使えます。

アイソクロナス転送だけはKL46Zのとインターフェース互換ではありません。
Webカメラ用に専用のライブラリを作りました。

まだまだ不具合がありますが、使用例をmbedサイトに置きました。

USBフラッシュメモリの使用例
LPC4088-USBHostMSD_HelloWorld
Webカメラの使用例
LPC4088-USBHostC270_example

(2014/4/24)
---

2014年4月7日月曜日

mbed LPC1549のオフライン環境(2)

オフライン環境でソースコードを変更した時にオンラインIDEにも反映させるための準備。

予めプライベートリポジトリを作っておく。


SourceTreeでリポジトリからソースコードをクローンする。


Clone repository to desktopのURLを元のパス/URLに入れる。
クローンするローカルフォルダを保存先のパスに入れる。


mbed.orgでのパスワードで認証する。


リポジトリのクローン。


ローカルフォルダにexportしたファイル・フォルダで重複しないものをコピーする。
プロジェクトファイルを開いてソフトウェアを作成する。

SourceTreeでプッシュする。


オンラインIDEにソースコードを反映させるためにUpdateする。


オンラインIDEで反映されたソースコードでビルド出来ます。

(2014/4/7)
---

2014年3月30日日曜日

LPCXpresso LPC1549ファームウェアの再ビルド・更新(2)

以前のバージョンではCMSIS-DAPが動かなかったが、修正されたようなので再ビルドしてみる。

http://mbed.org/media/uploads/va009039/lpc4322_lpc1549_if_mbed.bin

ファイルサイズ等:


CMSIS-DAPで認識するようになりました。


(2014/3/30)
---