我用fpga altera , 用的存储芯片是EPCS16,具体型号是M25P16, 其存储了系统的配置以及我的 nios2 软件。

我在研究如何读取 M25P16 的 ID, 所以需要如何操作芯片, 我用的Altera 15 下的Qsys ,芯片已经添加到系统了。

如何对其进行spi 操作呢? 在网上闻询,查找了资料,顺带学习了其 读写,erase 操作,

先简要描述如下:

需要的几个关键文件: alt_type.h  alt_flash.h, alt_flash_dev 都是产生在hello_bsp 的 drivers\inc 下,

drivers\src 下的 altera_avalon_epcs_flash_controller.c, epcs_commands.c, altera_avalon_spi.c 是值得研究的源代码。

主要的步骤是:

1: alt_flash_open_dev("/dev/epcs");//打开FLASH器件,获取句柄

这个 /dev/epcs 的根据是用户在配置NIOS核时自命名的,可以在system.h中查到,即“EPCS_CONTROLLER_NAME”。

2:alt_epcs_flash_get_info (my_epcs, my_epcs->region_info,my_epcs->number_of_regions);//获取配置芯片信息

3: alt_epcs_flash_erase_block(my_epcs,my_epcs->region_info->offset+0x70000);//擦除第8块

一块的大小是0x10000,

3a: 显示epcs 块的信息内容:

4: alt_epcs_flash_read(my_epcs, my_epcs->region_info->offset+0x70000, epcsbuf, 40); //读40字节

显示 可以看到其结果都是0xff

5: alt_epcs_flash_write(my_epcs, my_epcs->region_info->offset+0x70000, epcsbuf, 32); //写32字节

写的内容是 i+0x22

6: alt_epcs_flash_read(my_epcs, my_epcs->region_info->offset+0x70000, epcsbuf, 40); //读40字节

验证我们写入的内容正确。

程序如下:

main 函数里调用epcs(), main没有显示,我的项目程序里还有其他东西,我这里只是突出epcs 的操作。

结果显示不知怎么不能复制粘贴, 只有用贴图的方式了。

#include "system.h"
#include <stdio.h>
#include "alt_types.h"
#include "sys/alt_flash.h"
#include "sys/alt_flash_dev.h"
unsigned char  epcsbuf[32];

int ret_code;

alt_flash_fd*  my_epcs;//定义句柄

void epcs()

{
int i;

my_epcs = alt_flash_open_dev("/dev/epcs");//打开FLASH器件,获取句柄

ret_code = alt_epcs_flash_get_info (my_epcs, my_epcs->region_info,my_epcs->number_of_regions);//获取配置芯片信息
printf("ret_code=%d",ret_code);
if(my_epcs) //信息获取成功
 {
 //example application, read general data from epcs address 0x70000
 ret_code = alt_epcs_flash_erase_block(my_epcs,my_epcs->region_info->offset+0x70000);//擦除第8块
 ret_code = alt_epcs_flash_read(my_epcs, my_epcs->region_info->offset+0x70000, epcsbuf, 40); //读32字节
 printf("offset=%d\n",my_epcs->region_info[0].offset);
 printf("size=%d\n",my_epcs->region_info[0].region_size);
 printf("numberOfBlock=%d\n",my_epcs->region_info[0].number_of_blocks);
 printf("blockSize=%d\n",my_epcs->region_info[0].block_size);
 printf("after erase:\n");
 for(i=0;i<40;i++)
 {
  printf("%x ",epcsbuf[i]);
 }
 printf("\nafter write:\n");
 for(i=0;i<32;i++)
  epcsbuf[i]=i+0x22;
 ret_code = alt_epcs_flash_write(my_epcs, my_epcs->region_info->offset+0x70000, epcsbuf, 32); //写32字节
 ret_code = alt_epcs_flash_read(my_epcs, my_epcs->region_info->offset+0x70000, epcsbuf, 40); //读32字节
 for(i=0;i<40;i++)
 {
  printf("%x ",epcsbuf[i]);
 }
 printf("\n");
 }
}

参考文章有:

http://m.blog.csdn.net/article/details?id=5701024

https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ug/ug_embedded_ip.pdf

NIOS 2 软核中EPCS配置芯片的存储操作相关推荐

  1. NIOS II 软核中EPCS配置芯片的存储操作

                                                     NIOS II 软核中EPCS配置芯片的存储操作 EPCS4配置芯片除了存储FPGA配置信息和NIOS ...

  2. [转贴]NIOS II 软核中EPCS配置芯片的存储操作

    最近用CYCLONE FPGA做的视频图像叠加板需要存储一些用户配置信息,而EPCS4配置芯片除了存储FPGA配置信息和NIOS II程序外,还有很多存储空间剩余未使用,刚好可以用来做用户配置信息存储 ...

  3. PYNQ-Z2调试笔记:在Microblaze软核中编程运行C程序

    本篇主要介绍,通过Jupyter在Microblaze Subsystems上使用C语言编程,实现一些简单的功能. 目录 前言 正文 一.软核PMODA.PMODB.RPI.ARDUINO 二.在软核 ...

  4. NIOS II软核处理器

    前不久,Altera 正式推出了Nios II系列32位RSIC嵌入式处理器.Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera FPG ...

  5. [笔记].Nios II 软核性能基准

    一些表格 表1 Nios II处理器系统的最大时钟频率(tMAX)(MHz) 表2 Nios II处理器系统的MIPS(每秒钟一百万个指令)   表3 在不同设备家族上的Nios II处理器系统的MI ...

  6. SecureCrt配置之自动存储操作日志

    日志自动存储配置 我填写的log file name D:\SecureCrt-log\%H\%Y%M%D\%S  %H  %Y-%M-%D %h%m%s.log 防止连接中断配置 每300秒会在命令 ...

  7. NIOS软核处理器入门实验

    NIOS软核处理器入门实验 脚本方式的优势: •便于工程的复制和搬移, 命令脚本能够较好的解决文件路径的相对关系 •便于参数的集中修改,命令脚本的参数相对集中, 在配置文件的集中区域可以完成所有的设定 ...

  8. nios 和arm 是硬核还是软核?

    核(CORE)是一个数字系统的核心,负责整个系统的内存调度,中断管理,算术逻辑运算等,如同整个系统的大脑,是由物理电气实现逻辑功能的关键.尽管复杂,但不可忽略的是,核同其他数字器件一样,也是一个典型的 ...

  9. 基于 NIOS-II 软核的流水灯

    基于 NIOS-II 软核的流水灯 一.实验介绍 (一)实验目的 (二)实验内容 (三)实验原理 (四)实验器件 二.硬件设计 (一) 新建一个工程 (二) Qsys 系统设计 (三)完成 Qsys ...

  10. 3级调度 fpga_FPGA的软核、硬核、固核

    "核" 现在的FPGA设计,规模巨大而且功能复杂,因此设计的每一个部分都从头开始是不切实际的.一种解决的办法是:对于较为通用的部分可以重用现有的功能模块,而把主要的时间和资源用在设 ...

最新文章

  1. linux 文件系统 文件查找 文件链接
  2. 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
  3. laravel + Vue 前后端分离 之 项目配置 - 开发环境
  4. android怎样将bar的label居中_从iPhone换成Android手机之后,将是一种怎样的不同体验...
  5. [PAT B1036]跟奥巴马一起编程(15分)
  6. 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑
  7. Windows Mobile logo测试介绍
  8. 前端学习(1735):前端系列javascript之TypeScript介绍
  9. 餐饮小票打印app_POS收银工业平板电脑在餐饮行业的应用
  10. MongoDB 安装记录
  11. 5场直播丨PostgreSQL、openGauss、Oracle、GoldenDB、EsgynDB
  12. 关于“Unknown or unsupported command ‘install‘”问题解决的小结
  13. 写作的积累 —— 台词
  14. python web改为java_Python是否可以成为Web应用程序的良好替代方案,否则将在Java EE中完成?...
  15. 一个成功的网络营销案例的分析
  16. 明明办了100M宽带,下载速度为何不到10M/s?
  17. 2018年度中国IT行业杰出人物奖出炉
  18. 一篇文章,教你学会Git
  19. 深度 | 巨头都在追逐的眼球追踪技术,究竟能带来什么?
  20. mysql Error 1412: Table definition has changed, please retry transaction

热门文章

  1. python使用selenium大麦网抢票
  2. 电阻电容串联并联关系,一辈子受益
  3. Bug解决-IndentationError:expected an indented block
  4. 手机app开发(新手教程)
  5. python中的复数虚部_python复数的虚部怎么表达
  6. 爬虫千万条,守法第一条,爬虫不规范,亲人两行泪
  7. 在 Word 中插入 Latex 公式
  8. 高等数学——驻点,拐点,极值点
  9. (娱乐项目)Python图片转换成矩阵数据,矩阵数据转换成图片
  10. 台式计算机无故重启,台式电脑突然自动重启是怎么回事