問題タブ [flash-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arm - フラッシュ NOR にプリロードされたコードの実行
NXP LPC2478 で実行する uClinux システムを構築しています。このチップには、コードを直接実行できる 512k のオンボード高速フラッシュがあります。通常の外部 SDRAM からユーザー アプリをロードして実行したいと考えています。しかし、オンボード フラッシュから実行するためにプリロードしたい特別なグラフィックス ライブラリがあります。
グラフィックス ライブラリをコンパイルしてメモリ (フラッシュ) 内の固定位置で実行し、それを使用するアプリをコンパイル/リンクして、そのライブラリへのすべての参照をフラッシュ内の適切な位置に固定する方法はありますか?
修正を手動で行うカスタム アプリ ローダーを作成する必要がある場合は、それを行います。
filesystems - 組み込みNANDドライブに適したファイルシステムは何ですか?
ストレージにNANDフラッシュを使用する組み込みアプリケーションに取り組んでいます。現在のところ、Linuxやその他のRTOSは使用しません。アプリケーションは、予期しない電源切断を処理する必要があります。
YAFFS2、JFFS2、FAT + FTL、HCC Embeddedのソリューションなど、さまざまなファイルシステムソリューションを検討してきました。
FAT + FTLが通常の選択であると聞きましたが、パフォーマンスだけでなく、予期しない電源切断が発生した場合のデータ損失が心配です。誰かがこれについての洞察と経験を共有することができればありがたいです
usb - FAT32 USB上のファイルを削除すると、最初のクラスター情報が変更されます
FAT32ディレクトリエントリを読み取り、ファイルの最初のクラスターを識別してデータを回復しようとするファイル回復ソフトウェアを作成しましたが、正常に動作していると思われますが、fat32usbディスクで試してみると次のようになります。
ファイルが削除されていないときに割り当てられたクラスター番号は、削除された直後のクラスター番号とは異なります。DiskInvestigatorとTuneUpUndeleteを使用してこれを確認しましたが、いずれもファイルを回復できませんでした。通常、ファイルの名前を削除すると、最初の文字が0xE5に変更され、残りはそのまま残るという一般的な問題がありましたが、これにより、クラスター情報も変更されます。
何か助けはありますか?FAT32 USBを試して、何が起こっているのか教えていただけますか?
私のOSはWindowsVistaで、ペンドライブはシングルパーティションFAT32です。
hardware - ポータブル フラッシュ メモリの不良セクタの特定
ポータブル フラッシュ メモリ デバイス (サム ドライブなど) の障害の兆候を検出するプログラムを作成しようとしています。
過去に、従来の機械式ハード ドライブの不良セクタやその他の種類のトラブルを検出できるツールを見たことがありますが、フラッシュ メモリには、ハードウェアへの同様の予測可能な低レベル アクセスがないのではないかと心配しています。収納の仕組み。ウェアレベリングやその他のブロック再マッピング技術 (「デッド」セクターをスキップするため?) のようなものにより、フラッシュドライブが故障しているかどうかを判断することは、不可能ではないにしても、せいぜい困難であると私は信じています (絶え間ない読み取り障害とデバイスがアンマウントされます)。
寿命が尽きたフラッシュ ドライブは、簡単に検出できるはずです (読み取り中の一定の CRC の不一致と完全な障害)。しかし、早い段階で故障している可能性のあるドライブについてはどうでしょうか? スループット速度の低下など、フラッシュ ドライブが通常よりも早く故障することを示す兆候はありますか?
潜在的に不良なブロックを検出する方法に沿って、ボリューム全体のサイズに近い、または正確にそのサイズのファイルへのランダムな読み取り/書き込みを試みることを検討しましたが、その場合でも、ドライブが最大容量を下回るサイズを報告する可能性があります。 「死んだ」ブロック?
要するに、フラッシュメモリのブロックリマッピングまたはその他の寿命延長技術の使用を回避するか、少なくとも(アルゴリズム的またはその他の方法で)検出する方法はありますか?
これが serverfault.com に属しているかどうかについての私の不確実性を表明して、この質問を締めくくります。これは間違いなくハードウェア関連の質問ですが、ソフトウェア ソリューション、できれば自分でプログラムできるソフトウェア ソリューションも必要です。この質問が間違っている場合は、喜んで serverfault に移行しますが、プログラミング ソリューションが必要です。説明が必要な場合はお知らせください:)
ありがとう!
avr - AVRのフラッシュメモリが大きすぎるプログラムで溢れていますか?
ATtiny2313Vが7x5LEDマトリックスを制御して、スクロールするテキストを表示するプロジェクトがあります。テキストを表示するために、プログラムの残りの部分と一緒にフラッシュに保存されるフォントを作成しました。
フォント全体を含むプログラム全体は、1106バイトを使用します。しかし、それをチップにロードすると、実行されていないようです。代わりに、いくつかのLEDを点灯させるだけで、それだけです。
ただし、ほとんどのフォントを削除し、AからJの文字だけでコンパイルすると、プログラムのサイズは878バイトで、問題なく動作します。
これは、AVRフラッシュメモリのある種のオーバーフローが原因ですか?
ATtiny2313Vのデータシートには、2Kバイトのフラッシュがあると書かれています。1106バイトが多すぎるのはどうしてですか?
更新:明確にするために、私が使用しているツールチェーンはAVR Studio(コードをコンパイルするため)であり、次にAVRDudeを使用してマイクロコントローラーにアップロードします。私の知る限り、AVRStudioはavr-gccのバージョンを使用してコードをコンパイルします。
embedded - フラッシュの循環バッファ
さまざまな長さのアイテムをフラッシュチップの循環キューに格納する必要があります。各アイテムにはカプセル化されているので、アイテムの大きさと次のアイテムの始まりを把握できます。バッファに十分なアイテムがある場合、最初にラップされます。
フラッシュチップに循環キューを格納するための良い方法は何ですか?
何万ものアイテムを保管したい可能性があります。したがって、バッファの最初から最後まで読み取ることは、最後まで検索するのに時間がかかるため、理想的ではありません。
また、円形なので、最初のアイテムと最後のアイテムを区別できるようにする必要があります。
最後の問題は、これがフラッシュに保存されることです。そのため、各ブロックの消去には時間がかかり、各ブロックに対して設定された回数しか実行できません。
c - アラーム履歴スタックまたはキュー?
不揮発性フラッシュ メモリに格納するアラーム履歴構造を開発しようとしています。フラッシュ メモリの書き込みサイクル数は限られているため、毎回構造内のすべてのフラッシュ ページを書き換えたり、更新されたポインタをキューの先頭/末尾に書き込んだりせずに、構造にレコードを追加する方法が必要です。
さらに、使用可能なフラッシュ メモリ領域が使用されたら、先入れ先出しで追加された最初のレコードから始めて、以前にフラッシュに保存されたレコードの上書きを開始したいと考えています。これにより、アイテムを追加するには循環バッファーが最適だと思います。ただし、レコードを表示するときは、構造をスタックのように機能させたいと考えています。例: レコードは、後入れ先出しの新しい順に表示されます。
構造体のサイズ、ヘッド、テール、インデックスは、レコード自体に格納されない限り格納できません。これは、それらが毎回固定位置に書き出されると、それらが格納されたページの最大書き込みサイクルを超えるためです。
では、スタック、キュー、またはハイブリッド構造を使用する必要がありますか? 電源投入後に再初期化できるように、ヘッド、テール、サイズの情報をフラッシュに保存するにはどうすればよいですか?
embedded - 45DB161 データフラッシュと 89LP4052 コントローラーのインターフェース
データ フラッシュを 89lp 4052 コントローラと接続しようとしています。Crysal は 11.0592 MHz を使用しました。このコントローラには spi バスが組み込まれています。CPHA と CPOL のすべての組み合わせを試しました。モード 0 とモード 3 を試しました。ステータス レジスタを読み取ることができません。レジスタを読み取る場合もありますが、フラッシュからコードを ff するだけの場合もあります。
私のコードは次のとおりです。
;;============================================== ==============================
WRITE_FLASH: MOV 20H,#0D7H ;コマンド LCALL SEND_CLOCK_ONE LCALL READ_FLASH CLR SCON.1 MOV A,21H MOV SBUF,A JNB SCON.1,$ CLR SCON.1 ;;============= ================================================== ======== SETB CS CLR SCLK LCALL DELAY2 CLR CS ;再度選択 MOV 20H,#84H LCALL SEND_CLOCK MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#33H LCALL SEND_CLOCK LCALL DELAY2 SETB CS LCALL DELAY2 CLR SCLK CLR CS ;再度選択 MOV 20H,#0D4H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL SEND_CLOCK
MOV 20H,#00H LCALL
SEND_CLOCK ,#00H LCALL SEND_CLOCK_ONE
;;============================================== ====================== SEND_CLOCK_ONE: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C, 05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SEND
MOV C,00H MOV DOUT,C LCALL PULSE_SEND_LAST RET ;;=================================== ===================================== READ_FLASH: LCALL PULSE_SEND MOV C,DIN MOV 0FH,C LCALL PULSE_SEND MOV C、DIN MOV 0EH、C LCALL PULSE_SEND MOV C、DIN MOV 0DH、C LCALL PULSE_SEND MOV C、DIN MOV 0CH、C LCALL PULSE_SEND MOV C、DIN MOV 0BH、C LCALL PULSE_SEND MOV C、DIN MOV 0AH、C LCALL PULSE_SEND MOV C,DIN MOV 09H,C LCALL PULSE_SEND MOV C,DIN MOV 08H,C LCALL PULSE_SEND RET ;;================================= ==================================== SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDDIN MOV 08H,C LCALL PULSE_SEND RET ;;======================================= ============================= SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT、C LCALL PULSE_SENDDIN MOV 08H,C LCALL PULSE_SEND RET ;;======================================= ============================= SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT、C LCALL PULSE_SENDC LCALL PULSE_SEND RET ;;========================================== ========================== SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDC LCALL PULSE_SEND RET ;;========================================== ========================== SEND_CLOCK: MOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDMOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDMOV C,07H ;MSB MOV DOUT,C LCALL PULSE_SEND MOV C,06H MOV DOUT,C LCALL PULSE_SEND MOV C,05H MOV DOUT,C LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDC LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SENDC LCALL PULSE_SEND MOV C,04H MOV DOUT,C LCALL PULSE_SEND MOV C,03H MOV DOUT,C LCALL PULSE_SEND MOV C,02H MOV DOUT,C LCALL PULSE_SEND MOV C,01H MOV DOUT,C LCALL PULSE_SEND
MOV C,00H MOV DOUT,C LCALL PULSE_SEND RET
;;============================================== ========================== DELAY2: mov 56H,#0FFH DJNZ 56H,$ mov 56H,#0FFH DJNZ 56H,$ RET ;; ================================================= ================= PULSE_SEND: SETB SCLK LCALL DELAY2 CLR SCLK LCALL DELAY2 RET ;;=================== ============================== PULSE_SEND_LAST: SETB SCLK LCALL DELAY2 RET ;;========== ========================================== PULSE_READ_FIRST: CLR SCLK LCALL DELAY2 SETB SCLK LCALL DELAY2 RET ;;========================================== ===============
終わり
c - xdataはいつ使用しますか?
私は組み込みシステムプログラミングに不慣れです。私は8051チップセットを使用するデバイスに取り組んでいます。サンプルプログラムで、変数を定義するときに、キーワードxdataを使用することがあることに気づきました。このような...
static unsigned char xdata PatternSize;
xdataキーワードが省略されている場合もあります。
私の理解では、xdataキーワードは、その変数が外部、フラッシュ、メモリに格納されることをコンパイラに指示します。
どのような場合に変数をxdataで外部に保存する必要がありますか?これらの変数へのアクセスには時間がかかりますよね?xdataを使用して保存された値は、デバイスのハードリセット後に残りませんか?
また、staticキーワードは、変数が定義されている関数を呼び出すたびに変数が存続することを意味することを理解しています。staticとxdataを一緒に使用する必要がありますか?
linux - OS レベルのフラッシュ ドライバーはロードされていますか?
ロードする OS レベル (Linux) のフラッシュ ドライバーがあるかどうか、または作成/開発する必要があるかどうか、私に提案してください。