基于FPGA的串行Flash扩展实现
发布时间:2008/5/28 0:00:00 访问次数:512
fpga凭借其方便灵活、可重复编程等优点而日益被广泛应用;闪速存储器(flash memory)以其集成度高、成本低、使用方便等优点,在众多领域中也获得了广泛应用。在现代数字电路设计中。经常需要保存大量数据,而flash存储速度快、体积小、功耗低且价格低廉,可在线电擦写,信息在掉电后不会丢失,因此成为设计人员的首选。
2 m25p80的介绍
flash是一种具有电可擦除的可编程rom,可以分为两大类:并行flash和串行flash。并行flash存储量大,速度快;而串行flash存储量相对较小,但体积小,连线简单,可减小电路面积,节约成本,二者各有其优缺点,可依据实际需要选取。本文开发的系统对速度的要求不是很高,而对电路板的面积要求则较为苛刻,因此系统设计选用了串行flashm25p80。
m25p80是意法半导体推出的一款高速8 mbit串行flash,共由16部分组成,每一部分有256页,每页有256个字节。m25p80具有先进的写保护机制,读取数据的最大时钟速率为40 mhz。m25p80的工作电压范围为2.7 v~3.6 v,具有整体擦除和扇区擦除、灵活的页编程指令和写保护功能,数据保存至少20年,每个扇区可承受100 000次擦写循环。并行flash封装通常需要28个以上的引脚,因此,额外支出大,而m25p80采用so8封装,需要的引脚数较少,从而节省了电路板空间,功率、系统噪声和整体成本等都会大幅度降低,既经济又实用。
其中vcc和vss分别为电源和地,其他6个引脚均可直接与fpga的i/o引脚相连;写保护引脚w和hold挂起引脚,用于数据保护和空闲模式的低功耗运行,若不用可将其置为高电平;s为片选信号,为低电平时表示器件被选中,否则工作在待机状态;q为串行数据输出,数据在时钟的下降沿输出flash器件;d为串行数据输入,包括传输指令、地址和输人数据,输入信号在时钟的上升沿锁存flash器件中。c为串行时钟,由fpga提供时钟。由于时钟信号速率较高,所以在pcb布线时要特别注意减少干扰,最好采用地线屏蔽。
3 m25p80的指令操作m25p80共有12条操作指令,所有指令都是8位,操作时先将片选信号(s)拉低选中器件,然后输入8位操作指令字节,串行数据在片选信号s拉低后的第一个时钟的上升沿被采样,m25p80启动内部控制逻辑,自行完成相应操作。指令后有时需输入地址字节,必要时还要加入哑读字节,最后操作完毕后再将片选信号拉高。下面简单介绍几条最常用的指令操作。
3.1 写使能指令
页面编程时,在写寄存器或者擦除之前,必须先使用写使能指令设置寄存器的写使能位。在上电或写使能无效指令操作,以及页面编程、写寄存器及擦除指令完成时,该写使能位复位。写使能指令的时序比较简单,指令0000 0110(06h)在片选信号拉低后的第一个时钟的上升沿送入flash,先输入高位,指令输入完成后立即拉高片选信号,否则flash的保护机制则认为是干扰信号而不执行该指令。写无效指令与写使能指令类似,只是输入的指令代码为0000 0100(04h)。
3.2 读/写状态寄存器
状态寄存器在任何时候都可读,即使在页面编程、擦除或者写寄存器时也可读取寄存器,可被连续读取状态寄存器。片选信号拉低后立即送人8位的读寄存器指令,接下来flash将内部寄存器的数值串行输出,8位寄存器内容反复输出。
写状态寄存器的操作步骤:写使能指令输入完成后,拉高片选信号,flash执行读使能指令设置寄存器。然后拉低片选信号,输入写寄存器指令和数据,随后必须马上拉高片选信号。
3.3 读数据指令
片选信号拉低后,首先输入8位读数据指令,再输入所要读取内容的24位首地址,地址指向的数据在时钟的下降沿输出。数据输出后,地址自动递增,并指向下一个地址。传输下一个地址指向的数据,当地址达到最高位后自动转向首地址000000h,如此循环,读出flash中的全部内容,直到片选信号拉高。
3.4 页面编程指令
在页面编程之前,首先要输入写使能指令,flash完成寄存器设置后片选信号拉低,输入页面编程指令,紧接着输入编程地址和输入数据。一次最多可输入256字节数据,如果超出则只保留最后输入的256字节。如果输入的地址低8位不全为零,则从输入的地址开始编程,编程至该页最后,再从该页的起始位置开始编写。数据输人完毕后片选信号必须置高。否则不执行页面编程指令。
3.5 擦除指令
擦除指令将flash中的0置为1,分为部分擦除和整体擦除两种指令。整体擦除指令和写使能指令类似。只是输入的指令代码不同,而部分擦除指令只需要在指令代码后输入需要擦除的地址即可,一次可擦除一块。执行这两条指令之前,需要先执行写使能指令。
4 硬件实现
flash正常工作时必须严格按照flash的时序控制信号。首次使用flash时一定要先进行擦除操作,编程指令可以将1
fpga凭借其方便灵活、可重复编程等优点而日益被广泛应用;闪速存储器(flash memory)以其集成度高、成本低、使用方便等优点,在众多领域中也获得了广泛应用。在现代数字电路设计中。经常需要保存大量数据,而flash存储速度快、体积小、功耗低且价格低廉,可在线电擦写,信息在掉电后不会丢失,因此成为设计人员的首选。
2 m25p80的介绍
flash是一种具有电可擦除的可编程rom,可以分为两大类:并行flash和串行flash。并行flash存储量大,速度快;而串行flash存储量相对较小,但体积小,连线简单,可减小电路面积,节约成本,二者各有其优缺点,可依据实际需要选取。本文开发的系统对速度的要求不是很高,而对电路板的面积要求则较为苛刻,因此系统设计选用了串行flashm25p80。
m25p80是意法半导体推出的一款高速8 mbit串行flash,共由16部分组成,每一部分有256页,每页有256个字节。m25p80具有先进的写保护机制,读取数据的最大时钟速率为40 mhz。m25p80的工作电压范围为2.7 v~3.6 v,具有整体擦除和扇区擦除、灵活的页编程指令和写保护功能,数据保存至少20年,每个扇区可承受100 000次擦写循环。并行flash封装通常需要28个以上的引脚,因此,额外支出大,而m25p80采用so8封装,需要的引脚数较少,从而节省了电路板空间,功率、系统噪声和整体成本等都会大幅度降低,既经济又实用。
其中vcc和vss分别为电源和地,其他6个引脚均可直接与fpga的i/o引脚相连;写保护引脚w和hold挂起引脚,用于数据保护和空闲模式的低功耗运行,若不用可将其置为高电平;s为片选信号,为低电平时表示器件被选中,否则工作在待机状态;q为串行数据输出,数据在时钟的下降沿输出flash器件;d为串行数据输入,包括传输指令、地址和输人数据,输入信号在时钟的上升沿锁存flash器件中。c为串行时钟,由fpga提供时钟。由于时钟信号速率较高,所以在pcb布线时要特别注意减少干扰,最好采用地线屏蔽。
3 m25p80的指令操作m25p80共有12条操作指令,所有指令都是8位,操作时先将片选信号(s)拉低选中器件,然后输入8位操作指令字节,串行数据在片选信号s拉低后的第一个时钟的上升沿被采样,m25p80启动内部控制逻辑,自行完成相应操作。指令后有时需输入地址字节,必要时还要加入哑读字节,最后操作完毕后再将片选信号拉高。下面简单介绍几条最常用的指令操作。
3.1 写使能指令
页面编程时,在写寄存器或者擦除之前,必须先使用写使能指令设置寄存器的写使能位。在上电或写使能无效指令操作,以及页面编程、写寄存器及擦除指令完成时,该写使能位复位。写使能指令的时序比较简单,指令0000 0110(06h)在片选信号拉低后的第一个时钟的上升沿送入flash,先输入高位,指令输入完成后立即拉高片选信号,否则flash的保护机制则认为是干扰信号而不执行该指令。写无效指令与写使能指令类似,只是输入的指令代码为0000 0100(04h)。
3.2 读/写状态寄存器
状态寄存器在任何时候都可读,即使在页面编程、擦除或者写寄存器时也可读取寄存器,可被连续读取状态寄存器。片选信号拉低后立即送人8位的读寄存器指令,接下来flash将内部寄存器的数值串行输出,8位寄存器内容反复输出。
写状态寄存器的操作步骤:写使能指令输入完成后,拉高片选信号,flash执行读使能指令设置寄存器。然后拉低片选信号,输入写寄存器指令和数据,随后必须马上拉高片选信号。
3.3 读数据指令
片选信号拉低后,首先输入8位读数据指令,再输入所要读取内容的24位首地址,地址指向的数据在时钟的下降沿输出。数据输出后,地址自动递增,并指向下一个地址。传输下一个地址指向的数据,当地址达到最高位后自动转向首地址000000h,如此循环,读出flash中的全部内容,直到片选信号拉高。
3.4 页面编程指令
在页面编程之前,首先要输入写使能指令,flash完成寄存器设置后片选信号拉低,输入页面编程指令,紧接着输入编程地址和输入数据。一次最多可输入256字节数据,如果超出则只保留最后输入的256字节。如果输入的地址低8位不全为零,则从输入的地址开始编程,编程至该页最后,再从该页的起始位置开始编写。数据输人完毕后片选信号必须置高。否则不执行页面编程指令。
3.5 擦除指令
擦除指令将flash中的0置为1,分为部分擦除和整体擦除两种指令。整体擦除指令和写使能指令类似。只是输入的指令代码不同,而部分擦除指令只需要在指令代码后输入需要擦除的地址即可,一次可擦除一块。执行这两条指令之前,需要先执行写使能指令。
4 硬件实现
flash正常工作时必须严格按照flash的时序控制信号。首次使用flash时一定要先进行擦除操作,编程指令可以将1