首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

flash无法打开的问题

flash无法打开的问题

在做flash的读写试验时,程序在IDE里面build没有问题,然后run as hardware就出现这种flash无法打开的问题,

不知是什么原因?请高手解释下,先谢了

ps程序报错信息:open flash device...
                            open flash device failed!!!

多来点信息,你的flash打开错误,多半和sopc的配置有关,当然也有可能和你的cfi table就是targetboard有关。

你把信息说详细些好吗?

[此贴子已经被作者于2007-8-7 9:48:39编辑过]

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

硬件里flash的基地址已设为0 了,软件应该没问题,加了一行测试代码,

得知每次打开flash

alt_flash_fd* flash_handle;

flash_handle = alt_flash_open_dev(CFI_FLASH_NAME);

flash_handle  的返回值都是0,这是为什么?

说说你的配置方法和你的步骤。

你可以将reset和exception都选为flash。在nios中debug,看看能不能在flash中直接调试程序。

如果不能,说明系统没有认到或flash读写有问题。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

首先说明板子没问题,因为别人的实验在上面做的没问题。

SOPC里面CFI的设置为就只有presets custom

     address width: 22bits   data width: 8bits

      borad info: none

   timing里面是默认的值,没有改

难道是borad或是timing的问题?

此实验还没下到flash里,还只是调试,软件是run as hardware就出问题的。

”软件是run as hardware就出问题的。“

将将reset和exception都选为flash就是在flash中跑程序。这是nios ide会先将程序下到flash中,然后再在里面跑。

如果你的sopc设置没有问题,只能说明flash有硬件问题。(既然能跑程序,硬件电路链接就没有问题)

你把系统的错误提示完整的贴出来看看,好吗?

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

对不起版主,前面说法有点错误,就是系统没有提示错误,程序运行正常,因为这个程序是一个在网上找的测试flash读写的程序,读写失败就打印上述消息,open flash device falied

其次就是这个板子别人用同样的程序运行,实验成功了,但在在我这就是打开失败。

还有一个问题就是,在quartus里面,cfi多了一个引脚,就是flash select,

由于我只有一个flash设备,所以这个引脚我就给悬空了。(心里有点悬,不知是不是这里有问题)

版主你说可以把reset和exception都选为flash来测试flash的好坏,我想这应该不行吧,应该在system  library properties里改program memery (sram),read_only data memory(sram)等吧,所以我把这些sram全改成flash,在IDE里看发现程序刷进去了,但是在板子上程序要跑不起来,我就纳闷,这又是什么原因呢?[板子和 flash在别人那有试了一下,没问题,读写数据都没问题]

ps:我的程序

#include <stdio.h>
#include <sys/alt_flash.h>
#include "system.h"
#include <unistd.h>
#define DATA_OFFSET 0x300000

int main(void)
{
  alt_flash_fd* flash_handle;
  FILE *uart;
  char write_data = 0;
  char read_data = 0;
  write_data = 100; 
  uart = fopen(UART_NAME,"w"); 
  flash_handle = alt_flash_open_dev(CFI_FLASH_NAME);
      fprintf(uart, "open flash device...\n");
      usleep(10000); 
  if (flash_handle)
  {
    fprintf(uart, "open flash device successed!!!\n");
      usleep(10000);       
    alt_write_flash(flash_handle, DATA_OFFSET, &write_data, 1);
      fprintf(uart, "wirte_data = %d\n", write_data);
      usleep(10000);
    alt_read_flash(flash_handle, DATA_OFFSET, &read_data, 1);
      fprintf(uart, "read_data = %d\n", read_data);
      usleep(10000);
    if(read_data == write_data)
    {
      fprintf(uart, "flash write and read successed!!!\n");
      usleep(10000);
    }
    else
    {
      fprintf(uart, "flash write or read failed!!!\n");
      usleep(10000);
    } 
    alt_flash_close_dev(flash_handle);
      fprintf(uart, "close flash device...\n");
      usleep(10000);    
  }
  else
  {
    fprintf(uart, "open flash device failed!!!\n");
      usleep(10000); 
  } 
}

问题还没解决,亟待高手帮助啊!

[此贴子已经被作者于2007-8-8 20:18:58编辑过]

还有一个问题就是,在quartus里面,cfi多了一个引脚,就是flash select,

由于我只有一个flash设备,所以这个引脚我就给悬空了。(心里有点悬,不知是不是这里有问题)

这个引脚是flash的片选信号,怎么能悬空呢。

这是非常重要的信号线!!!

接在flash ce上!

[此贴子已经被作者于2007-8-9 14:03:21编辑过]

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

我的板子由于它只有一个flash,所以板子上flash的FLASH_CE,已经接到开发板上固定电源上了,

使它长期有效使能,根本就没有就到FPGA的引脚上。

所以我在Quartus里分配引脚时,就多出一个引脚,就悬空了。

不知这样有没有问题。

我的板子由于它只有一个flash,所以板子上flash的FLASH_CE,已经接到开发板上固定电源上了,

使它长期有效使能,根本就没有就到FPGA的引脚上。

”又错了,片选信号多半是低电平有效!你这样不是永远无效了吗?

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

“版主你说可以把reset和exception都选为flash来测试flash的好坏,我想这应该不行吧,应该在system  library properties里改program memery (sram),read_only data memory(sram)等吧,所以我把这些sram全改成flash,”

reset和exception都选为flash就是将text和ro等都为flash了。

SOPC中的reset address 指定的是最终全部软件程序代码下载到的地方,并且程序从reset address 启动。
SOPC中的exception address 指定的是系统异常处理代码存放的地方。如果exception address 和reset address 不一样,那么程序从
reset address 启动后将把放在reset address 处的系统异常处理代码拷贝到exception address 。
NIOS II软件中的text address指定的是程序运行的地方。如果text address和reset address 不一样,那么程序从reset address 启动
后将把放在reset address 处的普通只读程序代码拷贝到text address 。NIOS II软件中的rodata address指定的是只读数据的存放地方。
如果rodata address和reset address 不一样,那么程序从reset address 启动后将把放在reset address 处的只读数据拷贝到
rodata address 。
NIOS II软件中的rwdata address指定的是可读写数据的存放地方。如果rwdata address和reset address 不一样,那么程序从reset address
 启动后将初始化rwdata address 处的可读写数据。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

你说的这些我没有异议,但我认为我是在调试模式,也就是在IDE的Run as hardware的模式下运行的,所以,此时程序的代码还没有刷进sopc里的reset指定的存储器,仅仅是刷在program memery指定的存储器里,因为此时你一reset程序就没了,又要你得重新刷进去。

如果照版主你说的意思,那么就是在调试模式下,程序也刷进SOPC指定的存储器(如flash),然后再从SOPC reset指定的存储器下载到program memery指定的存储器中。那么我先前SOPC是指定在EPCS flash里的,那么在run as hardware之后,再reset我的cpu(开发板一直没有掉电,reset是由quartus里设置的一个按键),程序的代码应该还在flash里啊,但实际上此时epcs里已经没有程序了。所以我认为在RUN as hardware这种模式下,代码仅仅刷进program memery 指定的存储器里的。不知我的是否正确?

 

”又错了,片选信号多半是低电平有效!你这样不是永远无效了吗?”这个问题我在查用户手册和芯片资料时也很纳闷了,上面写的就是接高电平,但是我不敢肯定板子上也是这么接的,或许仅仅是用户手册上印错了,因为我的一个同学也是用这个板子做实验,他测试的结果是正确的(但是他的结果又是不稳定的,就是说相同的程序,相同的板子,在不同的时刻,有时他的结果也和我一样,只不过我是一次成功都没有)。

不过我现在正在和开发商联系,期待他的结果吧。如果排出板子有问题的情况,不知出现上面的问题是何原因?

 

[em11]

[此贴子已经被作者于2007-8-10 8:48:19编辑过]

"但我认为我是在调试模式,也就是在IDE的Run as hardware的模式下运行的,所以,此时程序的代码还没有刷进sopc里的reset指定的存储器"

事实上你在调试模式,也就是在IDE的Run as hardware的模式下运行的时候,在系统的console中,就是下面,可以看到:download和verify的字样。分别是下载和验证。但是这种下载程序是直接在flash中指定位置跑。不能上电自动运行,我们通常用这种方法来判断flash或其他如sdram是否是好的。

上电自动运行需要flash program或在shell中输入flash下载命令下载才能构成系统并自动运行。

[此贴子已经被作者于2007-8-10 9:36:12编辑过]

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

"在系统的console中,就是下面,可以看到:download和verify的字样。"

这个没问题,我的reset地址设为EPCS,每次仿真都可以看到这些字样。

“分别是下载和验证。但是这种下载程序是直接在flash中指定位置跑。不能上电自动运行,我们通常用这种方法来判断flash或其他如sdram是否是好的。"

但是我还是不认同这个下载程序是直接在flash中跑,正如上面我所说,我在仿真的过程中,我的reset地址一直设在epcs,按楼主这么说我仿真的过程中程序都是在epcs里运行,也就是flash中。这样的话,我想运行速度会很慢,但是我最近的一个综合程序(比较大,包含flash读写,由于读写flash的子程序模块失败,我就把这个模块注释掉了,其他的不变)也是这样仿真,但是我没有感到他运行的速度慢啊,我认为是在program memery里运行的。

我认为楼主的这种方法是可以判断flash是否是好的,而且我改了reset地址为flash后,验证flash是好的。但我还是不认同程序是在sopc里reset指定的存储器里运行。

还有我上面说的掉电是指cpu掉电,但fpga开发板不掉电。

[此贴子已经被作者于2007-8-10 14:24:03编辑过]

返回列表