問題タブ [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.
c - フラッシュ消去 NOR: ioctl(MEMUNLOCK) リターンステータス?
C の Linux MTD ドライバーで NOR フラッシュ メモリを消去しようとしています...
その後、成功しioctl(MEMUNLOCK)
てもエラーを返す呼び出しからの戻りステータスについて混乱しています。ioctl(MEMERASE)
次のコードは警告メッセージを表示しますが、機能します (つまり、Flash ブロックが消去されています)。
ネットでいくつかの C コードを見ると、MEMUNLOCK からの戻りステータスが常にチェックされるわけではありません (例: mtc.cから):
flash_unlock
エラーも返します。
何か不足していますか?一部の構成で MEMUNLOCK からエラーが発生するのは正常ですか?
ノート/環境:
- 読み取り専用フラグ (MTD_WRITEABLE) がパーティションに設定されていません(およびのみ)。
mtd3
mtd0
mtd1
flash_lock
も同じエラーを返します。- TI AM3505 (ARM Cortex A8、OMAP34)。
- Linux 2.6.37。
- フラッシュ NOR Spansion S29GL512S12DHIV1。
カーネルログ:
linux - Linux でハードディスク セクタの書き込み統計を取得する最も簡単な方法
Raspbery Pi のデータ ロガー ソフトウェアとハードウェアに取り組んでいます。Raspberry Pi は、SD カードをストレージとして使用しています。毎秒測定結果をデータベースに挿入する必要があります。
いくつかのデータベースを使用して調査を行い、セクター (フラッシュ メモリのメモリ セル) の頻度に関する統計データを取得して、アプリケーションでフラッシュ メモリが動作する時間を概算したいと考えています。
単一セルのプログラム/消去サイクルが心配です。たとえば、ラウンド ロビン アーカイブ (RRDTool で使用) は固定サイズで、事前に割り当てられたストレージがあり、現在のレコードや最後の挿入タイムスタンプなどのデータは、常にその固定ファイルの 1 つのアドレスに書き込まれます。
Linuxでアドレスを使用して書き込みコマンドを収集/ログに記録する簡単な方法はありますか?
testing - バス障害のソフトウェア メモリ テスト
かなりの数のフラッシュ チップを搭載したボードを使用していますが、そのうちのいくつかで断続的な障害が発生しています。標準的なメモリ テストでは、機械的および熱的ストレスによって特定のチップが断続的に故障することを除けば、具体的な問題の解決策は示されていません。
フラッシュセル自体ではなく、実際の接続を疑って、パラレルバスのアドレスまたはデータピンエラーをテストする方法を探しています。
いくつかのメモリ テストがありますが、フラッシュ メモリよりも RAM に適しています ( http://www.ganssle.com/testingram.htm )。具体的には、パラレル フラッシュには、各値に書き込む一連のバス書き込みがあります。書き込み/検証の失敗は、バス上の任意のピンである可能性がある書き込み操作である可能性があります。
アイデア歓迎...
u-boot - NAND ブロックサイズの混乱
NAND チップに関して根本的な疑問があります. DM365 に基づいてカスタム ボードを立ち上げようとしています.
NANDから起動しようとしていますが、
使用される NAND は micron MT29F8G08ABABA のものです。(1G バイト = 8 ギガビット)
編成 – ページ サイズ x8: 4320 バイト (4096 + 224 バイト)
– ブロック サイズ: 128 ページ (512K + 28 K バイト)
– プレーン サイズ: 2 プレーン x プレーンあたり 1024 ブロック
– デバイス サイズ: 8Gb: 2048 ブロック
MT29F8G08BABAのデータシートによると、ブロックサイズは(512K + 224)バイトだと思います。
ただし、u-boot 用語では、NAND デバイスにセクター サイズを使用します。u-bootコマンドラインからコマンドを使用する
nand info
と、次のようにnandサイズが取得されるため
このセクター サイズはブロック サイズ (実際にはデータシートによると 512k) ですか、それとも環境セクターですか?
NAND の読み取り/書き込みは u-boot から正常に動作しており、問題はありません。
だから私はこれらの用語を理解したいだけです。
これが環境セクター サイズである場合、U-boot からブロック サイズ情報を取得する方法はありますか?
誰かがこれについて私に教えてもらえますか?
ありがとうございました、
よろしく、
アンクル
upgrade - (STM32F10x、IAR EW ) RS232 を介したセルフ アップグレード ブートローダ、フラッシュからのコピー後に RAM でプログラムを実行する方法
私は STM32F103RBT6 で作業しています。0x08000000~0x08003fff に入れたブートローダ プログラムをアップグレードしたいのですが、他のすべてのフラッシュ メモリをアプリケーション コードに使用しています。RS232経由で、ブートローダをアップグレードしたいです。だから私はコードをRAMにコピーすることを考えています-> RAMで元のブートローダーを実行します->新しいブートローダーをダウンロードします。私がしたことは次のとおりです。
うまくいきません。
質問は :
コードを 0x20000000~ にコピーすることはできますか? RAMを2つの部分に分割する必要がありますが、どうすればよいですか?
ベクター テーブルの場所を設定する方法と場所を教えてください。「VECT_TAB_OFFSET」をどのように処理できますか。
解決策やコマンドを教えていただければ幸いです。どうもありがとう。
linux-kernel - ubi を mtd パーティションにアタッチできません
DM365 ベースのカスタム ボードで MT29F8G08ABABA を使用しています。NANDブートを使用しています。RootFS は UBIFS 形式で、
以下は、NAND の基本的なアーキテクチャです。
次のコマンドを使用して ubifs を作成しています。
dm368_ubinize.cfg の内容は以下の通り、
次に、次のコマンドを使用して、この ubifs を NAND に配置します。
カーネルを起動すると、カーネルから UBIFS を検出中にエラーが発生し、
以下は同じカーネルログです。
カーネルが物理的な消去ブロックのサイズを 256KiB と報告している理由は何ですか? NAND のアーキテクチャからは 512KiB のようです。
エラーの提案/ポインタはありますか?
前もって感謝します
c - C コードによる FLASH 使用率の計算
ソフトウェアのメモリ使用量を最適化/削減したい。私が検討しているアプローチの 1 つは、冗長で不要なコードを削除することです。私のソフトウェアには、Feature Enable メカニズムを介してアクティブ化/非アクティブ化できる多くの機能 (最大 3000) があります。私がやろうとしているのは、機能がどれだけの RAM/FLASH を使用しているかを調べ、最大のものから評価を開始し、それらが必要かどうかを確認することです (不要な機能はコードから安全に削除できます)。また、関数はそれ自体に複数の機能を持つ場合があることに注意してください。
コードは次のようになります。
ifステートメントが使用しているコード内のFLASHの量を計算するにはどうすればよいですか? 関数に関するデータのみを提供し、関数内の個々のステートメントは提供しないため、最終的なリンク マップ ファイルは使用できません。私が考えた 1 つの解決策は、C コードからアセンブリ リスト ファイル (.alst) を作成し、if ステートメント内の命令のサイズを計算することです。これは、これらのコード行によって使用される FLASH の量に他なりません。
私が正しい軌道に乗っているか、それともより良い/より簡単な方法があるかどうか教えてください。
使用しています: プロセッサ: MPC5554 (POWER PC アーキテクチャ)
コンパイラ: WindRiver Diab
ロジックが正しければ、最終的にスクリプトを記述して、有効化を検索し、必要な計算を実行します。
c - SPIによるフラッシュメモリの書き込みと読み取り
SPI プロトコルを使用するのは初めてです。開発キット (STM32F207VCT6 マイクロコントローラーを搭載) に付属のサンプル コードを理解しようとしています。このコードは、AT45DB041D フラッシュ メモリとの通信 (読み取りと書き込み) を実装します。
このコード例は、メモリの読み取りに成功するたびに、読み取る対象に関する情報を送信するだけでなく、すぐにデータを受信するように要求します。受信したこのデータは、いかなる目的にも使用されません (明らかに)。読み取られる実際のデータは、最初に 0x00 バイトを送信することによって、後で受信コマンドによって再度要求されます。次のコードは、次のことを示しています。
定義:
ご覧のとおり、SPIx_Send_byte コードは読み取る対象を送信するだけでなく、使用されない情報も受信しています。
なぜそれを行う必要があるのか 、実際にデータを受信するために0x00バイトを送信する必要があるのか を理解するのを手伝ってもらえますか?
ありがとう!