ADSP-BF531的SPI FLASH BOOT
昨天写这篇文章写的差不多的时候,改了Windows Explorer的文件夹选项,气愤的是IE居然也跟着刷新了,我写的还没有保存……今天重新来。
到昨天为止,我毕设的几个关键技术的研究,包括超声测距、无刷电机驱动、ARM+FPGA控制器和ARM Linux还有FPGA的驱动、嵌入式图像处理、无线通信模块(这个是我师弟做的)基本上都完事了。最麻烦的是图像处理这块,花了我老师1万多块钱,呵呵,我比较能造。板子做了2次,第一次3700元,4层PCB+摄像头的FPC,不好使;第二次6400元,4层PCB+摄像头的软硬结合FPC,终于好使。还有开发板、芯片什么的3000多,好在我们机器人所有钱哈哈。由于花钱太多,ADSP-BF531/532/533+CMOS摄像头嵌入式图像处理这块是不能写在这里了,如果有需要,可以和我们研究室联系(我要毕业了,但是研究室马上会申请专利,0451-86414462-22,李老师)。
今天要写的是嵌入式图像处理部分的最后10cm的工作,将程序写入SPI Flash,并且Boot。其实这个部分挺麻烦的,我看了很多资料,也没有成功Boot。感谢http://bbs.21ic.com上id为yqyte的这位大虾的帖子http://bbs.21ic.com/club/bbs/list.asp?boardid=51&t=2269103,帮助我越过了最后1cm的障碍。
开始正文。SPI Flash Boot是ADSP-BF531/532/533一个很好的功能,这可以大大减小电路板的体积。目前可以使用在BF531/532/533上的SPI Flash至少可以达到2M Bytes,对于一般的Linux系统来说也够了。但是SPI Flash的速度还是比较慢的,启动加载需要比较长的过程,这点需要注意。
要实现SPI Boot,你必须要看的文档有:ADSP-BF533 Blackfin? Processor Hardware Reference(3 OPERATING MODES AND STATES->Booting Methods和18 SYSTEM DESIGN->Booting the Processor),VisualDSP++ Help(Loader and Utilities Manual)。阅读了这些,加上yqyte大虾的帖子,基本上就知道怎么设计硬件和怎么SPI Boot了。但是,SPI Flash烧写驱动还是个问题,一般的开发板如果支持SPI Boot都会带有SPI烧写驱动;如果你和我一样买的是个劣质的便宜货,没有这个驱动也不要紧,我下面会介绍。
从头说起吧:
1. ADSP-BF531/532/533支持如下几种Boot方式:
A. 外部非同步存储器直接启动,启动地址0x20000000,要求管脚BMODE[1:0]为00
B. 外部非同步存储器启动,使用片上Loader,将外部非同步存储器中的程序加载到L1 Cache,启动地址0xFFA08000(BF533为0xFFA00000),要求管脚BMODE[1:0]为01
C. SPI Flash Slave模式启动,即可以使用别的CPU向ADSP-BF531/532/533输入程序,启动地址同B,要求管脚BMODE[1:0]为10
D. SPI Flash Master模式启动,使用片上Loader,将SPI Flash中的程序加载到L1 Cache,启动地址同B,要求管脚BMODE[1:0]为11
着重说下方式D,除了以上要求外,还必须注意的是:芯片0.3版本后可以支持8、16或24位寻址的SPI Flash,0.2及以前只支持8位和16位的;PF2管脚用于SPI_CS,MISO管脚必须上拉,0.2版本及以前需要将FP2管脚上拉;除了通用SPI Flash之外,ADSP-BF531/532/533还支持AT45DB041B、 AT45DB081B和AT45DB161B这些器件。另外,芯片内部的Boot ROM地址是0xEF000000,有兴趣的话可以去反汇编一下,看看它的工作原理。
2. Loader文件的生成
用仿真器调试程序的时候,生成的是可执行程序的映像(*.dxe),如果要进行Boot,就应该生成Loader文件。这需要对工程进行设置。
选择VisualDSP++的菜单Project->Project Options,出现如上图所示的窗口,在Type中选择Loader file。然后点击左边的Load,出现如下图所示的窗口。
选择Boot Mode为SPI,Boot Format为Intel Hex,然后一定要选择一个Initialization File(不选的话不能启动),这个Initialization File是需要编译的,一会儿说。再选择一个Output File即可。
3. Initialization file的编译
我也不知道这个Initialization file用来干什么的,呵呵,只是放上了好使。VisualDSP++提供了这个Initialization file的源代码,默认位置在C:\Program Files\Analog Devices\VisualDSP 4.5\Blackfin\ldr\init_code\ADSP-BF533 INIT CODE,这个Init code是给BF533用的,BF531需要修改。其实修改也很简单,就是2句话。
在Init_code.asm中,修改
#include <defBF533.h>为#include <defBF531.h>
在ADSP-BF533.ldf中,修改
PROGRAM { TYPE(RAM) START(0xFFA00000) END(0xFFA07fff) WIDTH(8) } //L2为
PROGRAM { TYPE(RAM) START(0xFFA08000) END(0xFFA0bfff) WIDTH(8) } //L2
然后进入菜单Project->Project Options,修改Processor为ADSP-BF531,重新编译,生成的DXE文件就是需要的Initialization file。
4. SPI Flash的烧写
有了Initialization file之后,重新编译工程,得到的LDR文件就是要烧写的文件。SPI Flash烧写需要:仿真器、VisualDSP++、烧写驱动。很遗憾,我不知道怎么用JTAG下载电缆烧写SPI,前文已经提到,如果你买的是合格的开发板,那么一定会提供SPI烧写的驱动。如果没有也没有关系,我在www.blackfin.org上找到了一个,地址是http://www.blackfin.org/tools.php?id=16。这个驱动是给BF533写的,要给BF531使用,同样需要修改。另外,这个驱动的开发环境是VisualDSP++3.5,其工程文件与4.5版本的似乎不兼容,需要删除SPIFlash.dpj重新建立一个,建立过程如下。
A. 建立一个新的工程
B. 选择处理器类型
C. 加入Startup Code/LDF
D. 选上你需要的支持,其实不选SDRAM支持也可以
E. 一路Next到Finish。
F. 在工程中加入SPIFlash.c、stflash.c。
G. 修改stflash.c
找到
#include <cdefBF533.h>
修改为
#include <cdefBF531.h>
找到
#define CLKIN 27 // CLKIN frequency is 27 MHz on the BF533 EZ-Kit
修改为
#define CLKIN 20 // CLKIN frequency is 20 MHz on the BF531
当然你的晶振是多少就写多少
重新编译,生成的DXE文件就是SPI Flash的驱动。
H. 加载驱动
加载驱动时,仿真器必须连接目标板。选择VisualDSP++的菜单Tools->Flash Programmer。出现以下窗口:
点击Browse选择刚才编译好的驱动文件,然后点击Load Driver。注意,此时SPI Flash必须已经与BF531相连接,否则会提示“Out of memory”。
点选Programming选项卡,就可以进行编程了。
ADSP-BF531的SPI FLASH BOOT相关推荐
- FPGA配置 - 基于SPI FLASH的FPGA多重配置(Xilinx)
原文地址:http://www.elecfans.com/emb/fpga/20140124334884_2.html IPROG指令的作用是对FPGA芯片进行复位操作,该复位操作对FPGA内部的应用 ...
- lichee linux nfs,SPI Flash 系统编译
在一些低成本应用场景,需要在SPI flash上启动系统,这需要对Uboot和系统镜像做些适配. 本文介绍SPI Flash镜像的制作过程. 这里 使用 MX25L25645G, 32M SPI fl ...
- Licheepi zero SPI Flash 系统编译
Licheepi zero SPI Flash 系统编译 在一些低成本应用场景,需要在SPI flash上启动系统,这需要对Uboot和系统镜像做些适配. 本文介绍SPI Flash镜像的制作过程. ...
- nano spi flash linux构建指南
title: nano spi flash linux构建指南 前言 本文介绍Licheepi nano SPI Flash镜像的制作过程.主要为小白首次入门做讲解! 制作嵌入式linux系统主要分四 ...
- f1c100s spi flash分区
spi flash分区 u-boot-sunxi-with-spl.bin – 1M suniv-f1c100s-licheepi-nano.dtb – 64K zImage – 4M rootfs ...
- 嵌入式Linux--U-Boot(八)SPI Flash命令使用
文章目录 前言 具体用法 使用范例 如何验证读写效果 一.进入Uboot命令行模式 前言 U-boot中如果支持spi/qspi flash,那么可以在U-Boot的命令行模式下使用sf的erase ...
- 基于SPI flash的 Multiboot远程更新
基于SPI flash的 Multiboot远程更新 前言 Xilixn FPGA提供了一种在线升级的方式(本文使用的是A7和K7系列fpga,以下所讲述和涉及的都是与此2系列fpga相关)可以通过I ...
- 在Xilinx Vivado and Vitis上建立闪存启动映像(flash boot image) 以 ZCU102 为例
目录 设置Setup 添加启动分区Add boot partitions 烧录Program boot image on ZCU102 board 启动Start FPGA from flash im ...
- 荔枝派Zero(V3s)SPI Flash 启动
参考:http://zero.lichee.pro/系统开发/SPI_flash_build.html#linux 本文以型号为MX25L12805.MX25L25635F为例,flash大小分别为1 ...
最新文章
- android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
- SQL中条件和比较关键字Case的使用方法(case的结果就是得到了一个值)
- mysql流程控制_Mysql之流程控制结构
- React开发(275):dva debugger对应的值
- 1.7 编程基础之字符串 34 回文子串 python
- ASP.NET MVC铵钮Click后下载文件
- win10系统上Python和pycharm的安装及配置
- oracle9i 查询scn,在oracle10g 10.2.0.1上测试不完全恢复_recover database until scn
- php定量,javascript - js 无序数组 任意个数 相加之和为定量m?
- 营销工作的七项核心能力
- 美好消费品牌榜单TOP 5公布;迪卡侬集团正式宣布参展第四届进博会 | 美通企业日报...
- DTcms Core项目发布到IIS教程
- 移动智能终端PIN码破解
- 达梦(DM)数据库常见问题详解
- CESM优化——Intel编译器安装OpenMPI4.0
- 关于uni-app中uni-forms表单验证时“多级结构对象数据”如何做数据校验的解决方案
- Nature破解癌王生长关键:真菌由肠道入侵胰腺,定植增加3000倍,富集Malassezia菌...
- uvalive 3713 2-sat
- springboot项目层次结构_【SpringBoot】多模块项目结构搭建
- [面试] 百度笔经加面经 实例
热门文章
- navicat汉化版安装包下载
- Android开发桌面插件
- 番茄花园 Ghost XP SP3 2013 电脑城极速装机版
- 把VSO作为GitHub上JavaScript项目的免费CI服务器
- Java—文件I/O操作
- 在芬兰留学是一种什么体验?
- 教你筛选众多快递中最后物流含有代收点的快递单号
- java首字母报错_下列关于Java名称命名的约定,错误的是()。A.-.$不作为变量名、方法名开头B.变量名、方法名首字母小...
- 阅读笔记-进击的学霸-策略篇-信息输出
- macbookair有没有touchbar_macbookair2016和2017款有什么区别 macbookair2016和2017款对比解析...