新浪博客

读写EPCS

2019-07-01 21:25阅读:
读写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),
.inclk
0(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!');
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操作完成。

我的更多文章

下载客户端阅读体验更佳

APP专享