Nios® V プロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 7/08/2024
Public
ドキュメント目次

7.8.3. 詳細設定が可能なフラッシュへのアクセス

3 つの追加機能により、細かい粒度でフラッシュコンテンツを書き込むための完全な制御が提供されます。
  • alt_get_flash_info()
  • alt_erase_flash_block()
  • alt_write_flash_block()

フラッシュメモリーの性質上、ブロック内の単一アドレスを消去することはできません。一度にブロック全体を消去する (つまり、すべて 1 に設定する) 必要があります。フラッシュメモリーへの書き込みでは、ビットを 1 から 0 に変更することしかできません。いずれかのビットを 0 から 1 に変更するには、ブロック全体を一緒に消去する必要があります。

したがって、周囲の内容を変更せずにブロック内の特定の位置を変更するには、ブロックの内容全体をバッファーに読み出し、バッファー内の値を変更し、フラッシュブロックを消去し、最後にブロックサイズのバッファー全体をフラッシュメモリーに書き戻す必要があります。細かい粒度のフラッシュアクセス機能は、このプロセスをフラッシュ・ブロック・レベルで自動化します。

#include <stdio.h> #include <string.h> #include "sys/alt_flash.h" #define BUF_SIZE 1024 int main () { alt_flash_fd* fd; int ret_code; char source[BUF_SIZE]; char dest[BUF_SIZE]; /* Initialize the source buffer to all 0xAA */ memset(source, 0xAA, BUF_SIZE); fd = alt_flash_open_dev("/dev/ext_flash"); if (fd!=NULL) { ret_code = alt_write_flash(fd, 0, source, BUF_SIZE); if (ret_code==0) { ret_code = alt_read_flash(fd, 0, dest, BUF_SIZE); if (ret_code==0) { /* * Success. * At this point, the flash is all 0xAA and we * have read that all back to dest */ } } alt_flash_close_dev(fd); } else { printf("Cannot open flash device\n"); } return 0; }