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

2015年9月5日土曜日

LPC4088 QuickStart BoardをISPモードで復旧する

LPC4088 QuickStart Boardにmbedインターフェース(SWD)からプログラムが書けなくなったのでISPモードで復旧します。

SW2(User-SW)を押しながら電源投入(リセット)でISPモードに入る。
ターミナルソフト(TeraTerm)を起動して、
「?」だけを送る。Synchronized が返ってくるのでISPモードに入ったのを確認出来ます。
「Synchronized」を送ると OK が返ってくるので、
「12284」を送る。
「U 23130」を送る。
「P 0 0」を送る。
「E 0 0」を送る。
これでLPC4088のフラッシュのプログラムを削除して復旧出来ます。


TeraTermのマクロで記述すると次のようになります。
setbaud 9600
send '?'
waitln 'Synchronized'
sendln 'Synchronized'
waitln 'OK'
sendln '12284'
waitln 'OK'
sendln 'U 23130'
waitln '0'
sendln 'P 0 0'
waitln '0'
sendln 'E 0 0'
waitln '0'

(2015/9/5)
---

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年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)
---