Altera FPGA——使用NIOS控制Serial Flash 第二部分

NIOS II Flash操作指南:从HAL API到实战避坑 在嵌入式系统开发中,Flash存储器是存储固件、配置和日志的关键组件。其工作原理基于特殊的物理结构,必须以块为单位擦除后才能写入,这与RAM的直接读写有本质区别。这种特性带来了可靠性和寿命管理的技术挑战,但也确保了数据的非易失性。在FPGA软核处理器(如NIOS II)的生态中,硬件抽象层(HAL)通过封装底层命令序列,提供了简洁的API来操作CFI并行Flash和EPCS串行Flash。本文聚焦于**细粒度Flash访问**模式,深入剖析`alt_get_flash_info`、`alt_erase_fl 阅读详情
AI摘要

本文详细介绍了如何使用QuartusPrime18.0StandardEdition中的NIOSII及相应IP来操作Flash,包括不同IP核的选择、GenericSerialFlashControllerIntelFPGAIP的使用、寄存器设置以及具体操作命令,如写使能、读设备ID和扇区保护。

这一部分将介绍如何通过NIOS及相应的IP来操作Flash,我所使用的软件版本为:Quartus Prime 18.0 Standard Edition。

1. NIOS II中控制Serial Flash的不同IP核。


这几个IP的功能的区别到现在还是比较迷,从介绍上来看相差不多。但是根据最新的文档,Intel推荐使用Generic Serial Flash Controller Intel FPGA IP进行设计,所以这个IP的User Guide即本文的参考文档,已上传至 https://download.youkuaiyun.com/download/setul/10845563。

2. Generic Serial Flash Controller Intel FPGA IP介绍

2.1 概述及支持的设备

该IP支持单、双、四IP口模式,可通过Avalon Memory Mapped (Avalon-MM)总线直接操作Serial Flash。其支持的设备如下:

2.2 使用该IP需要设置的参数

需要设置的参数如下:

2.3 Register Map

该IP总共提供了14个寄存器供设置。偏移地址为0-D。不在这里详细介绍每个寄存器,简单概述几个比较重要的。

  • Flash Command Setting Register (0x7)

    [7:0]:放置操作码的,操作码的值请参考上一篇 "Altera FPGA——使用NIOS控制Serial Flash 第一部分"中的描述,是通过查看Flash的数据手册得知的,但是注意,并不是所有操作的操作码都是通过这个寄存器设置的,读/写内存的操作例外,读内存的操作码在Read Instruction Register (0x5)寄存器中设置,写内存的操作码在Write Instruction Register (0x6)中设置,除此之外的所有操作的操作码均在此寄存器设置。
    [10:8]:地址用多少个字节表示。可以是3字节(3字节的地址线一共可以表示128Mbits的内存空间)或是4字节,如果该值被设置为0则表示这个操作不需要输入地址。
    [11]: 代表[15:12]位存放的数据类型。如果该位是0,则[15:12]中放置的是要写的字节数;若是0,表示要读出的字节数。
    [15:12]:代表要读出或写入的字节数,跟[11]位配合使用。如果该位是0则表示没有要读写的数据。
    [20:16]:dummy cycle的数量,dummy cycle也叫latency cycles,比如有时候传完指令和真正的操作之间会有一定的延时,这个延时就是指dummy cycle。

  • Control Register (0x1)

    寄存器的内容易懂,不做解释。

  • 寄存器0x8-0xD

    跟Flash Command Setting Register (0x7)寄存器一样,Flash Command Control Register (0x8)也是出了读/写内存操作之外必须使用的,将其最低位置1,将使Flash开始执行相应的操作。

3. NIOS II对Flash的一些操作命令

下面讲介绍如果通过NIOS II借助上面的寄存器对Flash进行的一些操作。

3.1 写使能(Write Enable Operation)
void write_enable(){
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0x7,0x00000006);
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0x8,0x1);
}

上述函数的主要操作就是:

  • 设置Flash Command Setting Register的[7:0]为0x6,因为写使能的操作码是0x6。
  • 设置Flash Command Control Register的最低位为1,开始该操作。
3.2 读设备ID(Read Device ID Operation)
int read_device_id(){
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0x7,0x0000489F);
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0x8,0x1);
	return IORD(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0xc);
}

其主要执行的操作为:

  • 设置Flash Command Setting Register的[7:0]为9F,因为该操作的操作码是9F.
  • 设置[10:8]为0,因为该操作不带任何地址数据。
  • 设置[11]为1,表示[15:12]中代表的是读出的数据字节数。
  • 设置[15:12]为4,表示要读出4个字节的设备ID。
  • 设置Flash Command Control Register的最低位为1,开始该操作。
  • 从Flash Command Read Data 0 Register中读出Device ID。
3.3 写状态寄存器实现扇区保护(Write Status Register Operation to Protect Sector of Flash)

下面这个函数是用于Cypress的Flash。对EPCS和Micron都是不同的。所以在这里不得不先说一下Cypress的相关寄存器及操作时序。

在这里插入图片描述

void write_register_for_sector_protect_cypress(){
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0x7,0x00002001);
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0xA,0x0000201c);
	IOWR(INTEL_GENERIC_SERIAL_FLASH_INTERFACE_TOP_0_AVL_CSR_BASE,0x8,0x1);
}
FPGA软核处理器实战:从Nios II系统搭建到软硬件协同仿真 软核处理器是FPGA实现嵌入式系统的核心组件,它通过可编程逻辑资源构建CPU,实现了硬件任务与软件任务的分离。其原理在于利用HDL描述的可综合CPU设计,通过总线(如Avalon)集成外设IP核,形成可定制的片上系统(SoC)。这项技术的价值在于极大提升了系统的灵活性和可扩展性,使得功能迭代可通过修改软件而非重新设计硬件来完成,显著缩短开发周期。在应用场景上,它广泛用于协议解析、算法调度、用户交互等复杂控制场景,是连接FPGA底层硬件与上层应用软件的关键桥梁。本文以Nios II软核处理器为例,深入解析了I 阅读详情

相关推荐

NIOS II软核开发实战:从SOPC构建到外设驱动与调试

片上可编程系统(SoPC)是FPGA与嵌入式处理器融合的关键技术,它通过在单一芯片内集成软核处理器(如NIOS II)、自定义逻辑和丰富外设,实现了硬件可重构与软件可编程的完美统一。其核心原理是基于Avalon总线架构,完成处理器、存储控制器及外设IP核的高效互联与数据交换。这项技术的核心价值在于极大地提升了嵌入式系统的设计灵活性、集成度和性能潜力,允许开发者针对特定应用定制最优的硬件加速单元。典型的应用场景包括工业控制、通信协议处理、图像采集与处理等对实时性和定制化有高要求的领域。本文以《NIOSII那些

weixin_30263073的博客 412

[技术相关]【SWDM-QFP100-34SVEA3测评】+SFC外设学习

SFC是 Serial Flash Controller的缩写,即就是串行flash控制器。链接:https://bbs.21ic.com/icview-3301858-1-1.html。、Cmd_PageProgram主要是与连接的SPI FLASH有关,要从相关的手册中找到。、Width_PageProgram主要配置使用几线接口的,这里我们都使用四线,可以看出Cmd_Read是0xEB,Cmd_PageProgram是0x32。主要是上面这个结构体,用于初始化SFC外设,⚫ 支持 4 线快速读操作。

ic2121的博客 2322

MCU配置FPGA:从串模式、SPI驱动到安全启动全解析

在嵌入式系统与硬件加速领域,微控制器(MCU)与现场可编程门阵列(FPGA)的协同工作已成为一种高效架构。MCU负责控制逻辑与任务调度,而FPGA凭借其并行处理能力,在数据流处理和算法加速方面发挥关键作用。两者协作的核心在于MCU如何可靠、安全地配置FPGA,这涉及配置接口、时序控制、错误恢复及安全机制。从串模式(Slave Serial)因其接口简单、资源占用少而成为最常用的配置方式,MCU通过GPIO或SPI硬件外设模拟时序,将比特流(Bitstream)数据写入FPGA。为确保配置的可靠性与安全性,工

weixin_34088583的博客 470

altera fpga sdi输出方案_Altera平台远程更新中FPGA读写Flash设计的讨论

欢迎FPGA工程师加入官方微信技术群Flash读写控制方案与Xilinx相比,Intel(Altera)提供了读写控制器方案。而且,同时提供了两个方案。首先,Altera似乎没有开放配置Flash的Pin的控制。如果没有找到办法直接控制这些Pin,也就没有办法自行设计Flash读写控制器。自行设计Flash读写控制器的优点在于可控性很高,缺点在于需要花费时间设计并进行稳定性测试。相应的,...

weixin_39872257的博客 853

国产FPGA开发板Tang Nano 4K体验:高云GW1NSR-4C芯片与ARM+FPGA协同开发

FPGA(现场可编程门阵列)是一种可通过编程配置实现特定硬件功能的半导体器件,其核心原理是基于查找表(LUT)和可编程互连结构,允许工程师在芯片级别定制数字电路。这种技术价值在于提供了硬件设计的灵活性,能够实现并行处理、低延迟和高能效的专用硬件加速,广泛应用于通信、图像处理、工业控制和嵌入式系统等领域。随着国产化需求的提升和供应链安全意识的增强,国产FPGA方案因其性价比和本土化支持优势,正成为工程师在**嵌入式开发**和**硬件加速**场景下的重要选择。本文以高云半导体GW1NSR-4C芯片为例,探讨其集

weixin_30700099的博客 706

Cyclone II FPGA硬件设计实战:从芯片选型到PCB布局的完整指南

FPGA(现场可编程门阵列)作为一种可重构的半导体器件,其核心原理是通过可编程逻辑单元和互连资源,允许用户根据需求配置硬件功能。这项技术的关键价值在于提供了硬件设计的灵活性和并行处理的高性能,广泛应用于通信、图像处理、工业控制等领域。在众多FPGA产品中,Altera(现Intel PSG)的Cyclone系列以其极致的性价比著称,尤其经典的Cyclone II器件,凭借成熟稳定的工具链和海量的社区资源,成为工程师入门和原型开发的热门选择。本文聚焦于Cyclone II的硬件系统构建,深入解析其核心架构、电

weixin_30627341的博客 390

fpga写flash

用pc产生bin文件,写到板上的flash中. 方案一.pc串口发送数据到fpga,fpga写入flash. 方案二.使用nios软核,控制flash的读写. 先尝试方案一.

鬼故事的博客 4125

DE0-Nano FPGA开发板实战指南:从Cyclone IV入门到逻辑分析仪进阶

FPGA作为可重构硬件平台,在数字系统设计与嵌入式开发中意义重大。它通过Verilog等硬件描述语言实现电路逻辑,配合Quartus等工具链完成综合、布局与布线,再借助开发板进行实物验证。FPGA的技术价值在于灵活性与并行性,广泛应用于通信接口、信号处理、原型验证等场景。对于学习者而言,一款资源适中、生态成熟的开发板能有效降低入门门槛。Terasic DE0-Nano正是这样的典型代表,它基于Cyclone IV EP4CE22芯片,板载SDRAM、按键、LED等常用外设,支持从点灯实验到SDRAM控制器、

weixin_34302561的博客 356

altera cycloneV FPGA的固化方案

cycloneV的flash固化

qq_36759969的博客 579

Generic Serial Flash Interface Intel FPGA IP Core工程实例

Generic Serial Flash Interface Intel FPGA IP Core工程实例,官方工程实例,配合User Guide看。

ALTERA FPGA使用flash controller简要说明

FPGA是基于SRAM的设备,FPGA将配置存放于SRAM中,掉电丢失。为了避免每次上电都要下载程序到 FPGA,可以将配置程序先下载到非易失性(non-volatile)设备,如Flash中存储,上电后将Flash中的配置copy 到FPGA的SRAM中。

intel fpga elf与sof同时下载

解决方法sof+elf>flash>hex>jic经Edison指点,得知alteraforum上有前辈给出解决方法。看似简单,疗效却比较好。在所在QII工程文件夹中,新建一个文件夹。此处以sof+elf_jic为例;将QII工程和NII工程编译生成的sof和elf都拷贝到此文件夹内;按如下格式,新建一个sh文件,此处命名为make_hex.sh;(sh文件,bash的批处理文件...

choumaoqi2885的博客 1110

已解决-Parallels Desktop 16 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络

我是月球挖掘机,相信不少打工人为了尝鲜已经更新了MacOS 11 Big Sur,当然,苹果每次的系统大更新,都会给我们软件的功能无法使用惊喜,这次的也不例外。 这个问题是我在更新macOS Big Sur之后,Parallels Desktop打开虚拟机后,提示: 报错信息 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络 这是我的软件版本: 起初我以为是我的虚拟机坏了,结果重装了一遍虚拟机,没有任何用处。我开始在网上找方法,只能找到那个使用命令行打开软件的命令,除此之外没有了

月球挖掘机 5万+

工业FPGA程序下载实战:从JTAG链配置到AS模式固化的全流程解析

FPGA(现场可编程门阵列)作为一种可重构的半导体器件,其核心原理是通过硬件描述语言(HDL)定义数字逻辑电路,再通过综合、布局布线生成配置文件,最终下载到芯片中实现特定功能。在工业自动化与设备升级场景中,FPGA程序下载与固化是确保设备稳定运行的关键技术环节。其技术价值在于能够在不更换硬件的前提下,通过更新配置文件快速修复问题或升级功能,极大地提升了设备的灵活性与生命周期。典型的应用场景包括老旧工业设备的维护、产线测试设备的程序更新以及缺乏完整文档的“黑盒”板卡修复。本文围绕【JTAG链】配置与【AS模式

weixin_30328063的博客 478

Windows安装Pytorch3d

pytorch和pytorch3d版本对应关系如下:https://github.com/facebookresearch/pytorch3d/releasescuda和NVIDIA CUB版本对应关系如下:https://github.com/NVIDIA/cub/releases?page=1本人配置如下:GPU:1050TiCUDA:11.1python:3.8。

Snakewood的博客 4286

Autodesk全家桶:从AutoCAD到Maya,设计师必备的7款神器全解析

本文全面解析Autodesk全家桶中的7款设计师必备软件,包括AutoCAD、Revit、Inventor、Fusion 360、Maya和3ds Max等。从二维制图到三维建模,从建筑信息模型(BIM)到影视动画制作,这些工具在工程设计、建筑可视化和数字创意领域展现出强大的协同效应。通过实战案例展示如何整合工作流,显著提升设计效率与项目质量。

weixin_29237635的博客 460

Qsys中的EPCS使用技巧

Qsys中的EPCS使用技巧一、概述EPCS系列器件属于串行Flash器件,具有掉电非易失性,常用作Altera公司的FPGA的周边器件,存储FPGA的配置数据。尤其在NiosII系统中,集成有EPCS serial flash controller core,利用这个控制接口不但可以将FPGA的配置数据存储...

Oh_my_God_L_C的博客 1285

从CPU视角看PCIe:深入理解x86/ARM平台上BAR、MMIO和PIO的地址翻译与访问机制

本文深入探讨了CPU如何通过BAR、MMIO和PIO机制访问PCIe设备的配置空间,详细解析了x86和ARM平台在地址翻译与访问路径上的差异。重点分析了PCIe配置空间中BAR寄存器的作用与探测机制,以及操作系统如何管理PCIe资源,为开发者提供了性能优化与调试的实用技巧。

weixin_30175731的博客 324

FPGA比特流加密实战:用Quartus AES-256保护Altera/Intel设计

在嵌入式开发中,FPGA配置比特流通过SPI Flash加载时往往以明文传输,逻辑分析仪即可完整抓取,导致设计代码和算法逻辑被轻易克隆或逆向。针对这一问题,AES-256硬件解密引擎在芯片内部实时解密密文,确保明文只存在于FPGA内部,外部总线不再暴露任何有效信息。配合eFUSE或BBRAM的密钥存储方式,以及JTAG安全等级控制,可以形成从配置数据到调试接口的多层防护。本文从FPGA上电加载原理切入,讲解AES配置加密的工作机制、密钥管理方法,并介绍在Quartus Prime中生成加密镜像、烧写eFUS

weixin_33994429的博客 315

Python 爬虫实战:Twitter 数据定向抓取(特定话题 + 用户推文爬取与分析)

在社交媒体研究、舆情监测和市场分析等领域,Twitter 数据具有极高的价值。本文将详细介绍如何使用 Python 构建一个完整的 Twitter 数据爬取系统,包括特定话题和用户推文的爬取与分析。我们将涵盖从认证到数据存储、清洗、分析和可视化的全流程。

u014481728的博客 1035

2023华为od机试【最小循环子数组】C++

2023华为od机试【最小循环子数组】C++ 给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。

MISAYAONE的博客 2185

Quartus 18.1 FPGA开发环境全链路部署指南

FPGA开发环境是数字系统工程落地的基石,其稳定性直接决定RTL设计到硬件验证的闭环效率。Quartus作为Intel(原Altera)主流开发工具,其编译链路涉及操作系统兼容性、驱动协议栈、License服务、JTAG底层通信与时序分析等多层技术耦合。尤其Quartus 18.1凭借对Cyclone IV/V系列的深度支持、完整的SignalTap逻辑分析能力及低资源占用特性,成为工业控制、教学实验与遗留项目维护的关键基准版本。本文围绕环境可复现性展开,覆盖Windows系统内核适配、镜像完整性校验、无中

cuiji1279的博客 415

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7066

FPGA实现SPI主机:从RTL设计到时序收敛的实用指南

同步串行通信是嵌入式系统的基础,SPI凭借高速、简单的特点成为外设互连的首选协议。在FPGA工程中,灵活实现SPI不仅需要理解协议原理,更需掌握状态机设计、时钟极性(CPOL)与相位(CPHA)的细节配置。通过RTL手写主机模块,工程师能摆脱IP核限制,针对ADC、Flash等器件定制时序,并利用FIFO实现数据缓冲、提升吞吐。上板调试阶段,时序约束与SignalTap实测是保障信号完整性的关键手段。本文基于实际项目,系统梳理了SPI主机从模块划分、状态机编写到多从机扩展、高频信号处理的完整路径,助力开发者

weixin_34379433的博客 341

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

FPGA双镜像容错升级方案:Cyclone IV远程升级防变砖实践

在嵌入式系统开发中,固件远程升级的可靠性是工业控制与通信设备的核心需求。其原理是通过在配置存储器中划分Golden和Update双镜像区,结合CRC32校验与看门狗回退逻辑,确保升级失败时自动恢复。该技术能显著降低现场返修成本,避免设备变砖,广泛应用于电力监测、工业自动化等场景。针对Altera Cyclone IV FPGA,采用纯逻辑状态机方案,无需软核,资源占用低,实现了高可靠的远程升级容错机制。

weixin_34038293的博客 401

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 深度学习的硬件实现与优化技术研究_林楗军
下一篇: C++模板的本质
隋边边
博客等级 码龄11年 304粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值