在工程代码编写之前要求对硬件器件有所了解,主要需要了解FPGA所需要的配置文件空间,还有Flash存储结构。例如:XC3S500E配置文件空间为2270208位,所以要根据它计算存储应用程序的基地址。AT45DB161D是串行接口的闪存芯片,它包含有17301504位,被组织为4096页,每页512/528字节。除了主存储器,AT45DB161D还包括2个SRAM数据缓冲区,每个缓冲区512/528字节。在主存储器正在编程时,缓冲区是允许接收数据的,并且支持数据流式写入。(此处为528字节/页)
AT45DB161D的存储器阵列分为3个级别的粒度,分别为扇区、块与页用flash实现链接跳转。图4对各个级别进行了分析,详细说明了每个扇区与块的页数。所有的编程操作都是针对页的。擦除操作可以作用于芯片、扇区、块或页。
最后利用定义的空函数int(*boot_app_jump)(void);”将地址指针指向内存的应用程序基地址,使其从此处开始运行程序。
//将目的地址赋给跳转函数
boot_app_jump=(int(*)(void))DESTINATION_AD-DR;
//运行跳转函数,使其在该函数地址开始运行程序boot_app_jump();
3SPIFlash软件引导过程及SPIFlash编程
本实验使用简单的应用程序(打印hello_world),即工程“hello_world”flash跳转软件 。工程serial_Flash_bootloader就是上面设计的引导程序。
3.1编译用户应用程序的二进制文件
由于应用程序要在外部SDRAM中运行,所以不需要初始化BRAM存储器,如图5所示。
为了指明程序的开始地址和应用程序的可执行文件的产生路径,需要在编译选项中设置。右键“应用程序工程”用flash实现链接跳转,SetCompilerOptions在OutputELFfile中选择可执行文件的产生路径,如XC3S500E\hello_world\hello_world.elfFLASH跳转生成器 ,在ProgramStartAddress中键入程序执行的起始地址(这里是SDRAM的基地址:0x90000000)。接下来编译应用程序工程,编译完成后就会在XC3S500E\hello_world文件夹中产生hello_world.elf。为了后面对SPIFlash编程的需要,应将elf转变成二进制形式的文件。这就需要利用cygwinshell窗口命令来完成,这个脚本提供了一个简单的命令实现这个目的。利用mb-objcopy-Obinaryoptions>ELFfileinput>bi-naryfiletooutput>命令就可以将elf转变成二进制形式的文件(.b文件)。
ELFfileinput>bi-naryfiletooutput>命令就可以将elf转变成二进制形式的文件(.b文件)。
bi-naryfiletooutput>命令就可以将elf转变成二进制形式的文件(.b文件)。
命令就可以将elf转变成二进制形式的文件(.b文件)。
例如:mb-objcopy-Obinary./helloworld/helloworld.elf./hello_world/hello_world.b用来在工程目录下hello_world文件夹创建工程的一个hello_world.b的二进制文件。生成的文件hello_world.b大约2KB左右用flash实现链接跳转 。
3.2Bootloader引导程序与硬件配置文件的生成
serial_Flash_bootloader要初始化到BRAM中(即在“工程”上右键→BRAMInitializationandunmarka11)。
这样做的意义是在编译Bootloader程序时就将它编译后的执行文件(.elf文件)加入到硬件system.bit中生成一个download.bit。这个文件既包含了系统硬件配置信息,又包括了Bootloader程序执行文件。由于设置了初始化到BRAM中用flash实现链接跳转 ,所以在系统上电时才能使Bootloader程序自动加载到片内BRAM中运行,实现程序的引导功能。只要利用EDK用软件中downloadbitstram功能就可以实现上述功能。
上一篇:国内主流开源建站软件盘点
文章地址:https://www.tianxianmao.com/article/other/Bootloaderydcxdsj.html