MyFPGA Forum

 找回密码
 注册
搜索
查看: 5412|回复: 0
打印 上一主题 下一主题

nios II 读写 CFI_FLash

[复制链接]
跳转到指定楼层
1#
发表于 2010-8-27 13:19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stdio.h>

#include "io.h"
#include "system.h"

#include "alt_types.h"
#include "sys/alt_flash.h"
#include "sys/alt_flash_dev.h"
#include "altera_avalon_pio_regs.h"
void test_flash_block();
void test_flash_bytes();

int main()
{
    test_flash_bytes();
        return 0;
}
//按字节来读写
void test_flash_bytes()
{
    alt_flash_fd *my_flash; //define handle
    flash_region* regions;
    int number_of_regions;
    int ret_code ;

    my_flash = alt_flash_open_dev(CFI_FLASH_NAME);//open flash, get handle
    if(my_flash == NULL)
    {
        printf("Open flash fail \n");
        return 0;
    }

    char buf[]="Hello world!";
    int  nAddr = 0x0;
    int  tempAddr = nAddr;
   
    ret_code = alt_get_flash_info (my_flash, &regions, &number_of_regions);
    if(my_flash != NULL)
    {
        int j = 0;
        for(j=0;j<number_of_regions;j++)
        {
            printf("regions[%d].offset = %d \n", j, regions[j].offset);
            printf("regions[%d].region_size = %d \n", j, regions[j].region_size);
            printf("regions[%d].number_of_blocks = %d\n", j, regions[j].number_of_blocks);
            printf("regions[%d].block_size = %d \n\n", j, regions[j].block_size);
        }
    }
    else
    {
        printf("get flash info fail \n");
    }
   
//    ret_code = alt_write_flash(my_flash,nAddr,buf,sizeof(buf));
//    memset(buf,0, sizeof(buf));
//    alt_read_flash(my_flash, tempAddr, buf, sizeof(buf));
//    printf("%s",buf);
   
   int i=0;
   for(i=0;i<sizeof(buf);i++, nAddr++)
   {
    ret_code = alt_write_flash(my_flash,nAddr,&buf[i],1);
    usleep(100*1000);
    if(ret_code != 0)
    {
        printf("write flash fail \n");
        return 0;
    }
   }
    memset(buf, 0,sizeof(buf));
   
    for(i=0;i<sizeof(buf);i++, tempAddr++)
    {
      alt_read_flash(my_flash, tempAddr, &buf[i], 1);
      printf("%c", buf[i]);
    }
   
    alt_flash_close_dev(my_flash);
}

//按块来读写
void test_flash_block()
{
    alt_flash_fd *my_flash; //define handle
    flash_region* regions;
    int number_of_regions;
    int ret_code ;
    char *buf = NULL;

    my_flash = alt_flash_open_dev(CFI_FLASH_NAME);//open flash, get handle
    if(my_flash == NULL)
    {
        printf("Open flash fail \n");
        return;
    }
   
    ret_code = alt_get_flash_info (my_flash, &regions, &number_of_regions);
    if(my_flash != NULL)
    {
        int j = 0;
        for(j=0;j<number_of_regions;j++)
        {
            printf("\n******************regions %d*************************\n",j);
            printf("regions[%d].offset = %d \n", j, regions[j].offset);
            printf("regions[%d].region_size = %d \n", j, regions[j].region_size);
            printf("regions[%d].number_of_blocks = %d\n", j, regions[j].number_of_blocks);
            printf("regions[%d].block_size = %d \n\n", j, regions[j].block_size);
            
            buf = (char*)malloc(regions[j].block_size);
            memset(buf, 'a', regions[j].block_size);
            
            ret_code = alt_write_flash(my_flash,regions[j].offset,buf,regions[j].block_size);
            if(ret_code != 0)
            {
                 printf("write flash fail \n");
                 return;
            }
            memset(buf,0, regions[j].block_size);
            
            ret_code = alt_read_flash(my_flash, regions[j].offset, buf, regions[j].block_size);
            if(ret_code != 0)
            {
                printf("read flash fail \n");
                return;
            }
            
            int i=0;
            for(i=0;i< 20 ;i++)
            {
                printf("%c",buf[i]);
            }
            
            free(buf);
        }
    }
    else
    {
        printf("get flash info fail \n");
    }
   
    alt_flash_close_dev(my_flash);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-4 09:31 , Processed in 0.055907 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表