这里会显示出您选择的修订版和当前版本之间的差别。
| 后一修订版 | 前一修订版 | ||
|
icore4t_47 [2020/03/23 18:19] zgf 创建 |
icore4t_47 [2022/04/01 10:54] (当前版本) sean |
||
|---|---|---|---|
| 行 2: | 行 2: | ||
| |技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
| |技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
| - | |技术论坛|http://www.eeschool.org||| | ||
| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| | V1.0 | 2020-03-23 | gingko | 初次建立 | | | V1.0 | 2020-03-23 | gingko | 初次建立 | | ||
| - | + | \\ | |
| - | + | \\ | |
| + | \\ | ||
| + | \\ | ||
| ===== STM32CubeMX教程四十七——U_DISK_IAP_FPGA实验 ===== | ===== STM32CubeMX教程四十七——U_DISK_IAP_FPGA实验 ===== | ||
| + | \\ | ||
| 1.在主界面选择File-->New Project 或者直接点击ACCEE TO MCU SELECTOR | 1.在主界面选择File-->New Project 或者直接点击ACCEE TO MCU SELECTOR | ||
| 行 55: | 行 56: | ||
| * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 | * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 | ||
| * 自行选择方式即可 | * 自行选择方式即可 | ||
| + | |||
| * **Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral** | * **Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral** | ||
| - | * 每个外设生成单独的.c和.h文件 | + | * 每个外设生成单独的.c和.h文件 |
| * **Backup previously genareated files when re-generating** | * **Backup previously genareated files when re-generating** | ||
| - | * 重新生成时备份以前产生的文件 | + | * 重新生成时备份以前产生的文件 |
| * **Keep User Code when re-generating** | * **Keep User Code when re-generating** | ||
| - | * 重新生成时保留用户代码 | + | * 重新生成时保留用户代码 |
| * **Delete previously generated files when not re-generated** | * **Delete previously generated files when not re-generated** | ||
| - | * 重新生成时删除以前生成的文件 | + | * 重新生成时删除以前生成的文件 |
| * **Set all free pins as analog (to optimize the power consumption)** | * **Set all free pins as analog (to optimize the power consumption)** | ||
| - | * 没用到的引脚设置为模拟状态 | + | * 没用到的引脚设置为模拟状态 |
| 14.然后点击GENERATE CODE 创建工程 | 14.然后点击GENERATE CODE 创建工程 | ||
| {{ :icore4t:icore4t_cube_47_17.png?direct |}} | {{ :icore4t:icore4t_cube_47_17.png?direct |}} | ||
| {{ :icore4t:icore4t_cube_47_18.png?direct |}} | {{ :icore4t:icore4t_cube_47_18.png?direct |}} | ||
| 创建成功,打开工程。 | 创建成功,打开工程。 | ||
| + | \\ | ||
| + | \\ | ||
| + | \\ | ||
| + | \\ | ||
| ===== 实验四十七:U_DISK_IAP_FPGA实验——更新升级FPGA ===== | ===== 实验四十七:U_DISK_IAP_FPGA实验——更新升级FPGA ===== | ||
| 行 81: | 行 88: | ||
| ==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
| - | - iCore4T 双核心板。 | + | - iCore4T 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&id=610595120319|点击购买]] |
| - iCore4T 扩展底板。 | - iCore4T 扩展底板。 | ||
| - | - JLINK(或相同功能)仿真器。 | + | - JLINK(或相同功能)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] |
| - Micro USB线缆。 | - Micro USB线缆。 | ||
| - U盘。 | - U盘。 | ||
| 行 93: | 行 100: | ||
| * IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 | * IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 | ||
| * 在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。 | * 在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。 | ||
| - | * 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:1.检查是否需要对第二部分代码进行更新;2.如果不需要更新则转到4;3.执行更新操作;4.跳转到第二部分代码执行 | + | * 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作: |
| + | * 1.检查是否需要对第二部分代码进行更新; | ||
| + | * 2.如果不需要更新则转到4; | ||
| + | * 3.执行更新操作; | ||
| + | * 4.跳转到第二部分代码执行 | ||
| === 2.FPGA PS配置方式介绍 === | === 2.FPGA PS配置方式介绍 === | ||
| * FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。 | * FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。 | ||
| - | * AS模式(active serial configuration mode):FPGA器件每次上电时作为控制器,由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,从配置器件EPCS主动发出读取数据信号,从而把EPCS的数据读入FPGA中,实现对FPGA的编程配置数据通过DATA0引脚送入 FPGA,配置数据被同步在DCLK输入上,1个时钟周期传送1位数据。 | + | * **AS模式**(active serial configuration mode):FPGA器件每次上电时作为控制器,由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,从配置器件EPCS主动发出读取数据信号,从而把EPCS的数据读入FPGA中,实现对FPGA的编程配置数据通过DATA0引脚送入 FPGA,配置数据被同步在DCLK输入上,1个时钟周期传送1位数据。 |
| - | * PS模式(passive serial configuration mode):则由外部计算机或控制器控制配置过程。通过加强型配置器件(EPC16,EPC8,EPC4)等配置器件来完成,EPCS作为控制器件,把FPGA当作存储器,把数据写人到FPGA中,实现对FPGA的编程。该模式可以实现对FPGA在线可编程。在下载配置的时候对于Cyclone II的器件,如EP2C8,在JTAG下载方式对应.sof,AS下载方式对应.jic。 | + | * **PS模式**(passive serial configuration mode):则由外部计算机或控制器控制配置过程。通过加强型配置器件(EPC16,EPC8,EPC4)等配置器件来完成,EPCS作为控制器件,把FPGA当作存储器,把数据写人到FPGA中,实现对FPGA的编程。该模式可以实现对FPGA在线可编程。在下载配置的时候对于Cyclone II的器件,如EP2C8,在JTAG下载方式对应.sof,AS下载方式对应.jic。 |
| - | * JTAG:JTAG是直接烧到FPGA里面的 由于是SRAM,断电后要重烧,AS是烧到FPGA的配置芯片里保存的 每次上电就写到FPGA里。 | + | * **JTAG**:JTAG是直接烧到FPGA里面的 由于是SRAM,断电后要重烧,AS是烧到FPGA的配置芯片里保存的 每次上电就写到FPGA里。 |
| * 在PS方式下,FPGA处于完全被动的地位。FPGA接收配置时钟、配置命令和配置数据,给出配置的状态信号以及配置完成指示信号等。PS配置可以使用altera的配置器件(EPC1、EPC4等),可以使用系统中的微处理器,也可以使用单板上的CPLD,或者altera的下载电缆,不管配置的数据源从哪里来,只要可以模拟出FPGA需要的配置时序来,将配置数据写入FPGA就可以,这里我们使用STM32H750作为FPGA的配置器件。 | * 在PS方式下,FPGA处于完全被动的地位。FPGA接收配置时钟、配置命令和配置数据,给出配置的状态信号以及配置完成指示信号等。PS配置可以使用altera的配置器件(EPC1、EPC4等),可以使用系统中的微处理器,也可以使用单板上的CPLD,或者altera的下载电缆,不管配置的数据源从哪里来,只要可以模拟出FPGA需要的配置时序来,将配置数据写入FPGA就可以,这里我们使用STM32H750作为FPGA的配置器件。 | ||
| * 在上电以后,FPGA会在nCONFIG管脚上检测到一个从低到高的跳变沿,因此可以自动启动配置过程。 | * 在上电以后,FPGA会在nCONFIG管脚上检测到一个从低到高的跳变沿,因此可以自动启动配置过程。 | ||
| 行 119: | 行 130: | ||
| * 在本实验中,因FPGA具有远程升级功能(PS 模式),STM32程序在运行的过程中可以实现对 FPGA 进行程序烧写,以此实现对产品中的固件进行更新升级。本实验中将升级文件存放在 U 盘中,通过移植 ST 官方提供的代码来实现 STM32 对 U 盘中的升级文件的读取,进而更新升级FPGA。原理图如下: | * 在本实验中,因FPGA具有远程升级功能(PS 模式),STM32程序在运行的过程中可以实现对 FPGA 进行程序烧写,以此实现对产品中的固件进行更新升级。本实验中将升级文件存放在 U 盘中,通过移植 ST 官方提供的代码来实现 STM32 对 U 盘中的升级文件的读取,进而更新升级FPGA。原理图如下: | ||
| - | **时序图:** | + | **硬件连接图:** |
| - | {{ :icore4t:icore4t_arm_hal_47_3.png?direct |}} | + | {{ :icore4t:icore4t_arm_hal_47_3.png?direct&550 |}} |
| ==== 四、 实验程序 ==== | ==== 四、 实验程序 ==== | ||