一,生成hex文件

逻辑工程的qsys编译好以后会生成sopcinfo文件,software里面首先generate bsp,然后编译software,编译完成后右键software->make targets build,选择mem_init_generate->build,然后就会生成hex文件

二,生成sof文件

重新编译整个逻辑工程,或者如果逻辑工程已经编译过了,仅仅更新nios,为了节省时间可以采用如下步骤:
1,在quartus里面processing->update memory initialization file
2,processing->start->start assemble
就能生成sof文件了

三,生成升级所用的bin文件

此处需要.sh文件,放到software目录下,内容为:

echo Generate application binary file.sof2flash --input=".\..\..\qii\output_files\power.sof" --output="hw.flash"  --epcs --verbose
objcopy -I srec -O binary hw.flash hw.bin
#bin2flash --input="hw.bin" --output="NiosEMIF.flash" --location=0x100000
bin2flash --input="hw.bin" --output="NiosEMIF.flash" --location=0x0#sof2flash --input="..\..\prj\output_files\NiosEMIF.sof" --output="NiosEMIF.flash"  --epcs --verboserm hw.flash

然后跟生成hex一样调用一下这个脚本,生成bin文件

四,通过上位机实现flash写入

升级代码如下:

void setImg(UpDateBag *UpDateData)
{if( 1 )        //{soflength = UpDateData->length;// resetif(UpDateData->faddr == 0){bufpoint   = 0;sofOffset  = 0;erase_cnt  = 0;erase_size = 0;if (epcs_flash == NULL)epcs_flash = alt_flash_open_dev(EPCS_FLASH_CONTROLLER_0_NAME);}dataBuffer = UpDateData->data;bufpoint  = bufpoint + UpDateData->flen;if (UpDateData->flen > erase_size){alt_erase_flash_block(epcs_flash, erase_cnt*FLASH_BLOCK_SIZE + APP1_IMAGE_BASE, FLASH_BLOCK_SIZE);erase_size += FLASH_BLOCK_SIZE; erase_cnt++;}if ((bufpoint + sofOffset) >= soflength){if(epcs_flash)alt_write_flash_block(epcs_flash, APP1_IMAGE_BASE+sofOffset/FLASH_BLOCK_SIZE*FLASH_BLOCK_SIZE, APP1_IMAGE_BASE+sofOffset, dataBuffer, bufpoint);erase_size -= bufpoint;sofOffset  += bufpoint;bufpoint    = 0;}else{if(bufpoint == 1024){if(epcs_flash)alt_write_flash_block(epcs_flash, APP1_IMAGE_BASE+sofOffset/FLASH_BLOCK_SIZE*FLASH_BLOCK_SIZE, APP1_IMAGE_BASE+sofOffset, dataBuffer, bufpoint);erase_size -= bufpoint;sofOffset  += bufpoint;bufpoint    = 0;}}}if(sofOffset == soflength ){replyCmdBuf[PACKET_HEAD_LEN>>2] = LVDS_CMD_OK;ReplyMessage(4);usleep(20000);#ifdef BOOT_MODErsu_factory_trigger_reconfig(RSU_CYCLONE4_0_BASE, (APP_IMAGE_BASE)>>2, 0x00);#elsersu_app_trigger_reconfig(RSU_CYCLONE4_0_BASE);#endif}//   if(sofOffset == soflength )
//  {//      replyCmdBuf[PACKET_HEAD_LEN>>2] = LVDS_CMD_OK;
//      ReplyMessage(4);
//
//      usleep(20000);
//
        IOWR(REMOTE_UPDATE_0_BASE, 0x4, 1);
//
//      //Trigger reconfiguration
//      IOWR(REMOTE_UPDATE_0_BASE, 0x6, 1);
//  }
}

与之对应的升级模块为qsys里面添加 epcs_flash_controller,flash对应的几个引脚有的片子要求连上,有的片子不用连(只能是那几个引脚)

需要注意的是代码写入成功后的跳转模块,有的片子需要用rsu_cyslcone4模块跳转,有的需要用remote update模块实现跳转。

五,制作boot程序

boot升级那块跟应用程序一样,只不过main函数刚跑起来多一个app跳转功能,代码如下

void SwitchToApp(void)
{rsu_factory_get_previous_reconfig_status(RSU_CYCLONE4_0_BASE,&condition_1,&condition_2,&boot_address_1,&boot_address_2);if(condition_1 <= 1){rsu_factory_trigger_reconfig(RSU_CYCLONE4_0_BASE,//REMOTE_UPDATE_CONTROLLER_BASE,                 //  alt_u32 rsu_base,(APP_IMAGE_BASE)>>2,//( HW_APP1_IMAGE_BASE + HEADER_LENGTH ) >> 2,    //  alt_u32 boot_address_value,     // MSB 22-bits of 24-bit address0x00//hw1_header_g.res_wd_tmo                           //  alt_u32 watch_dog_value         // MSB 12-bits of 29-bit timeout count);}
}

固化boot程序需要做jic文件,就是在生成sof以后通过 quartus->file->convert programming files

做好jic文件以后通过bluster烧录固化进去

六 没有nios只有逻辑的情况下的jic

生成sof以后方式跟上面一样,只是没把hex加进sof而已。没有nios的情况如何远程升级我还没学会,学会再加。
展示一下两个sof做到同一个jic里

altera CPLD通过nios在线升级相关推荐

  1. 通过MCU实现Altera FPGA在线升级

    一.问题背景  在实际工程应用中,我们时常会遇到为解决某个老产品的BUG,需要在工程现场更新设备的FPGA代码,或者参加电信测试时需要现场升级设备FPGA程序以便于调试.公司现阶段所用的Altera ...

  2. ALTERA系列的FPGA通过RS232串口在线升级

    ARM系列的芯片(例如STM32系列)可以通过YMODEM协议实现在线升级,在芯片中写入BOOT程序.APP程序就可以实现.那FPGA可以这样做吗,答案是可以的.要想搞清楚流程就必须了解FPGA的启动 ...

  3. ALTERA CPLD离线烧写方案设计(MCU模拟JTAG)

    在含有CPLD芯片的电子产品中,由于代码中的BUG需要升级固件,如果以前的固件内没有离线烧写系统,那么必须要通过专门的烧写工具把固件下载到CPLD中去(如USB Blaster),但这样非常繁琐,而且 ...

  4. MCU模拟JTAG接口对LATTICE CPLD FPGA 进行在线编程加载

    完整版请点击 https://hifpga.com/问题/719 索取源码,向博主本人提问FPGA相关问题 作者:Rock.Ding(莱迪思半导体公司) 关键字:MCU, JTAG, 在线编程, CP ...

  5. FPGA远程更新-在线升级

    title: FPGA远程更新/在线升级 date: 2021-03-03 22:00:00 tags: FPGA ALTERA 远程更新/在线升级 categories: FPGA 1.摘要 对最近 ...

  6. FPGA远程固件在线升级

    FPGA远程固件在线升级 1.摘要 对最近做的FPGA远程更新/在线升级做一个总结.一般在代码开发阶段,我们使用JTAG烧写代码,但当产品投入到实际使用过程中,难以再用JTAG进行固件更新.所以需要开 ...

  7. 软件包管理 之 软件在线升级更新yum 图形工具介绍

    作者:北南南北 来自:LinuxSir.Org 提要:yum 是Fedora/Redhat 软件包管理工具,包括文本命令行模式和图形模式:图形模式的yum也是基于文本模式的:目前yum图形前端程序主要 ...

  8. C#做的在线升级小程序

    转自原文C#做的在线升级小程序 日前收到一个小任务,要做一个通用的在线升级程序.更新的内容包括一些dll或exe或.配置文件.升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的 ...

  9. IE9最终版透露IE10信息 或将自动在线升级

    IE9才刚刚发布几天,互联网上已开始了对IE下一个版本的猜测. 今天,在IE9最终版里发现的一些隐藏资源显示,微软已有了对IE10的预先计划.俄罗斯网站TheVista.ru披露了一个提及IE10的对 ...

最新文章

  1. 安卓java修改按钮大小_android弹出activity设置大小的方法
  2. IT小小鸟VS.小小小鸟:展翅,我们一起翱翔!
  3. python写入文件-Python写入文件(write和writelines)详解
  4. YUIDoc的使用方法小结
  5. 关于日志的常用配置(log4j和logback)
  6. POJ 2155 Matrix 二维线段树
  7. stringstream用法总结
  8. 自己封装一个弹框插件
  9. create报错不是函数_node.js – sequelize .create不是函数错误
  10. [转]网络编程学习指南
  11. android sdk下载慢的解决方法
  12. SQL语句批量替换某个指定的字符串
  13. DRM in Android
  14. 淘宝搜索上传图片获得上传sid
  15. L1-061 新胖子公式
  16. Anton and Chess
  17. 非对称加密算法——RSA
  18. Unity 编辑器开发实战【Custom Editor】- 为UI视图制作动画编辑器
  19. 常见的关系型数据库和非关系型数据库区别
  20. pcs增加mysql资源_pcs命令配置示例(详细版)

热门文章

  1. Unity3D插件 AnyPortrait 2D骨骼动画制作
  2. android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”...
  3. 一个简单的word拼音文字分离工具
  4. 免注册登陆以及QQ登陆
  5. 前端学习系列——(九)理解什么是ID选择器的“唯一性”
  6. 产品经理(12)#竞品调研
  7. 百度网盘资源下载加速教学
  8. 基于Kinect体感器控制的机械臂项目记录
  9. uip_process分析
  10. 计算机网络硬件脆弱性,计算机网络的脆弱性包括哪些