基于atlys开发板的bootloader程序代码分析.docx
- 文档编号:30105873
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:25
- 大小:803.96KB
基于atlys开发板的bootloader程序代码分析.docx
《基于atlys开发板的bootloader程序代码分析.docx》由会员分享,可在线阅读,更多相关《基于atlys开发板的bootloader程序代码分析.docx(25页珍藏版)》请在冰豆网上搜索。
基于atlys开发板的bootloader程序代码分析
实验二:
bootloader引导程序
一、Bootloader的原理
先来说明一下什么是Bootloader。
简单地说,BootLoader就是在应用程序运行之前运行的一段小程序。
系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
通过这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为调用应用程序准备好正确的环境,并同时提供基本输入、输出系统监控功能和程序调试功能。
在我们Atlys的FPGA开发板上,SPIFlash既用来保存硬件配置文件及Bootloader引导程序还需要用来保存用户的应用程序。
在加载阶段,FPGA自动从SPIFlash中读取硬件配置bit文件及Bootloader程序进行配置到片内BRAM中运行。
当完成加载后,FPGA内部逻辑启动,通过运行Bootloader程序读取SPIFlash中的用户应用程序,并写到外部DDR2的相应位置,最后Bootloader程序切换指令指针到应用程序开始运行的指定位置,在外部的DDR2中开始执行应用程序。
下图给出了本系统中复用SPIFlash嵌入式系统结构图,Bootloader软件程序实现从SPIFlash中复制用户应用程序到DDR2中,然后在DDR2中运行
二、Bootloader引导程序的设计
工程代码编写之前要求对硬件器件有所了解,主要需要了解FPGA所需要的配置文件空间,还有Flash存储结构。
在本Atlys开发板中,SPIFLASH的容量为16M,存储空间为从0x00000到0xFFFFFF。
其中Spartan6的配置文件大小为12Mbits,所以配置文件占用SPIFLASH的存储空间为从0x00000到0x17FFFF。
剩余的FLASH存储空间用来存放应用程序代码。
为了简单起见,在本实验中我们可以把应用程序的代码放置在0x200000到0xFFFFFF的SPIFLASH空间里。
因为在本实验里bootloader的主要功能是从SPIFLASH中拷贝应用程序的代码到DDR2SDRAM中,再将地址指针指向内存的应用程序基地址,使其从此处开始运行程序。
应用程序是以SREC文件格式存储在SPIFLASH中的,在这里我们首先需要了解一下SREC文件格式。
ØSREC文件格式
SREC格式是一种FLASH格式的编程文件,全称S—record,SREC格式是Motorola公司制定的一种烧写格式标准。
SREC文件是描述地址与数据的文件,以下给出了SREC文件的具体格式.
一个完整的MOTOROLAS-Record格式数据包含如下区域:
各字段的意思分别如下:
标示记录的类型,该字段占据1-byte。
它可以有如下数值:
“S0”,“S1”,“S2”,“S3”,“S5”,“S7”,“S8”,“S9”。
“S0”--记录描述信息
“S1”,“S2”,“S3”--记录存储的数据。
这三者的区别在于地址
(address)的长度不同,S1为2-byte,S2为3-byte,以及S3为4-byte。
“S5”--包含了“S1”,“S2”,“S3”的信息。
“S7”,“S8”,“S9”--确定程序的开始地址。
这三者的区别也在于(address)
的长度不同,S9为2-byte,S8为3-byte,以及S7为4-byte。
标示了数据的长度,确切地说,是
,和该字段占据1-byte。
:标示了数据写入的起始地址。
该字段的长度取决于
:
标示了存储的数据。
该字段占据的byte个数可以这样计算:
标示校验位,占据1-byte。
该数据可以由
和的数据累加然后每bit取反获得。我们以一条数据记录格式作为例子:
S30A801000930300000000CF
S3是记录的格式(
0A是长度(
因为两个十六进制才是1-byte,所以801000930300000000CF的长度为10而不是20.换句话说,这数据列应该如此表示:
801000930300000000CF。
因为type是S3,所以地址(
)占4-byte,因此需要写入的地址为:0x80100093。
既然已经知道了地址,那么数据()很显然就是0x0300000000了。
最后的1-byte就是校验位(
例子数值由此得来:
0xFF-((0x0A+0x80+0x10+0x00+0x93+0x03+0x00+0x00+0x00+0x00)&0xFF)
三、硬件平台的搭建
步骤一:
步骤二:
一直点击下一步,默认设置就可以直到出现
选择microblaze的LocalMemory为最大的64kb
步骤三:
点击下一步,出现为处理器Microblaze选择外围设备,选择如下:
步骤四:
设置spi_flash接口参数
设置参数如下:
参数代表的含义:
IncludebothReceiverandTransmitterFIFOs这是代表是否SPI接口包含接收FIFO寄存器,这里选择包含TRUE
RatioofPLBClockFrequencyToSCKFrequency代表SPI接口和SPIFLASH的时钟sck周期是PLB时钟的几倍,这里选择4倍。
NumberofSPItransferbits:
代表SPI接口一次传输数据的位数,这是选择8位。
TotalNumberofSlaveSelectBitsinSSVector:
代表从设备SLAVE的个数,这里只有一个设备,所以选择1.
步骤五:
修改有关SPI接口连接的MHS和ucf文件
mhs文件修改:
将xps_spi的端口连接修改为如下:
PORTSCK_O=Flash_SPI_SCK_O
PORTMISO_I=Flash_SPI_MISO_I
PORTMOSI_O=Flash_SPI_MOSI_O
PORTSS_O=Flash_SPI_SS_O
关于spi接口顶层连接修改成如下:
PORTfpga_0_SPI_FLASH_SCK_pin=Flash_SPI_SCK_O,DIR=O
PORTfpga_0_SPI_FLASH_MISO_pin=Flash_SPI_MISO_I,DIR=I
PORTfpga_0_SPI_FLASH_MOSI_pin=Flash_SPI_MOSI_O,DIR=O
PORTfpga_0_SPI_FLASH_SS=Flash_SPI_SS_O,DIR=O
将UCF文件关于SPI接口的连接修改为如下:
Netfpga_0_SPI_FLASH_SCK_pinLOC=R15|IOSTANDARD=LVCMOS33;
Netfpga_0_SPI_FLASH_MISO_pinLOC=R13|IOSTANDARD=LVCMOS33;
Netfpga_0_SPI_FLASH_MOSI_pinLOC=T13|IOSTANDARD=LVCMOS33;
Netfpga_0_SPI_FLASH_SSLOC=V3|IOSTANDARD=LVCMOS33;
四、bootloader程序的编写
前导步骤:
正如先前建立led灯应用工程一样
在SDK的开发环境里,我们在这里为Bootloader新建一个工程,操作方式如下图所示,菜单File→New→XilinxCProject
在工程向导界面,红圈1处输入项目名称,我将其修改为bootloader,红圈2处选择SRECBootloader工程模版。
完成工程向导。
回到开发环境后在工程窗口会出现bootloader的工程目录:
因为我们要编写的是SPIFLASH的bootloader引导程序,跟用SDK的bootloader模版生成的有些不同。
所以需要在工程里添加SPIFLASH相关的.c程序和.h头文件,并删除一些不需要的程序文件。
添加和删除后的程序文件如下:
三、SPIFLASH的PROM文件生成和下载
在这一节,我们需要把FPGA的硬件比特流配置文件和应用程序的代码合并成一个SPIFlash的下载文件。
在这里我们需要做以下几个步骤来实现:
1.把应用程序转换为srec代码格式文件。
2.把bootloader程序初始化到Microblaze系统的BRAM中,再生成FPGA最终的比特流配置文件download.bit。
3.合并这两个文件(download.bit和应用程序的srec文件)为一个SPIFLASH下载的MCS文件。
4.下载MCS文件到SPIFLASH中。
下面我对上面的这四个步骤逐一做一个讲解:
Ø把应用程序转换为srec代码格式
把LED测试程序转换成Srec格式方法如下:
在SDK软件开发环境选择菜单XilinxTools->ProgramFlash
在弹出的ProgramFlashMemory对话框的ImageFile一栏中选择hello_led\Debug目录下的hello_led.elf文件,再选中”ConvertELFtobootloadableSRECformatandprogram”。
在Console窗口会显示生成srec文件的信息及其放置的目录。
Ø把bootloader程序初始化到Microblaze系统的BRAM中,再生成FPGA最终的比特流配置文件。
在EDK开发环境选择菜单Project->SelectElfFile....。
在弹出的SelectElffile对话框的ChooseImplementationElfFile一栏中选择bootloader\Debug目录下的bootloader.elf文件,再选OK完成。
这时bootloader程序已经加到BRAM中,我们需要在EDK重新生成硬件比特流文件。
选择EDK菜单的DeviceCinfiguration->UpdateBitstream开始生成download.bit下载文件。
生成完成后的信息在Console窗口显示如下:
其中这个生成的download.bit文件是存放在EDK工作目录的implementation的文件夹里。
Ø合并这两个文件(硬件比特流文件和应用程序的srec文件)为一个SPIFLASH的下载文件。
打开XilinxISEDesignSuite14.2\ISEDesignTools\Tools下的iMPACT,打开后显示如下界面:
选择PrepareaPROMFile这一项后点击OK。
再在下图弹出的PROMFileFormatter界面中的三个Step依次选择如下
图中的3为输入将要生成PROM的文件名,我这里已经把它改名为bootloader上图的4处要选Yes,因为除了硬件配置文件外,我们还要添加LED测试的应用程序代码。
点击OK后弹出AddDevice文件的消息窗口,直接点击OK。
在之后弹出的AddDevice文件的窗口选择我们前面在EDK中生成的download.bit文件,再点击"打开"按钮。
在之后弹出的AddDevice文件的消息窗口,直接No。
在之后弹出的AddData文件的消息窗口,选择Yes。
在之后弹出的Revision窗口输入我们需要放置Data文件的起始地址,根据硬件的配置文件大小为1.5Mbyte。
为了方便起见我们把应用程序的代码放置在起始地址为0x200000的地方。
在之后弹出的AddData文件的窗口选择我们前面在SDK中生成的应用程序的srec格式文件,点击“打开”按钮。
在之后弹出的AddData文件的消息窗口,选择No。
程序会弹出FLASHROM的地址分配列表,这里不需要修改,点击OK完成。
双击ISEiMPACT左边iMPACTProcesses界面的“GenerateFile...”,生成MCS文件。
MCS文件生成成功后在界面会显示“GenerateSucceeded”的信息。
Ø编程MCS文件到SPIFLASH中
如果你已经连接了下载器。
我们可以使用ISEiMPACT来检测一下JTAG的连接,双击iMPACTFlows界面下的BoundaryScan选项:
再在BoundaryScan界面上右击鼠标,选取InitializeChain选项:
如果出现以下的界面说明已经检测到JTAG链路上的FPGA芯片。
选择对话框的No按钮:
双击下图红圈处的SPI/BPI接口,添加SPIFLASH的编程文件,
在弹出的AddPROMFile窗口选中我们刚刚生成的Boot_Led_Test.mcs文件,.然后点击打开:
在弹出的SelectAttachedSPI/BPI界面中选择正确的SPIFLASH型号N25Q128,然后点击OK.
现在界面上FPGA的SPI接口上会出现FLASH的图示:
我们只要选中FLASH图标,然后右击选择Program
在接下来弹出的DeviceProgrammingProperties窗口中直接点击OK,软件就会自动对SPIFLASH进行编程了
在界面中就可以看到烧写进度了,稍等一会速度很慢,大概需要5-10分钟。
烧写完毕后,弹出如下界面,说明Boot_Led_Test.mcs文件就成功编程到SPIFLASH中了。
至此,SPIFLASH烧写完毕。
关电重新启动目标板,电压正常后,FPGA开始从SPIFLASH读出配置数据,完成FPGA的配置。
然后hello_led的应用程序开始运行。
现在你就可以看到开发板上的LED灯已经在做跑马运动了。
到这里Bootloader的实验就讲完了。
大家可以试试用这个bootloader程序来引导用户自己编写的应用程序。
如果大家已经完全按照我前面所讲的来开发的话是肯定没有问题的,如果发现自己编写的Bootloader程序有问题,大家也可以在SDK开发环境对Bootloader程序进行执行和调试。
查找原因。
最后总结一下,编写Bootloader首先要了解Srec文件的格式,然后需要把编写好的bootloader程序放置到Microblaze系统得BRAM中,并重新Update一个硬件配置比特流文件。
再与转成srec格式应用程序合并为一个MCS下载文件。
最后把这个MCS文件下载到SPIFLASH中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 atlys 开发 bootloader 程序代码 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)