当前位置:高校自动化网 >> fpga >> 浏览文章

NIOSII中FLASH组件的使用

文章来源:ednchina 作者:avic


该文章讲述了NIOSII中FLASH组件的使用.

本文转载自:http://blog.ednchina.com/avic/

      这

一节,我们来讲一讲如何使用FLASH。在嵌入式系统中,Flash 是最常用组件之一。许多使用过 FLASH的都知道,FLASH 的特点是“读来容易写来难”。通常情况,我们是可以直接读出 FLASH中的内容的,但如果要写入数据,就要发送一长串命令,比如像:555 ,AA,2AA,55,555,A0,PA,PD就表示对PA地址写入数据PD。

      而在NIOS开发过程中,FLASH的这些繁琐的擦写过程ALTERA都帮我们做好了,它通过API给我们提供了完善的读写函数,我们只需要调用函数就可以完成读写FLASH的操作了。不过这些也是有前提条件的,那就是FLASH要满足CFI标准或者是EPCSX串行FLASH(与EPCSX兼容的也是可以的)。也就是说,不满足满足这个条件的 FLASH还需要您自己处理了,呵呵!下面我们来研究一下NIOS下的FLASH是如何操作的。

      在前面,我们就已经详细讲述了FLASH和EPCS模块的构建过程,在这里,我们假设您已经构建好了CFI FLASH模块或者EPCS控制模块,由于CFI FLASH和EPCS的软件操作方式完全一致,所以我们以下内容不对他们加以区分。下面我们主要来讲FLASH的软件操作是如何实现的。

      Altera提供了两种类型的函数,提供给客户:Simple Flash Access(简单的Flash访问),以及Fine-Grained Flash Access(细粒度Flash访问)。

一般情况下,我还是推荐大家使用 Fine-Grained Flash Access(细粒度 Flash 访问)函数, 比 Simple Flash Access 也复杂不了多少,但可以避免通常的跨块擦除问题。Flash 是按照 Block组织起来的,通常一次擦除一整个块。例如,我们如果写 Flash的时候跨越了两个块,而其后还跟随了其他数据,这样我们就有可能将其他数据同时擦除掉,导致数据的丢失,这样后果就很严重了。

在这里,我们介绍几个常用的函数,如果想了解的更详细,请参考ALTERA提供的文档资料。

      首先介绍第一步: 打开 Flash,就像C程序打开硬盘中的数据文件一样, 使用之前要打开 FLASH。我们使用 alt_flash_open_dev()打开 Flash,成功打开后返回一个句柄。比如,下面是使用这个函数的片断:

alt_flash_fd* fd; 
fd = alt_flash_open_dev(FLASH_NAME);

      其中,FLASH_NAME可以在system.h中找到它的定义,我的定义如下所示

CFI FLASH定义为
#define CFI_FLASH_NAME "/dev/cfi_flash"
EPCSX定义为
#define EPCS_FLASH_NAME "/dev/epcs_flash"

      读出 Flash 使用函数:alt_read_flash,原型如下:

int alt_read_flash( alt_flash_fd* fd, 
int offset, 
void* dest_addr, 
int length );

      使用完以后需要将FLASH关掉,其原型如下:

void alt_flash_close_dev(alt_flash_fd* fd );

Fine-Grained Flash Access 机制还提供了如下几个函数: alt_get_flash_info(),

相关文章:
  • Verilog HDL 建模教程4 - 组织的概念
  • 连载NIOSII那些事儿--硬件开发一
  • 高手经验先从如何成为一个合格的设计者
  • 上一篇:NIOSII定时器应用实例-动态数码管扫描
    下一篇:没有了
    最近更新