MyFPGA Forum
标题:
nios II 读写 CFI_FLash
[打印本页]
作者:
yqzhang
时间:
2010-8-27 13:19
标题:
nios II 读写 CFI_FLash
#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, ®ions, &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, ®ions, &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);
}
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3