atlys开发板之SPI FLASH实验.docx
《atlys开发板之SPI FLASH实验.docx》由会员分享,可在线阅读,更多相关《atlys开发板之SPI FLASH实验.docx(25页珍藏版)》请在冰点文库上搜索。
atlys开发板之SPIFLASH实验
ATLYS开发板之SPIflash实验
通过本篇,您可以了解到如何在MicroBlaze系统中实现对SPIFLASH的擦除和读写及校验的方法。
一、简介
本开发板上使用了ST公司的8MbitSPI串行接口的FLASH,芯号为N25Q128。
SPI的接口速率最大可以达到108Mhz。
FLASH的容量由256个Sector组成,每个Sector有256个Page,每个Page有256个byte。
所以总共为16777216个byte。
N25Q128的擦除方法有两种,一种为Bulk(128Mbit)擦除,一种为Sector(512Kbit)擦除。
N25Q128的编程方法为Page编程,一次可以写入256字节。
FPGA通过命令的方式对N25Q128进行操作,不管是读,编程,擦除或其它操作首先在第一个字节要对N25Q128写入命令号。
根据命令格式的不同,有些命令后面不跟地址和数据,有些命令后面需要输出地址或数据,有些命令命令后面既需要地址又需要数据。
以下是N25Q128所支持的命令
具体细节信息,请查看DATASHEET。
二、SPIFLASH硬件设计
1.电路设计
FPGA和N25Q128的硬件连接非常简单,只有四跟线SPIFLASH的片选信号CS,SPI的时钟信号SCK,FLASHFLASH数据写入信号SDI和数据读出信号SDO。
步骤一:
打开XPS的BSB向导,选择工程要存放的位置和PLB总线类型,以及指定板级支持包的路径,点击OK。
步骤二:
一直点击下一步,默认设置就可以直到出现
选择microblaze的LocalMemory为最大的64kb
步骤三:
继续点击下一步出现让你选择处理器外围设备,选择如下
步骤四:
继续点击next直到完成BSB向导。
设置参数如下:
参数代表的含义:
IncludebothReceiverandTransmitterFIFOs这是代表是否SPI接口包含接收FIFO寄存器,这里选择包含TRUE
RatioofPLBClockFrequencyToSCKFrequency代表SPI接口和SPIFLASH的时钟sck周期是PLB时钟的几倍,这里选择4倍。
NumberofSPItransferbits:
代表SPI接口一次传输数据的位数,这是选择8位。
TotalNumberofSlaveSelectBitsinSSVector:
代表从设备SLAVE的个数,这里只有一个设备,所以选择1.
步骤五:
修改MHS和ucf文件
将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
顶层连接修改成如下:
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文件修改为如下:
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;
三、SPIFLASH软件设计
为FLASH测试新建一个工程,操作方式如下图所示,菜单File→New→XilinxCProject
在工程向导界面,红圈1处输入项目名称,我将其修改为hello_flash,红圈2处选择Hello_World工程模版。
点击下一步选择createanewboardsupportpackageproject.
点击Finish,完成工程向导。
回到开发环境后在工程窗口会出现hello_flash的工程目
录。
到这一步,hello_flash的软件工程已经建好了,接下去我们来编写SPIflash的测试软件程序。
首先我们先对helloworld.c重命名为为hello_flash.c,再添加两个.c源程序,一个是SF_commands.c,另一个为xps_spi_drives.c。
再添加两个.h头程序,一个为SF_commands.h,另一个为xps_spi_drives.h。
下面我们来编写SPIFLASH的测试程序。
我们先来编写hello.flash.c的程序代码。
在这个程序里完成对SPIFlash的擦
除,编程和读取验证。
如果读取的数据和编程的数据一致,返回ok。
编写好的
程序如下:
Hello.flash.c
再来编写SF_commands.c和SF_commands.h的程序代码。
在SF_commands.c的程序中编写了SPIFLASH的一些操作函数。
修改好的SF_commands.c程序如下图所示:
SF_commands.c
在SF_commands.h头文件中定义SF_commands.c中的函数及使用的一些常量。
修改好的SF_commands.h文件如下图所示:
SF_commands.h
再编写xps_spi_drives.c和xps_spi_drivers.h的程序代码。
在SF_commands.c的程序中编写了SPIFLASH的一些操作函数。
修改好的程序如下图所示:
xps_spi_drives.c
在xps_spi_drivers.h头文件中定义xps_spi_drivers.c中所调用的一些常量和函数。
编写好的xps_spi_drivers.h文件如下图所示:
xps_spi_drives.h
程序修改完成后我们就可以来调试运行了,运行之前先保存工程,SDK会自动编译一遍。
因为我们要printf函数输出到串口的terminal中去,所以我们首先要安装串口驱动。
如何下载驱动并且安装参考手册。
安装好驱动后,知道用的是COM4口
下面我们来调试程序的运行:
BecausethisisanFPGA,youmustconfigureitwithabitstreamthatloadsadesignintothe
FPGA.Inthiscase,thedesignisanembeddedprocessorsystem.
1.InSDK,selectXilinxTools>ProgramFPGA.
Thebitstream(BIT)andblockmemorymap(BMM)filesareautomaticallypopulated
foryou.
2.ClickProgram.WhentheProgrammingcompletes,yourFPGAisconfiguredwith
yourdesign.
Atthispoint,youhavedownloadedthebitstreamtotheFPGAandinitializedthe
microprocessorwithasingle-instruction“branch-to-itself”programcalled
“bootloop.”Bootloopkeepstheprocessorinaknownstatewhileitwaitsforanother
programtobedownloadedtorunorbedebugged.
3.IntheProjectExplorer,underhello_world_0>Binaries,right-click
hello_world_0.elfandselectDebugAs>LaunchonHardware.
Theexecutableisdownloadedtothehardwarewherespecifiedinthelinkerscript.
Adialogboxmightappear,informingyouthattheperspectiveisabouttochangefrom
C/C++toDebug.SelecttheRemembermyDecisioncheckboxandclickYes.The
DebugPerspectiveopens.
4.Openaterminalemulationprogramandsetthedisplayto9600baud,8bitdata,1stop
bit.BesuretosettheCOMporttocorrespondtotheCOMportthattheSiliconLabs
driverisusing.
5、ExecutethecodebyclickingtheResumebuttonorpressingF8onyourkeyboard。
等一会terminal1会输出如下
SPIFLASH的测试实验就讲完了。
本实验主要讲解如何在MicroBlaze系统中使用SPI控制器及对SPIFLASH的擦除,编程,读取的操作。