2014年4月27日日曜日

mbedインターフェースの汎用フラッシュ書込みの高速化



LPC1114FN28・LPC810対応のLPC800-MAXの作り方
http://mbed.org/users/va009039/notebook/lpc1114fn28lpc800max
のファームウェアは実はLPC1768でも動いていたのだが、512Kバイト書込むとUSBタイムアウトになっていた。
Seeeduino-Arch-Proのファームウェアを薦めて未サポートにしてもよかったのだが、
汎用フラッシュアルゴリズムでも書き込めるように修正。
https://twitter.com/va009039/status/453528221741355008

・クロックを4MHzから60MHzに変更。しかし、あまり効果が無かった。
static uint8_t flash_init_lpc1769()
・イレースセクタの後のブランクチェックの削除。
  #define USE_BLANK_CHECK_VERIFY 0
・フラッシュ書込み後ベリファイの削除。
  #define USE_COMPARE_VERIFY 0
・フラッシュ書込みの単位を256バイトから512バイトに拡張。
target_flash.h

IAP使用時のターゲットSRAMのメモリマップ
0x10000000~0x10000003 ブレークポイントの命令エリア(IAPリターンで止めるため)
0x10000004~0x10000007 IAPのコマンドコード
0x10000008~0x1000000b IAPのparameter1
0x1000000c~0x1000000f IAPのparameter2
0x10000010~0x10000013 IAPのparameter3
0x10000014~0x10000017 IAPのparameter4
0x10000018~0x1000001b IAPのステータスコード
0x1000001c~0x1000001f IAPのresult1
0x10000020~0x10000023 IAPのresult2
0x10000024~0x10000027 IAPのresult3
0x10000028~0x1000002b IAPのresult4
0x1000002c~0x1000022b フラッシュ書込みの一時エリア(512バイト)
0x1000022c~0x100003df スタックエリア(436バイト)
0x100003e0~0x100003ff IAPコマンドハンドラが使用(32バイト)

LPC810の1KバイトのSRAMでも動くように配置してあります。
しかしながらLPC1549ではSRAMアドレスが違うので注意。

(2014/4/27)
---

0 件のコメント: