对不起版主,前面说法有点错误,就是系统没有提示错误,程序运行正常,因为这个程序是一个在网上找的测试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); } } |