基于FPGA的flash远程UART更新的实现

这篇具有很好参考价值的文章主要介绍了基于FPGA的flash远程UART更新的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整体架构:micro blaze 、AXI UART 、AXI SPI;
语言:Verilog 、C
开发软件:vivdao2019.1
接口:UART 、SPI 、QUAD SPI文章来源地址https://www.toymoban.com/news/detail-705141.html

  1. uart
    通用异步收发器(Universal Asynchronous Receiver/Transmitter:UART)
    UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是5~8个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。  在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。
    在本文中,FPGA实现了UART的包接收和数据缓存,接收模块采用了microblaze+axi uart实现,在SDK端采用C语言实现接收;包数据的缓存采用循环队列fifo实现。具体缓存数据的字节大小依据项目大小分配;
    接收数据的触发条件:中断触发,即uart接收第一个数据后查看uart的状态寄存器,判断状态寄存器的数据有效性,即中断触发,进入到中断后,通过UART的接收函数接收数据,接收一定字节的数据后进行数据的打包处理,打包的数据存储在循环队列中,等待flash从循环队列中取数据,完成第一包数据的写入。
  2. flash
    快闪存储器(英语:flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。这种科技主要用于一般性数据存储,以及在计算机与其他数字产品间交换传输数据,如储存卡与U盘。闪存是一种特殊的、以宏块抹写的EPROM。早期的闪存进行一次抹除,就会清除掉整颗芯片上的数据。
    flash的应用场景(基于FPGA):主要用于FPGA程序的固化模块,即将程序固化到flash中,断电重启后FPGA会从flash中加载程序,完成FPGA的启动;
    flash的原理:FPGA需要固化的MCS、BIN、BIT文件的数据按照最小存储单元存到flash中,完成FPGA固化文件的存储;具体操作流程如下:FPGA需要固化程序时在vivado软件扫到配置flash的具体器件,然后再软件设置界面选择配置flash的型号和配置方式,配置的流程为flash器件的擦除、写数据、写入数据的校验。
    flash的结构:flash的最小存储单元为sub sector(子扇区),每个sub sector包含4K的存储空间(4096个字节),block称为块(包含16个sub sector,存储空间大小为64K),对于16M的flash共有256个block(16777216个字节的存储空间)。
    flash的擦除、写、读:
    (1)擦除:擦除分为Subsector erase(SSE)、sector erase(SE)、Bulk erase(BE)三个部分的擦除,
    ✔Subsector erase:子扇区擦除,擦除命令为20h。按起始地址往后擦除4K大小的空间,擦除完成后4K大小的每个page的数 据为0xFF。
    ✔sector erase:扇区擦除,擦除命令为D8h。按起始地址往后擦除64K大小的空间,擦除完成后64K大小的每个page的数据为0xFF。
    ✔Bulk erase:全擦除,擦除命令为C7h。擦除完成后全flash为0xFF。
    (2)写:扇区擦除完成后,开始数据的写入,数据的写入按照写入的最小单元page(页)进行写入,写入命令为02h。
    (3) 读:从起始地址读数据,每次读出一个扇区的数据(64K),读数据的命令为03h。
    (4)注意**:flash的全擦除后不能立即写数据,需要等flash为空闲状态的时候再写入数据**。
    flash的分区:flash的分区是为了将要更新的程序和引导程序进行区域划分,是进行uart更新flash程序的关键部分,具体的流程为:
    (1)将引导程序从flash的0x000000(flash的大小为16M,地址线宽度为24位)存储下来,给足够的引导程序存储空间(如程序大小为2K,则需要预留大于2K的程序存储空间),这样每次上电后FPGA程序从flash的0地址开始加载,可以执行后续的远程更新操作;
    (2)开始需更新程序的远程更新,按照flash的擦除和写操作将数据写入到flash的后续地址中,例如从0x400000开始写数据;
    (3)在FPGA端使用ICAP源语按照具体的命令使FPGA从已经写入程序的起始地址开始加载新的程序。
    (4)
    fpga 更新flash,fpga开发

到了这里,关于基于FPGA的flash远程UART更新的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】FPGA实现UART串口通信回环

    关于UART协议的基础理论部分已经在上一篇文章中讲述,不再重复介绍。 UART通信协议 本文主要介绍如何使用Verlilog编程,通过FPGA实现UART串口通信回环工程。在本工程中所使用的系统时钟为50MHz,如果选择115200的波特率进行数据传输,那么传输1bit所用的时钟周期数就是50_000_

    2024年02月05日
    浏览(64)
  • FPGA开发基础篇之一(接口篇)UART串口

    写在前面 从本文开始,将连载fpga开发基础知识,将这几年浅显的fpga开发经验整理出来,一是梳理一下这几年给别人做fpga的经历,同时也是分享给大家,也希望大牛批评指正。 一、UART串口通信基本概念 串口通信是非常基本且应用十分广泛的低速通信接口,无论是在dsp、单片

    2024年02月02日
    浏览(60)
  • 基于FPGA 外置qspi Flash的读写

    1.写在前面 FPGA内部不具有掉电存储程序的功能,所以都需要外置的flash存储器来存储程序,上电后从flash加载程序到FPGA中运行。外置的flash可以存储程序,也可以存储任何用户数据,可以更有效的利用flash的存储空间。 值得注意的是,用于存储程序的flash和fpga连接用的是fpga的

    2024年02月12日
    浏览(46)
  • 基于FPGA的超声波测距——UART串口输出

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE10F17C8 4、超声波模块:HC_SR04 要求: 使用 EP4CE10F17C8开发板驱动 超声波检测模块(HC_SR04 ),并将所测得数据显示到串口助手上。 HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发

    2024年02月14日
    浏览(44)
  • 基于FPGA的通用异步收发传输器(UART)设计

    基本目的:   (1)了解UART通讯原理,包括数据传输格式、电气特性等; (2)研究Basys3开发板与PC之间通讯电平规格的转换; (3)设计并实现UART的发送(TX)功能或接收(RX)功能。 高级任务(可选):可调。 (4)设计并实现UART的发送(TX)功能和接收(RX)功能,构建回

    2024年02月16日
    浏览(45)
  • FPGA实现UART通信(1)---发送数据

    1、基本概念 通用异步收发传输器,是一种异步收发传输器,在发送数据通过将并行数据转换成串行数据进行传输,在接收数据时将串行数据转换成并行数据。 串行通信分为同步串行通信和异步串行通信。同步串行通信即需要时钟的参与,通信双方需要在同一时钟的控制下,

    2024年02月04日
    浏览(44)
  • FPGA——实现三线SPI和UART

    目录 逻辑框图(原理图) 端口约束和ILA  ILA waveform  实测波形 串口调试工具 源代码 顶层  FPGA和芯片之间通过三线SPI接口通信(DATA复用一个IO端口),FPGA和PC之间通过UART串口通信。 原理图包含4个模块,分别为:内建模块IBUFDS(用于将外部差分时钟转换为内部单端时钟)、

    2024年02月09日
    浏览(34)
  • 【FPGA】UART串口通信——奇偶校验实现

    奇偶校验位是基于uart的数据上进行一个判断 奇校验:数据1个数为奇时,校验为0,反之为1 偶校验:数据0个数为偶时,校验为0,反之为1 Uart回环在之前已经实现,现在需要基于uart增加一个奇偶校验位的需求 uart及代码:https://blog.csdn.net/weixin_59150966/article/details/128005066?spm=10

    2024年02月11日
    浏览(42)
  • 【FPGA学习】状态机实现UART通信

      在之前的文章中【FPGA学习】实例一、Cyclone IV串口通信(RS232)我们已经能够采用波形图的方法,实现9600bps的Uart通信。近期笔者在整理了状态机和计数器组合的设计方法以后,对状态机的设计又有了新的感悟和体会,所以又把经典的RS232协议拉出来当状态机的例子练手了哈哈

    2023年04月11日
    浏览(41)
  • 详解UART通信协议以及FPGA实现

      从《浅谈UART,TTL,RS-232,RS-485的区别》这篇文章,我们知道了UART是一种串行、异步、全双工的通信协议,属于协议层;传输过程一般采用RS-232,RS-485电平标准,将所需传输的数据一位接一位地传输;整体传输框架如下:   串口通信由发送端和接收端构成,两根信号线

    2024年04月28日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包