SPI(Serial Peripheral Interface,串行外围设备接口)是一种高速、全双工、同步的通讯总线,在芯片的引脚上只占用4根线,不只节约了芯片的引脚,一起在PCB的布局上还节约空间。正是出于这种简略、易用的特性,现在越来越多的芯片集成了这种通讯协议。
1 SPI装备介绍
1.1 Spantan-3E SPI装备流程
SPI办法是经过契合SPI接口时序的第三方SPI Flash对FPGA进行加载。它合适作为FPGA硬件结构的bit文件保存介质,假如运用软件工程编译后的代码较小,保存在同一片SPI FLash中(即复用SPI Flash)无疑是可行的最廉价计划。
因为本没计软件工程规划较小,所以运用此复用SPI Flash办法对FPGA进行装备,既保存FPGA装备的bit文件,也保存运用软件工程的bit文件。体系在上电或向PROG_B引脚宣布低脉冲后,FPGA芯片经过一个初始化序列清空内部FPGA装备存储器。此序列开端时,DONE和INIT_B引脚均转为低。初始化完结后,INIT_B引脚转为高,并采样芯片的装备方式及变量挑选引脚。
SPI方式下,FPGA对变量挑选(VS[2:0])引脚采样,以承认宣布哪个SPI指令序列。当初始化之后宣布INIT_B信号时,方式引脚和变量挑选引脚都有必要处在正确的逻辑级,以保证正确采样。
在变量挑选引脚挑选SPI指令集之后,FPGA将CSO_B挑选信号置为低,而且开端经过FPGA的CCLK引脚对SPI Flash存储器进行时钟操控。接着宣布8位读指令后跟24位开端地址0x000000和方针指令集的适量虚拟字节。FPGA从地址0开端读取SPI Flash存储器阵列,直到读完所需的装备位数。假如从存储器材读取到有用比特流,则发DONE信号,以指示FPGA装备成功。图1为SPI装备办法的时序。
图1 SPI装备时序
图2是AT45DB161D SPI Flash的装备接口。这种装备办法只占用了FPGA芯片的4个引脚,而且装备成功之后,一切SPI引脚都成为可用的用户I/O引脚,这就节约了FPGA的引脚资源。
1.2 SPI Flash存储器的复用
复用SPI Flash是指既用它来保存硬件装备文件、Bootloader引导程序还用来保存用户运用程序。在加载阶段,FPGA主动从SPI Flash中读取硬件装备bit文件及Bootloader程序进行装备到片内BRAM中运转。当完结加载后,FPGA内部逻辑发动,经过运转的Bootloader程序读取SPI Flash中的用户运用程序,并写到外部SDRAM的相应方位,最终Bootloader程序切换指令指针到SDRAM指定方位,在外部的SDRAM中开端履行运用程序。
图3给出了本体系中复用SPI Flash嵌入式体系结构图,用EDK中的opb_sdram衔接外部SDRAM,用opb_spi衔接SPI Flash(AT45DB161D),经过Bootloader软件程序完结从SPI Flash中仿制用户运用程序到SDRAM中,然后在SDRAM中运转。可是,Boot-loader在体系上电时会经过FP-GA芯片的装备引脚首要加载到BRAM中运转,这样就能够完结上电主动加载发动程序。
2 Bootloader引导程序的规划
在工程代码编写之前要求对硬件器材有所了解,首要需求了解FPGA所需求的装备文件空间,还有Flash存储结构。例如:XC3S500E装备文件空间为2 270 208位,所以要根据它核算存储运用程序的基地址。AT45DB161D是串行接口的闪存芯片,它包含有17 301 504位,被安排为4 096页,每页512/528字节。除了主存储器,AT45DB161D还包含2个SRAM数据缓冲区,每个缓冲区512/528字节。在主存储器正在编程时,缓冲区是答应接纳数据的,而且支撑数据流式写入。(此处为528字节/页)
AT45DB161D的存储器阵列分为3个等级的粒度,分别为扇区、块与页。图4对各个等级进行了剖析,具体说明晰每个扇区与块的页数。一切的编程操作都是针对页的。擦除操作能够作用于芯片、扇区、块或页。
最终运用界说的空函数int(*boot_app_jump) (void);”将地址指针指向内存的运用程序基地址,使其从此处开端运转程序。
//将意图地址赋给跳转函数
boot_app_jump=(int(*)(void))DESTINATION_AD-DR;
//运转跳转函数,使其在该函数地址开端运转程序boot_app_jump();
3 SPI Flash软件引导进程及SPI Flash编程
本试验运用简略的运用程序(打印hello_world),即工程“hello_world”。工程serial_Flash_bootloader便是上面规划的引导程序。
3.1 编译用户运用程序的二进制文件
因为运用程序要在外部SDRAM中运转,所以不需求初始化BRAM存储器,如图5所示。
为了指明程序的开端地址和运用程序的可履行文件的发生途径,需求在编译选项中设置。右键“运用程序工程”,Set Compiler Options在Output ELF file中挑选可履行文件的发生途径,如XC3S500E\hello_world\hello_world.elf,在Program Start Address中键入程序履行的开端地址(这儿是SDRAM的基地址:0x90000000)。接下来编译运用程序工程,编译完结后就会在XC3S500E\hello_world文件夹中发生hello_world.elf。为了后面临SPI Flash编程的需求,应将elf转变成二进制方式的文件。这就需求运用cygwin shell窗口指令来完结,这个脚本供给了一个简略的指令完结这个意图。运用mb-objcopy-O binaryoptions>ELF file input>bi-nary file to output>指令就能够将elf转变成二进制方式的文件(.b文件)。
例如:mb-objcopy-O binary ./hello world/helloworld.elf./hello_world/hello_world.b用来在工程目录下hello_world文件夹创立工程的一个hello_world.b的二进制文件。生成的文件hello_world.b大约2 KB左右。
3.2 Bootloader引导程序与硬件装备文件的生成
serial_Flash_bootloader要初始化到BRAM中(即在“工程”上右键→BRAM Initialization and unmark a11)。
这样做的含义是在编译Bootloader程序时就将它编译后的履行文件(.elf文件)加入到硬件system.bit中生成一个download.bit。这个文件既包含了体系硬件装备信息,又包含了Bootloader程序履行文件。因为设置了初始化到BRAM中,所以在体系上电时才干使Bootloader程序主动加载到片内BRAM中运转,完结程序的引导功用。只需运用EDK用软件中download bitstram功用就能够完结上述功用。
3.3 编写SPI PROM文件
本部分供给为SPI Flash存储器创立PROM文件的辅导准则。在将生成bitstram.bit比特流转化成SPI格局PROM文件之前,规划人员有必要承认该比特流是用bitg-en-g StartupClk:Cclk选项生成的。此选项使发动次序与Spartan-3E内部时钟同步,然后保证FPGA功用正常。
①将硬件装备和serial_Flash_bootloader引导程序的bitstrem.bit转化为MCS格局文件。
②将前面得到的运用程序的二进制文件(hello_world.b)转化为MCS格局文件。
③将以上得到了2个MCS文件组成1个MCS文件。
④编程SPI Flash芯片。
以上进程,除了③以外,Xilinx公司的iMPACT编程软件都能够完结。③要由DOS指令完结。所以下面都是以DOS指令来完结编程的全进程。
再运用DOS指令完结格局化和编程之前,要对down-load.bit、运用程序、spiPartNam和spi_offset参数进行设置,以便XSPI软件程序能对用户要求加以辨认。如下:
set bitstream=../implementation/download.bit
set application=hello_world
set spiPartName=AT45DB161D//SPI Flash器材的称号
set spi_offset=0x63000//hello_world的运用程序就会从
//Flash中0x63000地址向上寄存,引导程序也是从这儿开端加载
//到SDRAM中的
接下来便是履行转化的指令。
第1步:REM Step 1.Convert download.bit to mcsimpact convert_bits_to_mcs.cmd
此指令将硬件装备和serial_Flash_bootloader引导程序的bitstrem.bit转化为MCS格局文件。
第2步:REM Step 2.Convert binary application tomcs
xmcsutil-accept_notice-i%application%.b-o%appli-cation%.mcs-29
完结了运用程序(hello_world)的二进制文件(hello_world.b)转化为MCS格局文件。
第3步:REM Step 3.combine application mcs withbitstream mcs
xmcsutil-accept_notice-i bitstream.mcs%applica-tion%.mcs-o combined.mcs-16-segaddr 0x00%spi_off-set%-usedataaddr-padff
这个指令将以上得到了的MCS文件组成一个MCS文件。
第4步:REM Step 4.Program the AT45DB161D
xip-accept_notice-skip_syncword_check-mcs-spi_epv-icombined.mcs-o verify.txt-select_cable 1
完结对SPI Flash芯片编程。此指令运用轮询擦除SPI内容,然后对SPI器材的内容进行编程和验证。任何验证不匹配项都记录在result.out文件中。默许情况下,XSPI确定数据是HEX格局。假如输入文件是HEX格局,则去除-mcs选项。
Xilinx软件东西iMPACT从Spartan-3E比特流生成SPI格局PROM文件。SPI存储器材首要串行输出数据的MSB字节,而Xilinx PROM则首要输出数据的LSB。与规范Xilinx PROM文件比较,SPI格局PROM文件在每字节内有位回转,因而,需求在PROMgen中运用-spi选项才干正确格局化。XSPI支撑.hex和.mcs两种SPIPROM文件格局。以下所示为生成SPI格局.mcs文件的PROMGen指令行操作的示例。要生成SPI格局PROM文件.hex,请用-P hex替换-p mcs选项开关。
结 语
本文介绍的是SPI Flash存储器的复用编程办法的完结。在运用程序不是很大时,能够运用此办法复用SPI Flash存储器,削减外围电路,可是装备时刻较长。在不要求装备时刻的基础上,能够考虑运用SPI装备方式。