Micron Technology の MT25Q ( MT25QL512ABB1EW9-0SIT ) フラッシュ デバイスに情報を書き込みたいプロジェクトを行っています。しかし、最初の数ページ (0 から 13) を読み書きしようとすると、ごみデータが返されます。フラッシュに保護された領域があるのではないかと考えたので、ステータス レジスタの対応するビットの値を確認しましたが、その値は保護されているどのセクタにも対応していません。さらに、保護されたセクターの可能な範囲のいずれも、この値に対応していません。フラッシュデバイスをサポートするzephyr-osを使用しています。これが私のコードです:
#include "MT25Q.h"
#include <flash.h>
struct device *dev = device_get_binding("MT25Q");
struct flash_pages_info myflash;
flash_get_page_info_by_idx(dev, 0, &myflash);
char *test_line = malloc(5);
char *buf = malloc(5);
strcpy(test_line, "test");
size_t page_count = flash_get_page_count(dev);
flash_write_protection_set(dev, false);
for(long i = 0; i < total_pages; i++) {
returnval = flash_get_page_info_by_idx(dev, i, &myflash);
flash_write(dev, myflash.start_offset, test_line, 5);
flash_read(dev, myflash.start_offset, buf, 5);
printk("%s\n", buf);
}
flash_write_protection_set(dev, true);
free(buf);
free(test_line);
return 0;
}
ループの最初の 15 回の繰り返しで、ガベージ文字列を読み返しました。その後、期待どおりに動作します。デバイスはバイト書き込み可能です。
なぜこれが起こっているのかを誰かが理解するのを手伝ってくれますか? 必要な情報をすべて投稿したことを願っていますが、念のため:
total_pages = 256 myflash.size = 131072