加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

读写EPCS

(2019-07-01 21:25:33)
分类: 学习心得
       读写EPCS有三个好处:其一根据flash芯片进行程序加密,其二保存一些运行数据,掉电后依旧保存,其三:在线烧写程序。后面写一下如何在线更新烧写程序。
       这里的设计思路是通过nios来完成,当然也可以通过逻辑来完成,后面有时间学习一下如何通过逻辑进行flash读写。
     
一、顶层代码

module top(

//always on 40MHz clock LVDS

input codec_main_clk,

 

output epcs_dclk,

output epcs_sce ,

output epcs_sdo ,

input epcs_data0

);

 

wire sys_rstn;

wire sys_clk,sys_clk_1,sys_clkx2;

wire int_40mhz,ref_pll_clk;

wire locked;

sys_pll MAIN_PLL(

.areset(1'b0), //(reset_global),

.inclk0(codec_main_clk), //40M

.c0(), //60M

.c1(sys_clk), //60M

.locked(locked)

);

assign sys_rstn = locked;

nios_cpu u0 (

    .clk_clk                   (sys_clk),

    .reset_reset_n             (sys_rstn),

    .epcs_flash_external_dclk  (epcs_dclk),

    .epcs_flash_external_sce   (epcs_sce),

    .epcs_flash_external_sdo   (epcs_sdo),

    .epcs_flash_external_data0 (epcs_data0)  

);

二、qsys配置

时钟设置

读写EPCS
cpu设置

读写EPCS

添加jtag,默认配置

读写EPCS

添加ID

读写EPCS

添加epcs

读写EPCS

添加onchipmem,内存设置为409600

读写EPCS

连续如下所示,中断如下所示:

读写EPCS

将EPCSE设置为export,自动分配地址,自动分配中断,点击generate,完成。

在quartus中将EPCSE接口的4根线设置为普通IO,具体如下图配置:

读写EPCS

生成bit,然后启动eclipse,新建software文件夹。

三、软件编写

新建工程,设置为hello world。

Main函数编程如下所示:

#include 

#include "sys/alt_flash.h"

#include "sys/alt_flash_dev.h"

#include "system.h"

int main(void)

{

  printf("Hello from Nios II!\n");

  alt_flash_fd* my_epcs;

  int i=0;

  alt_u8 epcsbuff[32],epcsbuff2[32];

  for(i=0;i<32;i++)

  {

  epcsbuff[i]=i;

  epcsbuff2[i]=0;

  }

  my_epcs=alt_flash_open_dev(EPCS_FLASH_NAME);

  if(my_epcs)

  {

//  alt_epcs_flash_erase_block(my_epcs,0x8f0000);

//  alt_epcs_flash_write(my_epcs,0x8f0000,epcsbuff,32);

  alt_epcs_flash_read(my_epcs,0x8f0000,epcsbuff2,32);

  alt_flash_close_dev(my_epcs);

  }

  else

  return 0;

}

说明首先添加三个头文件,前两个用于epcs函数使用,后一个用于EPCS_FLASH_NAME。

用到的函数alt_flash_open_dev,该函数打开EPCS设备。

alt_epcs_flash_erase_block用于擦除EPCS

alt_epcs_flash_write用于写内容,后面为地址,buff和长度。

alt_epcs_flash_read用于读内容,后面为地址,buff和长度。

alt_flash_close_dev用于关闭设备。

四、验证

首先给0x8f0000写0到31递增数据,然后可以读出来写入的值也为031,然后断电,设备重启,这时候不给EPCS写,只是读取,会发现内容还是031,表示数据读取正确没有丢失数据,EPCS操作完成。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有