▲記事リストへ 新規投稿 留意事項 使い方 話題一覧 検索 ホーム

■ 記事閲覧(一覧表示)

題名:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

はじめまして
E2PROM APIは Romをかなり消費するように感じます。
そこで 直接SROM関数を使って書込み、読出ししたいのですが ドキュメントを読んでもどうもつかめません。
読み書きは64byte単位で考えています。
コーディングした例がありましたらご教示いただきたいと思います。
そもそも直SROMなど無謀(危険)なのでしょうか?このあたりの常識もわきまえていない段階です。

→返事を投稿
08月14日11時16分(土) 話題:1932 親番:1932 番号:1932 再編集/削除

題名:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:JUNK-BOX  メール

> コーディングした例がありましたらご教示いただきたいと思います。
多分一番確実なのはPSoC Designer自身が吐き出したコードとマニュアルを
突き合わせて見ることではないかと思います.

たとえば,生成された.lstファイルを開いてみると
0851: 08 PUSH A
0852: 10 PUSH X
0853: 4F MOV X,SP
0854: 5B MOV A,X
0855: 01 03 ADD A,3
0857: 53 F9 MOV [249],A
0859: 55 F8 3A MOV [248],58
085C: 50 02 MOV A,2
085E: 00 SWI
085F: 20 POP X
0860: 18 POP A
なんていう具合にWriteBlockを呼び出しているところがあったりします.
248=F8H,249=F9HですがこれをTRM(Technical Reference Manual)で
見るとF8は3AH(=58)に固定で,F9はスタックポインタ値+3をセットしろ
とありますので,なるほど,これのことか・・と分かるでしょう.
他のパラメータはどこでセットしているのかをちょっと追いかけてみれば
そういうことか・・とすぐ分かるかと思います.

ユーザモジュールでRAM/ROMの使用量が多くなるのはフラッシュが64バイト
単位でしか書き換えできないため64バイト以下の時にはリードモディファイ
ライトするなど,いろいろとサービスしなくてはならないものがあると
いうのが大きいでしょう。


→返事を投稿
08月14日13時28分(土) 話題:1932 親番:1932 番号:1933 再編集/削除

題名:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

> 多分一番確実なのはPSoC Designer自身が吐き出したコードとマニュアルを
> 突き合わせて見ることではないかと思います.

ごもっともなご指摘だと思います。 ありがとうございます。
特にわからなかったのは書き込み時のディレイの設定の仕方のところでした。
値が適当でない場合どのような不具合が出るのか、検証のしようがないと思いました。 どうマニュア読んでも理解できなかったものですから。
もうすこしよくみてみます。


> ユーザモジュールでRAM/ROMの使用量が多くなるのはフラッシュが64バイト
> 単位でしか書き換えできないため64バイト以下の時にはリードモディファイ
> ライトするなど,いろいろとサービスしなくてはならないものがあると
> いうのが大きいでしょう。
>

そうですか 700バイト超のROM消費は4kの石を使う身にはだいぶ重いなぁと思った次第です。
E2PROMLIB.asm がどこにあるのか 見つけられませんでわからないでいました。 どこにあるのかご存知でしょうか。

お世話になりました 今後ともよろしくご指導お願いいたします。 ありがとうございます。

→返事を投稿
08月15日17時25分(日) 話題:1932 親番:1933 番号:1934 再編集/削除

題名:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:JUNK-BOX  メール

>特にわからなかったのは書き込み時のディレイの設定の仕方のところでした。
「推奨値」の計算式はマニュアルに出ていますからそれに従っておくのが手堅い
でしょう。推奨値から外れた場合にどうなるかということは,正確には
Cypressのエンジニアに聞くしかありませんので,とりあえず我々一般民間人(笑)としては
想像するよりありませんけど,おおかたフラッシュメモリへの書き込み
コマンド発行後に内部の書き込み動作が終了するのを固定値のディレイで待つ
ような仕掛けなのでしょう.
とすれば短いと連続アクセスした時に内部の書き込み動作が完了していない
状態で次のコマンド発行になってしまうので書き換えが正しく行われない
ということになるでしょうね.長い分には遅くなるだけかな?

#書き込み用のパルスをCPUで生成・・なんていうことをやっているとすれば
#長いとまずいことになる(セルに無用のストレスがかかる)ことになります
#けど,さすがにそんな設計はしていないんじゃないかなぁ?

> E2PROMLIB.asm がどこにあるのか 見つけられませんでわからないでいました。 どこにあるのかご存知でしょうか。

ソースコードとしては無かったかもしれませんね.
.lstファイルでは逆アセンブルリストが出ていますからざっと眺めれば
だいたい何をやろうとしているかは分かると思いますが.


→返事を投稿
08月16日07時48分(月) 話題:1932 親番:1934 番号:1935 再編集/削除

題名:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール


> 想像するよりありませんけど,おおかたフラッシュメモリへの書き込み
> コマンド発行後に内部の書き込み動作が終了するのを固定値のディレイで待つ
> ような仕掛けなのでしょう.

そうですね。 温度依存性はその最悪値で設定しておけば... と想像はしています。 もしかしたらユーザーモジュールが大きいのはこのディレイ計算にフローティングや割り算を使っているためかなぁと思っていました。 アドバイスありがたいです。 助かります。


> > E2PROMLIB.asm がどこにあるのか 見つけられませんでわからないでいました。 どこにあるのかご存知でしょうか。
>
> ソースコードとしては無かったかもしれませんね.
> .lstファイルでは逆アセンブルリストが出ていますからざっと眺めれば
> だいたい何をやろうとしているかは分かると思いますが.
>

 やはりソースは公開されていないようですか? とすればやはり逆アセンブルで追ってみるしかないですね。 やってみます。 ありがとうございました。 また何かわかったら報告します。 PSocは楽しい石ですね。



→返事を投稿
08月17日10時58分(火) 話題:1932 親番:1935 番号:1936 再編集/削除

題名:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ectoyfan  メール

横から失礼します.hobby でPSoCを楽しんでいるectoyfanといいます.

> > > E2PROMLIB.asm がどこにあるのか 見つけられませんでわからないでいました。 どこにあるのかご存知でしょうか。

Designer が generate したコードは lib/ 以下にあります.
そのおおもとはというと
C:\Program Files\Cypress\Common\CypressSemiDeviceEditor\Data
あたりにずらずらとあって,EPROMだったら
C:\Program Files\Cypress\Common\CypressSemiDeviceEditor\Data\Stdum\E2PROM
ですが,ここにあるテンプレート(ひな型)から関数名の置き換え処理などを
行って lib/ 以下にソースコードを作っていくのが generate の
作業ということになります.コードが見当たらない,という方は,
モジュールを配置したらプログラムをまだ書いていなくても
まずbuild をかけて(もちろんgenerateで十分なのですが),
designer にコードを作らせることを忘れない,と覚えたらよいです.


→返事を投稿
08月17日11時12分(火) 話題:1932 親番:1936 番号:1937 再編集/削除

題名:訂正
名前:ectoyfan  メール

すいません.訂正です.

> そのおおもとはというと
> C:\Program Files\Cypress\Common\CypressSemiDeviceEditor\Data

C:\Program Files\Cypress\Common\CypressSemiDeviceEditor\Data\Stdum

編集キーを打ちこみ間違えてしまって元記事が直せませんでした.すいません.

→返事を投稿
08月17日11時17分(火) 話題:1932 親番:1937 番号:1938 再編集/削除

題名:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

ectoyfanさん アドバイスありがとうございます。

確かにいろいろなコードが作られていますね。 探すだけでもうろうろしてしまいます。
中にE2PROM.xxx と言うコードは作られていましたが これはライブラリーを呼ぶ部分だけのコードのようで(この部分は.lstにも引用されていました) E2PROMLIBのソースは含まれていないように見えました。 JUNK-BOXさんのおっしゃるようにLIBに関してはソースではなくリンク可能なオブジェクトのみが存在するのではないか?と想像しました。このxxxLIBの部分は.lstにも乗ってこないようですので やはり逆アセンブルしかないかもしれませんね。 なんとか一度 ライブラリーがどんなことをやっているのかだけは知りたいところです。 その結果「やはり自分で最低限サイズになるようなコードを書いてみる」ことが現実的でないのかどうかを知りたいと思います。 勉強になりそうですので少し時間がかかっても解読してみようと思います。

貴重なアドバイスありがとうございます。 感謝いたします。 ふよう


→返事を投稿
08月17日20時45分(火) 話題:1932 親番:1937 番号:1939 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ectoyfan  メール

>E2PROMLIBのソースは含まれていないように見えました。

たとえば 
C:\Program Files\Cypress\Common\CypressSemiBuildMgr\tools\lib\CY8C29000\cms.a
あたりはお役にたちますか?
メモ帳で簡単に中身が覗けて,だいたい構造も想像がつきます.
E2PROMLIBはさらにflashblockを呼ぶようですね...

追加 AN2015というアプリケーションノートが,お知りになりたいことに役立つかもしれません.

JUNK-BOXさんのフォローをみてさらに追加 あ〜不覚.逆アセンブルコードもあってずっと読みやすいですね.
C:\Program Files\Cypress\Common\CypressSemiBuildMgr\tools\include\CY8C29000\E2PROMLIB.inc
とか
C:\Program Files\Cypress\Common\CypressSemiBuildMgr\tools\include\CY8C29000\flashblock.inc
と合わせて読めばパラメタの積み方もわかるし.


→返事を投稿
08月17日22時22分(火) 話題:1932 親番:1939 番号:1940 再編集/削除

題名:Re:・・E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ノンノ  メール

横から失礼します。
デザイナーって面白いですね。
システムデザインで選ぶ、チップデザインで選ぶ、
(これはまな板に載せた状態)
此処でゼネレートすると(料理されて)
C言語アセンブラの必要な分が追加され、
さらに作った分やどこかで貰ってきた分の、
C言語やアセンブラのソース類を右クリックで「ADD」して(此処でまたまな板に追加です)
またゼネレートしますと認識して展開され、
上手く行けばリンカが働いてマップやリストが出来るのですね。
1ヶ月ほど触り続けていますと判ってきました。

> 追加 AN2015というアプリケーションノートが,お知りになりたいことに役立つかもしれません.


→返事を投稿
08月18日08時06分(水) 話題:1932 親番:1940 番号:1941 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

> たとえば 
> C:\Program Files\Cypress\Common\CypressSemiBuildMgr\tools\lib\CY8C29000\cms.a
> あたりはお役にたちますか?
> メモ帳で簡単に中身が覗けて,だいたい構造も想像がつきます.
> E2PROMLIBはさらにflashblockを呼ぶようですね...
>
> 追加 AN2015というアプリケーションノートが,お知りになりたいことに役立つかもしれません.

ectoyfanさん ありがとうございます。
cms.a これならイメージがわきます。 追っていけそうです。 助かりました。
どうも私はまだM8CそれにDesignerを理解していないことを痛感しています。
ご指導に感謝いたします。 ありがとうございます。

→返事を投稿
08月18日11時07分(水) 話題:1932 親番:1940 番号:1943 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:JUNK-BOX  メール

>このxxxLIBの部分は.lstにも乗ってこないようですので 
最初のレスで「.lstファイルを見ると・・」と書いたとおり,
読めるはずですが.(ファイル名は出ていませんが)
たとえば
059A: 7D 05 A8 LJMP 0x05A8 (0222) ljmp bE2Write ; jmp to E2PROMLIB
のようにLJMPしていますが,この先がbE2Writeの実体ですよね?


→返事を投稿
08月18日09時45分(水) 話題:1932 親番:1939 番号:1942 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

> たとえば
> 059A: 7D 05 A8 LJMP 0x05A8 (0222) ljmp bE2Write ; jmp to E2PROMLIB
> のようにLJMPしていますが,この先がbE2Writeの実体ですよね?
>
JUNK-BOXさんありがとうございます。 どうもLJMP部分のアセンブル結果が.lstに出ていないので「おかしい?」と思っていましたら ProjectのSetting...のCompilerセクションで"Sublimation"のオプションをチェックしていたせいでした。 大変失礼いたしました。 場所は見当がつきましたのでじっくりと追ってみたいと思います。 みなさまのお知恵を拝借できて助かりました。 ありがとうございます。

→返事を投稿
08月18日11時31分(水) 話題:1932 親番:1942 番号:1944 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

JUNK-BOXさま ectoyfanさま ノンノさま みなさんお世話になります。
特にノンノさま せっかくレスいただいたのにメッセージお返しできなくてすみませんでした。

あれからダメもとエイヤーとばかりにWriteBlock Supervisor Callの実験をやってみました。 結果は意外にもスムーズに動きました。書込みができました。 まだ温度依存性や CPUクロックや 石の種類に対する依存性など全く未検証の状態ではありますが 稚拙ながら報告させていただきます。

なお 読み出しはCの #pragma abs_address:0x0FC0 ディレクティブを使って直接constを宣言して読み出しています。 (0x0FC0の数値は4Kflashの最後のブロック)

環境
石=CY8C24123(8pinDIP) RAM=256 FLASH= 4K CPUクロック=6MHz 動作電圧=3V(乾電池2個)
PSoc Designer= PD50_SP6 - Build 1127 - 30-October-2009.14:48:28

// E2PROM UMにおける
//E2PROM_1_bE2Write( 0, 64バイトのSRAM上バッファーへのポインタ, 64, 25);
// を直接Supervisor Callで代替
// 以下Cのインラインアセンブラで記述
asm(
"mov [fah], 63 \n" //Block番号 4kのラストブロックなので63
"mov [fch], 2 \n" //消去用クロック
"mov [feh], 39 \n" //消去用Delay値
"mov [f8h], 3ah \n" //KEY1
"mov X, SP \n"
"mov A, X \n"
"add A, 3 \n"
"mov [f9h], A \n" //スタックポインタをKEY2へセット
"mov A, 03h \n" //EraseBlock コール
"ssc \n"
"mov A,[f8h] \n" //戻り値 ゼロなら正常
"push A \n"
"call _戻り値表示用処理 \n"
"add SP,ffh \n "
//書込み
"mov [fah], 63 \n" //Block番号 63
"mov [fbh], _64バイトのSRAM上バッファー \n" //RAM上 元データ
"mov [fch], 2 \n" //書込み用クロック
"mov [feh], 39 \n" //書込み用Delay値
"mov [f8h], 3ah \n" //KEY1
"mov X, SP \n"
"mov A, X \n"
"add A, 3 \n"
"mov [f9h], A \n" //スタックポインタをKEY2にセット
"mov A, 02h \n" //WriteBlock コール
"ssc \n"
"mov A,[f8h] \n" //戻り値 ゼロなら正常
"push A \n"
"call _戻り値表示用処理 \n"
"add SP,ffh \n "
);

本来は前後にpush pop でA,Xレジスタを保護すべき。

Delay値はCypress社のドキュメント通りです。
あやしいのはCLOCK値です。 予めTableRead Supervisor Callを使ってM値、B値、Mult値を読み出しておいてそれを使って手計算しましたが どうもうまくいきません。 0.00000xxxなんていう数字になってしまいます。 値を大きくすると動作時間が伸びるようです。 上記アセンブルリストの数値で余裕を持って動いているのかどうかは今後検証が必要だと思われます。 もっともどうやって検証するか見当がつきませんが。 そもそも私にはM,B,Multという値が何を意味するパラメータなのかも理解できていません。

追記: なおAPIを使わずに直接Supervisor Callを使う理由は APIの700バイト超のサイズがどうしても確保できなかったためです。悪化する諸事情は覚悟の上のしわざです。

このスレッドの本題から外れてしまわないか心配ですが なにかアドバイスありましたらお願いできれば幸いです。 

→返事を投稿
08月19日13時38分(木) 話題:1932 親番:1944 番号:1945 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ノンノ  メール

> JUNK-BOXさま ectoyfanさま ノンノさま みなさんお世話になります。
> 特にノンノさま せっかくレスいただいたのにメッセージお返しできなくてすみませんでした。
こんばんは 私はただ試したくて、
www.cypress.com/?docID=731
こら貰ってきた、割り算ルーチンをC言語から呼び出しました。
これはC言語の勉強にも成りました。
下のレスで書いていますように、右クリックで追加すると言う技(?)
が判らず往生しました、追加できると仕事場探検者にも認知され、
出力ホルダにはマップとリストも出て、読んでみると、
ランタイムが出る度に追加され、離れたところから呼ばれるので、読み切れませんでした。

www.cypress.com/?rID=38632
は見られましたか?

それと「E2PROMルーチンテスト」をやってみました。
アセンブラもC言語も似た結果になりました。

→返事を投稿
08月20日00時01分(金) 話題:1932 親番:1945 番号:1946 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:JUNK-BOX  メール

> あやしいのはCLOCK値です。
該当部分を含めて軽く読んでみましたが,Clockingの章の内容そのものに従って
いますね.乗算が大変なので積和演算器を使っているのと,CLOCKw値の
算出でちょっと工夫しているのがポイントでしょうか.
ざっと眺めて見ただけですが,いろいろ細かい細工があったりと
書いた人の苦労がしのばれます.

0899: 55 FA 03 MOV [250],3 ; 0xFA:BLOCKID(Table Number to Read)
089C: 62 D5 00 MOV REG[213],0 ; 0xD5:
089F: 71 10   OR F,16 ; XIOフラグを立てて
08A1: 62 FA 00 MOV REG[250],0 ;フラッシュバンク#0
08A4: 70 EF   AND F,239 ;0xEF
08A6: 51 FD  MOV A,[253] ;0xFD(Reserved?)
08A8: 39 02   CMP A,2 ;2以外ならHALT
08AA: BF DA   JNZ 0x0885
08AC: 08    PUSH A
08AD: 10    PUSH X
08AE: 4F    MOV X,SP
08AF: 5B    MOV A,X
08B0: 01 03   ADD A,3
08B2: 53 F9   MOV [249],A ;0xF9 KEY2(SP+3を与える)
08B4: 55 F8 3A MOV [248],58 ;0xF8 KEY1(0x3A:固定値)
08B7: 50 06   MOV A,6 ;Table Read Parameters コマンド
08B9: 00    SWI
08BA: 20    POP X
08BB: 3C FF 01 CMP [255],1 ;0xFF(Reserved)
08BE: B0 75   JNZ 0x0934
08C0: 10    PUSH X
08C1: 5D D3   MOV A,REG[211] ;0xD3:IDX_PP
08C3: 08    PUSH A
08C4: 52 04   MOV A,[X+4] ;Temperature
08C6: 60 E8   MOV REG[232],A ;0xE8:MUL0_X
08C8: 21 80   AND A,128 ;if(A & 0x80)
08CA: B0 09   JNZ 0x08D4 ; 0x08D4
08CC: 51 FD   MOV A,[253] ; 0xFD(Reserved):2のはず
08CE: 54 07   MOV [X+7],A ;TempReg7=2
08D0: 57 FB   MOV X,251 ;X=0xFB
08D2: 80 07   JMP 0x08DA

08D4: 51 FA   MOV A,[250] ;0xFA(BLOCKID)(Table Number to Read)
08D6: 54 07   MOV [X+7],A ;TempReg7=TableNumbertoRead
08D8: 57 F8   MOV X,248 ;X=0xF8

08DA: 62 D3 00 MOV REG[211],0 ;0xD3:IDX_PP?
08DD: 52 00   MOV A,[X+0] ;M値(HOT/COLD)
08DF: 60 E9   MOV REG[233],A ;0xE9 MUL0_Y
08E1: 5D EB   MOV A,REG[235] ;MUL0_DL
08E3: 64    ASL A
08E4: 5D EA   MOV A,REG[234] ;MUL0_DH
08E6: 6A    RLC A
08E7: 73    CPL A
08E8: 74    INC A ; ここまでで-(Temperature*M値×2÷256)を算出

08E9: 03 01   ADD A,[X+1] ; B値を加算(これでEquation 3によるCLOCKeになる)
08EB: 53 FE   MOV [254],A ;
08ED: 21 7F   AND A,127 ; 下位7ビットを
08EF: 60 E8   MOV REG[232],A ;MUL0_Xに入れて
08F1: 52 02   MOV A,[X+2] ; MULTI値を
08F3: 67    ASR A ; 1/2して(符号拡張対策かな?)
08F4: 21 7F   AND A,127 ; 下位7ビットを
08F6: 60 E9   MOV REG[233],A ;MUL0_Yに入れて
08F8: 5D EA   MOV A,REG[234] ;MUL0_DHを
08FA: 53 FF   MOV [255],A ;Reserved?に保存
08FC: 5D EB   MOV A,REG[235] ;MUL0_DL
08FE: 64    ASL A ;結果を2倍(CLOCKe×MULTI値を算出)
08FF: 6B FF   RLC [255] ;
0901: 48 02 01 TST [X+2],1 ;B値の最下位ビットが'1'?
0904: A0 06   JZ 0x090B ;'0'ならパス
0906: 02 FE   ADD A,[254] ;'1'なら加算して計算結果をあわせておく
0908: 0E FF 00 ADC [255],0 ;

090B: 64    ASL A ; N÷256×4=>N÷64の値を得る(これでEquation 5によるCLOCKwになる)
090C: 6B FF   RLC [255]
090E: 64    ASL A
090F: 6B FF   RLC [255]

0911: 18    POP A ;IDX_PPを復帰
0912: 60 D3   MOV REG[211],A
0914: 51 FF   MOV A,[255] ; CLOCKw
0916: 20     POP X ;元のフレームポインタ
0917: 54 06   MOV [X+6],A ;TempReg6=A
0919: 51 FE   MOV A,[254] ;Delay値
091B: 54 05   MOV [X+5],A ;TempReg5=Delay
091D: 49 FE 10 TST REG[254],16 ;CPU_SCR1&SLIMO
0920: A0 09   JZ 0x092A ;'0'なら現在12MHzで動作(標準値)
0922: 69 06   ASR [X+6] ;'1'なら6MHz動作なのでCLOCKw値/2+1にしておく
0924: 77 06   INC [X+6]
0926: 69 05   ASR [X+5] ;Delay値も/2+1しておく
0928: 77 05   INC [X+5]


→返事を投稿
08月21日18時13分(土) 話題:1932 親番:1945 番号:1947 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

> > あやしいのはCLOCK値です。
> 該当部分を含めて軽く読んでみましたが,Clockingの章の内容そのものに従って
> いますね.乗算が大変なので積和演算器を使っているのと,CLOCKw値の
> 算出でちょっと工夫しているのがポイントでしょうか.
> ざっと眺めて見ただけですが,いろいろ細かい細工があったりと
> 書いた人の苦労がしのばれます.

引用リストにも解説をいれてくださっていてよく解ります。 ありがとうございます。
このロジックから見ますとClockE(フラッシュイレーズ用クロック)の値を(私が前の投稿でアップした値(=2)に比べて)大きくして確実に消えるようにする必要があるように思いました。

あとは M値 B値 Mult値といった情報が何を意味して 何に依存している値なのかが不明なので Clock値を書き込む都度計算してやらなければならないのか 一旦値がわかってしまえばずっと同じ値でいいものなのかを調べる必要がありそうです。 少なくてもUMの中で計算しているということは石の種類(とCPUクロック)によっては値が異なるというのは容易に想像できます。  (同じ型番の石でCPUクロックが固定ならば)同じ値を使っていいのであれば私が考えたように固定のClock値でずっと使っていいと思いますが。

このスレッドの冒頭の部分に戻ってしまって恐縮ですが 実は.lstのことですが 私のところではどうしてもライブラリの部分のアセンブルリストが載ってきません。(ゴソっと抜けています) なにか設定があるのでしょうか? ちなみに私はDesigner 5.0 sp6 でImageCraft C の標準で付いてくるものを使っていて インストール時から特に設定類をいじってはいません。



→返事を投稿
08月24日09時52分(火) 話題:1932 親番:1947 番号:1948 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ノンノ  メール

横からまた失礼します。
対象が内部フラッシュ領域、外部EEPROM、SDなどのフラッシュでバイアス等があると思いますが、見させていただいて勉強になります。

>
> 引用リストにも解説をいれてくださっていてよく解ります。 ありがとうございます。
> このロジックから見ますとClockE(フラッシュイレーズ用クロック)の値を(私が前の投稿でアップした値(=2)に比べて)大きくして確実に消えるようにする必要があるように思いました。
>
> あとは M値 B値 Mult値といった情報が何を意味して 何に依存している値なのかが不明なので Clock値を書き込む都度計算してやらなければならないのか 一旦値がわかってしまえばずっと同じ値でいいものなのかを調べる必要がありそうです。 少なくてもUMの中で計算しているということは石の種類(とCPUクロック)によっては値が異なるというのは容易に想像できます。  (同じ型番の石でCPUクロックが固定ならば)同じ値を使っていいのであれば私が考えたように固定のClock値でずっと使っていいと思いますが。
>
> このスレッドの冒頭の部分に戻ってしまって恐縮ですが 実は.lstのことですが 私のところではどうしてもライブラリの部分のアセンブルリストが載ってきません。(ゴソっと抜けています) なにか設定があるのでしょうか? ちなみに私はDesigner 5.0 sp6 でImageCraft C の標準で付いてくるものを使っていて インストール時から特に設定類をいじってはいません。
>
もう既にやって居られることを書いていましたらごめんなさい。

所定のユーザーブロックを組み付けた後、(ユーザーブロックにないファイルはワークスペースに別にADDする必要があります)
mainで所定の操作(フラッシュのアクセス)を書きましてから、
ゼネーレート(ビルド、此処で取捨されコンパイルされる)時にアウトプットファイルに出されるのではないでしょうか?

SDカード類につきましては SDに準じる使い方、fatsの使い方など、ご参考になりませんでしょうか?
http://elm-chan.org/docs/mmc/mmc.html
http://elm-chan.org/fsw/ff/00index_j.html

→返事を投稿
08月24日10時31分(火) 話題:1932 親番:1948 番号:1949 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:JUNK-BOX  メール

> あとは M値 B値 Mult値といった情報が何を意味して 何に依存している値なのかが不明なので 

 正確なところはCypressのエンジニアのみぞ知るっていうところですから,
我々一般庶民(笑)は想像するしかありませんが・・まぁ以下私なりの想像ですが

CLOCKという名称からみてフラッシュへの書き込み/消去動作クロックで,
しかもAPIの中でCPUクロックをわざわざ12MHzや6MHzに設定しなおしている
ところを見るとベースとなるクロックにはCPUクロックがそのまま流れ込ん
でいて,これを元にフラッシュ用のクロックを作るんでしょう.
 B-(M・T÷128)っていうことですから,
 基本的にフラッシュの書き換えなり消去条件に温度依存性があるのでそこを
調整するのでしょうね.高温と低温に分けているのは,本当は指数関数のよう
な曲線なのだけども,それをM8Cに計算させるのは厄介なので2本の直線で
近似して「大きくはずさない値」が得られるようにしてるっていうあたり
でしょうか.

クロックを落とした時に値が小さくなっていますから,この値は分周比の
ようなもので,値が大きいほど遅いクロックを与える(書き込みのためのパル
スも多分伸びる)っていうことかな?温度が上がるほど書き換わりにくく
なるんでしょうね.

Multi値はCLOCKeとCLOCKwの間の関係ですから,「消去と書き換えでは
所要時間が変わる」んでどのくらい倍伸ばすなり縮めれば良いかって
いうのを1/64単位で決められるようにしたっていうところでしょう.

で,
>However, for device programmers, where this
>calculation may be difficult to perform, the equation can be
>simplified by setting T to 0°C and using the hot value for B
>and M. This simplification is acceptable only if the total number
>of erase write cycles are kept to less than 10 and the
>operation is performed near room temperature.
ということなので,一応長い値(Hot Value・・上の式でも温度が上がるほど
値が大きくなる・・遅くなるみたいですしね)なら書けることは書けるけども
フラッシュに余計なストレスがかかる(だから10回以下にしてくれ)
ということかな?ちゃんと計算して守るようにしたほうが良いって
いうことですね.

>Clock値を書き込む都度計算してやらなければならないのか 一旦値がわかってしまえばずっと同じ値でいいものなのかを調べる必要がありそうです。

The TableRead function gives the user access to part specific
data stored in the Flash during manufacturing.
っていうことで,製造時にストアされているだけでダイナミックには変わらない
ようですから起動時に読み込んで計算した結果をどこかに置いてても良いん
でしょう.ただ,あらかじめ読み出して決めうちするっていうのは他の
チップに移植したり,チップのロットで変化する可能性等を考えると
やめた方が賢明じゃないかと思います.

> このスレッドの冒頭の部分に戻ってしまって恐縮ですが 実は.lstのことですが 私のところではどうしてもライブラリの部分のアセンブルリストが載ってきません。(ゴソっと抜けています)

やはりPD5.0のsp6ですが特に何かしたという記憶は無いのですけども.
んーっ・・と見つけるのも面倒ですす,別段隠すようなものでもないで
しょうから,とりあえず該当部分を切り出してwikiに置いておきました.
(.lstへの出し方が分かれば削除すれば良いだけですしね)
http://www.pastelmagic.com/wiki/psocwiki/index.php?%E7%99%BA%E8%A1%A8%E4%BC%9A%E4%BC%9A%E5%A0%B4#z5bca5c6


→返事を投稿
08月24日14時56分(火) 話題:1932 親番:1948 番号:1950 再編集/削除

題名:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:E2PROM APIを使わずにFlashアクセスするコード例ありますか?
名前:ふよう  メール

> 起動時に読み込んで計算した結果をどこかに置いてても良いん
> でしょう.ただ,あらかじめ読み出して決めうちするっていうのは他の
> チップに移植したり,チップのロットで変化する可能性等を考えると
> やめた方が賢明じゃないかと思います.

JUNK-BOXさん 詳細かつ親切なご指導ありがとうございます。

確かに 各パラメータ(M,B,Mult)はSROMにわざわざ格納されているということはロット条件などで変わるということでしょうね。 とするとおっしゃるように起動時にこれを読み出して該当値をセットするプログラムとするか あるいは予め読み出し専用のプログラムで該当する石のSROMを吸い出しておいて外部で考慮してプログラムとして使うかのいづれかになるでしょうか。 700バイトというUMのサイズが重いので これをを節約したいという趣旨からいいますと後者ができれば最高かなとも思います。

> とりあえず(.listの)該当部分を切り出してwikiに置いておきました.

ありがとうございます。 助かります。

それから ノンノさんのおっしゃるように 考えてみればフラッシュROMのしくみや原理などよく理解しないと今回の件はこなせないですね。情報ありがとうございました。

このスレッドを通じて大変勉強になりました。 みなさんありがとうございました。

ps おかげさまでE2PROM UMを使わないで済みまして 無事プログラムが CY8C24123 - 4KのFLASHに納まりました。 このスレッドの趣旨から外れますが ImageCraftのCコンパイラーはSTDからPROに代えるとかなり生成コードの節約になるのでしょうか。 検討してみたいところです。



→返事を投稿
08月28日10時48分(土) 話題:1932 親番:1950 番号:1951 再編集/削除

■ 関連記事

  • E2PROM APIを使わずにFlashアクセスするコード例ありますか? : ふよう 08月14日11時16分(土) 番号1932

  • 管理用 (C) Apps Page.