微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA VHDL NOR Flash 读写

FPGA VHDL NOR Flash 读写

时间:10-02 整理:3721RD 点击:

各位大侠:


本人新手,最近搞了一周的FPGA用VHDL读写Intel Nor flash 28f256,但是没有成功,实在不知道怎么办了,datasheet看了很多遍了,特来请教。

   28f256  共有25根地址线,16根数据线,我的genesys virtex-5开发板已经默认将flash设置成×16 mode,异步读,使能unlock、擦除和编程功能等,所以flash的clk、wait不用,下面是我写的代码,请大侠看看:

   1:

   entityfuck is

   port(clk:in std_logic;

             rst:in std_logic;

                     ledutstd_logic_vector(7 downto 0);

                     cenutstd_logic;

                     oenutstd_logic;

                     wen:outstd_logic;

                     reset:outstd_logic;

                     addr:outstd_logic_vector(24 downto 1);

                     data:inoutstd_logic_vector(15 downto 0));

end fuck;


architecture Behavioral of fuck is

signal i,n:integer range 0 to 10000:=0;

signal temp:std_logic_vector(15 downto0):=x"0000";

signal num:integer range 0 to 100000000:=0;

signal j:std_logic:='0';

signal k :integer range 0 to 8:=0;

begin

reset<=rst;

main:process(clk) is

begin

if(rising_edge(clk)) then--CLK周期10ns,flash信号起作用估计需要100ns

   case i is

            when 0 =>cen<='1';oen<='1';wen<='1';i<=i+1;--设置控制信号初始值,板子已经将byte,wp#,vpnn等信号设置成16 mode了,所以A0地址无效。

                when 10 =>addr<=x"000000";data<=x"0090";i<=i+1;--90H是读设备ID的命令               when 20 =>cen<='0';oen<='1';wen<='0';i<=i+1;               

                when 30 =>cen<='0';oen<='1';wen<='1';i<=i+1;--wen的上升沿采样data和addr               

                when 40 => addr<=x"000000";i<=i+1;--  此时应该输出flash的id  89H     

                when 50 =>cen<='0';oen<='0';wen<='1';i<=i+1;               

                when 60 => led<=data(7 downto 0);--但是data上总是上次的数据,即前面的命令90H,意味着前面的命令根本没有送到flash内,但是我试了,擦除可以执行,其他的都不行,其他代码原理大同小异,我就不发上来了,请大家看看

        when others => i<=i+1;                                                                                    

       endcase;   

end if;

end process main;

end Behavioral;

顶自己

我顶顶顶

thank u


请问您现在成功了吗,我也遇到了问题


首先,可以擦出证明基本功能正常,编程失败可能由以下原因引起:
1. 焊接还是有问题,由于擦除操作需要的控制命令不多,可能与编程相关的命令无法正常输入到芯片中。可以用示波器检查一下各个管脚的链接情况。
2. 编程后需要一个较长的等待时间,读数据最好在busy信号拉高之后再进行。
3. 检查编程指令是否规范。换其他地址写入以防止该block为坏块。


请问怎样判别是否擦除成功呢?是需要读取状态寄存器的内容吗?


如果能够读取状态位的取值,那么通信功能基本就正常了。最简单的判断方法是检查busy信号是否有拉低的过程,以此来判断芯片处于工作中。


我现在想用FPGA对intel的28F256P30进行读写,数据手册什么的我已经看了很多遍了,可是现在读写和擦除都还是有问题,如果您方便的话可否留一下qq跟您请教一下?因为我已经快改了一个月了,实在是不知道自己的问题在哪里。先提前谢了



   哦。我不确定是否能帮上忙,我的QQ PM给你了。注意查收。


大神您好,时隔3年,您是否还记得pc28F256 Flash的程序,小可想请教,不知大神可否赐教,小可QQ号:653082311,邮箱:major201@126.com

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top