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

ID 743810
日付 10/31/2022
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

6.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;
}