赞
踩
如果发送方正常传输完全部数据,需要结束传输,正常结束需要发送方发送EOT字节通知接收方,接收方回以ACK进行确认。虽然数据包是以SOH来标志一个信息包的起始的,但在SOH位置上如果出现EOT则表示数据传输结束,再也没有数据传过来。当然接收方也可强制停止传输,当接收方发送CAN字节给发送方,表示接收方想无条件停止传输,发送方收到CAN后,不需要再发送EOT确认。XModem协议相关控制字符含义详见附录1。
三.Altera FPGA在线升级的硬件实现
Altera FPGA用JTAG在AS模式下的程序烧写,是先将程序文件*.pof下载到芯片的FLASH中存储起来,每次重新上电后,程序文件会重新由FLASH载入到FPGA芯片中。Altera FPGA常用FLASH芯片为EPCS1和EPCS4,这两个FLASH芯片除了容量不一样,其他方面几乎完全相同,在引脚上也完全兼容。
图2 FPGA AS模式烧写硬件连接图
图2所示为FPGA用JTAG在AS模式下烧写程序文件的硬件连接图。我们需要用MCU模拟AS模式的硬件操作方式,通过XModem协议,将FPGA代码文件传输到FLASH中。
AS模式烧写FPGA时,与7个信号相关,其中DATA、DCLK、nCS、ASDI是FLASH的四个SPI信号,分别代表FLASH的数据输出、读写时钟、片选、数据输入。MCU也需要通过这四个引脚,将数据传输到FLASH中去。另外三个信号CONF_DONE、nCONFIG、nCE分别是烧写FLASH时,需对FPGA进行控制的三个信号。
nCE为FPGA的芯片使能信号,nCONFIG为低电平时复位FPGA的信号,CONF_DONE为FLASH载入到FPGA完成信号。在AS烧写模式,nCONFIG=0, FPGA复位,nCE=1,使FPGA芯片不被选中,CONF_DONE=0,下载开始;下载结束时,nCONFIG=1,nCE=0,进入代码由FLASH到FPGA的载入过程,当载入完毕后,CONF_DONE=1。
在对FLASH读写时,需要注意的是,EPCS1/EPCS4区别于一般的FLASH,有其自身对应的操作码,不同的操作码代表对FLASH进行不同的操作。如表1所示,有写使能、写禁止、读芯片状态、读字节、读芯片ID、写芯片状态、写字节、擦除整片、擦除片区这几个操作码。对EPCS1/EPCS4进行任何操作,都需在片选变低后,首先写入对应的操作码,然后是地址和数据。此外,在写字节、写状态、片区擦除、整片擦除之前必须要先进行写使能操作。上电、写字节、写状态、片区擦除、整片擦除完成后需要进行写禁止操作。
表1 EPCS1/EPCS4操作码
四.MCU中的软件实现
1. 软件流程
在MCU软件实现FPGA在线升级的过程中,除了对FLASH的读写,最主要的部分是通过模拟XModem协议,将文件传输到FLASH中。整个传输过程需同时遵循XModem传输逻辑以及EPCS1/EPCS4的读写规则。软件流程如图3所示:
(1)将*.pof文件用UltraEdit编译软件打开,如图4所示,在QuartusⅡ生成的*.pof烧写文件中,最前面一段是Quartus的版本等与代码无关的信息,可将图4中红色方框部分删除,直到第一行全‘FF’开始之前,将第一行全‘FF’为代码的起始行。
图4 *.pof烧写文件起始
(2)如图5所示,*.pof文件中,可用代码结束后,是大片的全‘FF’无用代码。可将这些全‘FF’保留15~20行,以保证XModem传输128字节的完整性,将其余多余的全‘FF’全部删除。
图5 *.pof烧写文件结束
(3)将无效代码删除后,可将新文件按自定义命名,‘另存为’后缀*.bin的文件即可。
3. 反相传输
我们通常的读写习惯或SPI的读写大多是由字节的MSB开始,LSB结束。按照此种方式对Altera FPGA的FLASH进行XModem传输,传输成功后,FPGA确并没有启动。通过将用JTAG烧写到FLASH的代码用编程器读出,我们发现了问题所在。
图6、图7所示为同一序列段代码的截取,图6为QuartusⅡ生成的*.pof烧写文件的代码,图7为通过烧片器从FLASH中读出的代码。通过观察,我们不难发现,这两段代码中的每一个字节均是互为反向的,即MSB与LSB的位置是相反的。
在将FLASH进行XModem的传输中改为由LSB开始传输,传输完成后,FPGA运行正常。因此,我们需要注意,在对EPCS1/EPCS4进行XModem传输时,应先从LSB开始,MSB结束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。