FPGA VHDL NOR Flash 读写
各位大侠:
本人新手,最近搞了一周的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
