FPGA在线升级实战应用篇(2)

前言

在此之前的在线升级篇已经介绍了在线升级的原理,FPGA的在线升级能够解决运营过程中可能需要根据应用需求只需更改固件而无需物理更换芯片问题。对于不同需求应用都能得到良好的解决,从而满足更新的应用。在产品设计中考虑成本可以选择本地升级,只需要开发本地软件,本设计采用USB接口按照自定义的协议对FPGA固件进行升级。

一、在线升级系统设计

本系统设计采用xilinx FPGA +MFC通过USB进行数据传输,达到升级效果。在设计烧写文件时,我们当然认为已经对DOWN文件是熟悉的,在此再繁琐的介绍下:
(1)Bitstream(bit):Bitstream是一种二进制文件格式,用于存储FPGA的配置信息。它包含了FPGA逻辑元件的连接和功能等详细信息,以及配置所需的时序和逻辑设置。Bitstream文件通常由FPGA开发工具生成,并通过不同的配置方式(如JTAG、SPI等)加载到FPGA中。
(2)Binary(bin):Binary也是一种二进制文件格式,但与Bitstream不同,它通常是指纯粹的二进制数据文件,没有特定的FPGA配置结构。在某些情况下,可以将FPGA的配置数据导出为二进制文件,这样可以方便地进行备份、传输或其他处理。
(3)MCS(Motorola S-record):MCS是Motorola S-record文件的缩写,是一种常见的文本文件格式(ASCII文件),用于存储数据和程序代码。在FPGA领域,MCS文件通常用于存储FPGA的配置数据。MCS文件包含了地址、数据和校验等信息,可以用于直接编程或烧录FPGA。
应用中的基本框架还是比较简单,设计中MFC实现数据传输上位机编写,通过USB驱动将FPGA烧写的配置文件下发至FPGA版本内部RAM中,然后通过内部SPI擦写模块对FLASH进行擦写。通过简单的握手完成升级通信。
在这里插入图片描述

二、FPGA设计

采用xilinx FPGA 设计搭载QUAD_SPI block design方式,方便可灵活更改和调试。当然大家也可以使用逻辑去实现FLASH端的SPI的编程,HOST端一次传输FIFO深度大小的数据,满足一定条件后HOST端再次请求发送数据,直到完成整个配置文件数据的传输。采用USB3.0相对于串口当然提高了升级效率,在设计中也可以设计成选择不同的接口。
在这里插入图片描述

三、应用设计

(1)创建工程
新建MFC应用程序之后,需要在项目属性里添加调用动态链接库路径如图所示。
1)将USB库及其他库文件拷贝到工程目录下,然后右键弹出菜单中点击“工程属性”,将dll添加到工程中。然后在附加包含目录中,在附加库路径中输入用到链接库文件路径。
在这里插入图片描述

2) 在需要用到 SDK 的地方,包含头文件。


// UpdataContrlDlg.h : 头文件
//

#pragma once
#include "Driver_app.h"
#include "afxcmn.h"
#include "afxwin.h"
#include "CPCIAcquisitionCard.h"
// CUpdataContrlDlg 对话框
class CUpdataContrlDlg : public CDialogEx
{
   
// 构造
public:
	CUpdataContrlDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_UPDATACONTRL_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;
	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedButtonReadFile();
	afx_msg void OnBnClickedButtonStart();
	afx_msg void OnBnClickedButtonOpen();
	afx_msg void OnBnClickedButtonClose();
	DWORD static WINAPI processThread(LPVOID lpParam);
	DWORD static WINAPI processThread2(LPVOID lpParam);
	CProgressCtrl m_MyProgress;
	int m_MyProCount;
	void OnProgressShow(int MyProCount);
	CComboBox m_SelectDevice;
	LRESULT ShowProgramPercent(WPARAM a_wParam, LPARAM a_lParam);
	CComboBox m_FlashIndex;
};

3)实现配置文件拷贝到及执行文件传输线程。

DWORD WINAPI CUpdataContrlDlg::processThread(LPVOID lpParam)
{
   
	CUpdataContrlDlg *dlg = (CUpdataContrlDlg *)lpParam;
	long re_size = statbuf.st_size;
	unsigned int step = floor
在实际工程应用中,我们时常会遇到为解决某个老产品的BUG,需要在工程现场更新设备的FPGA代码,或者参加电信测试时需要现场升级设备FPGA程序以便于调试。公司现阶段所用的Altera FPGA程序代码一般存放于芯片配套的FLASH存储器中,而常见的对印制板上FLASH编程有几种方法,原始的方法是使用编程器,这种方法需要要将芯片取下,十分不便,或者通过JTAG接口连接到PC机上,但需要专用下载软件(一般由芯片生产厂商提供)。在测试现场或调测机房现场,要找到FPGA的专用下载线是比较困难的,且Altera FPGA的专用下载软件并不是每个PC设备上都有的。有时仅为了更新一个FPGA的程序就需要研发或客服人员亲自到现场去烧写程序,这既不便捷,也使得设备维护成本大大增加。  经过可行性与成本的考虑,我们找到一种既方便实用又低成本的方法来实现FPGA程序的在线升级。即在MCU中(单片机或ARM均可)用软件来模拟XModem协议,将程序文件传输到FPGA的FLASH中。这种方法使用WINDOWS自带的超级终端软件来传送文件,无需安装专用软件,硬件支持仅需要一根通用串口线,只要在目标板MCU上增加一段实现XModem协议传输的代码,就可以方便的实现FPGA程序下载了。这种特点不仅方便了客服人员,也给研发和生产人员在现场调试和软件升级、修改中带来极大方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值