【转载】Serial NOR Flash and U-Boot
转载自:http://blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:serial-flash
U-Boot supports serial NOR flashes which hook up to the Blackfin processor via a 4 wire SPI-compatible interface. Commands are provided for reading/erasing/writing of the device.
In terms of the command line interface, the sf
command is the interface to all serial flash operations. It allows you to read/erase/write a sequential range of bytes as well as query the SPI flash. You can also select different flashes at runtime based on the SPI chip select.
In terms of U-Boot code, U-Boot provides a SPI flash framework while the Blackfin port provides a driver for the on-chip SPI controller. Every SPI flash type has its own specific subdriver which can be found in the drivers/mtd/spi/
directory. If the SPI flash you want to use is not supported, you'll have to implement your own subdriver. See the supported flashes section for more information.
sf
interface which was introduced with 2009R1 / u-boot-2008.10+. If you're using an older release, please see the eeprom
page: serial-flash-eepromSupported Flashes
There is no limit in terms of flash sizes that the SPI interface can support. U-Boot can work with the SPI flash regardless of its size. The current largest is about 128 megabits / 16 megabytes and it works great!
Every SPI flash vendor likes to implement their own command interface with their own extensions. When selecting a SPI flash for your board, you should first make sure it supports the JEDEC identification standard. Everything made recently should comply, but double check the datasheet.
The specific list of parts that are currently supported:
Vendor | Parts |
---|---|
Atmel | AT45DB011D AT45DB021D AT45DB041D AT45DB081D AT45DB161D AT45DB321D AT45DB642D |
Macronix | MX25L1605D MX25L3205D MX25L6405D MX25L12805D MX25L12855E |
Spansion | S25FL008A S25FL016A S25FL032A S25FL064A S25FL128P |
SST | SST25VF040B SST25VF080B SST25VF016B SST25VF032B SST25WF512 SST25WF010 SST25WF020 SST25WF040 |
ST Micro | M25P16 M25P20 M25P32 M25P40 M25P64 M25P80 M25P128 |
Winbond | W25X16 W25X32 W25X64 |
Configuration
You will need these defined in your board configuration file in order to enable support for serial flashes.
- CONFIG_BFIN_SPI -- Blackfin on-chip SPI controller
- CONFIG_SPI_FLASH -- SPI Flash subsystem
- CONFIG_CMD_SF -- Command line interface
sf
- CONFIG_SF_DEFAULT_SPEED -- speed to run the SPI flash
- CONFIG_SF_DEFAULT_MODE -- by default, SPI_MODE_3 is used (see spi for more info)
If you want to store the U-Boot environment in SPI flash, then use these defines.
- CONFIG_ENV_IS_IN_SPI_FLASH -- store the env in SPI flash
- CONFIG_ENV_SPI_MAX_HZ -- speed to run the SPI flash
- CONFIG_ENV_SPI_MODE -- by default, SPI_MODE_3 is used (see spi for more info)
- CONFIG_ENV_SPI_BUS -- by default, bus 0 is used
- CONFIG_ENV_SPI_CS -- by default, the CS the bootrom uses
Then you should define these according to the parts you have.
- CONFIG_SPI_FLASH_ATMEL
- CONFIG_SPI_FLASH_MACRONIX
- CONFIG_SPI_FLASH_SPANSION
- CONFIG_SPI_FLASH_SST
- CONFIG_SPI_FLASH_STMICRO
- CONFIG_SPI_FLASH_WINBOND
Probing
At runtime, you can detect any SPI flash to make sure things are detected properly. This command must be run first before doing any other SPI flash operation.
bfin> sf probe 2
SF: Got idcode 20 20 15
2048 KiB M25P16 at 0:2 is now current device
Here we can see that there is a 16 megabit ST Micro flash hooked up. Good times.
Reading
You use the sf read
command to read a range of bytes from the serial flash into memory. From there, you can do anything you like with it. For example, if we want to read 0x1000 bytes at an offset of 0x300 bytes from the start of the serial flash into external memory at 0x2000000, we'd simply run:
bfin> sf read 0x2000000 0x300 0x1000
bfin> md.b 0x2000000
02000000: 4a e1 c0 ff 10 62 0a e1 04 0a 40 e1 c2 ff 10 93 J....b....@.....
02000010: 22 6c 10 93 48 60 c2 6f 10 97 4a e1 e0 ff 20 e1 "l..H`.o..J... .
02000020: fd 01 0a e1 04 20 88 4f 10 93 c6 6c 27 01 30 05 ..... .O...l'.0.
02000030: 10 00 00 00 4a e1 e0 ff 40 e1 fa 03 0a e1 0c 20 ....J...@......
Again, you do not need to worry about how the serial flash is split up into pages, so you could just as easily read multiple pages/sectors/blocks/whatever with one command.
Erasing
You use the sf erase
command to erase pages/sectors of the serial flash. Like any normal flash system, you must erase things before you can write to them, and you must erase on sector boundaries.
For example, if we want to erase the sector starting at 0x30000, then we'd do:
bfin> sf erase 0x30000 0x10000
Here the sector size is 0x10000 bytes.
Writing
You use the sf write
command to write a range of bytes from memory into some offset into the serial flash. For example, if we want to write 0x100000 bytes from external memory at 0x20000000 into the serial flash at an offset of 0x0 bytes, we'd simply run:
bfin> sf write 0x20000000 0x0 0x100000
There is no need for you to worry about writing out only a page of data at a time.
Booting
When most people talk about booting, they sometimes forget that there are two aspects of booting a system - chip and hardware initialization (done by the bootloader), and booting the kernel.
Booting the Blackfin (U-Boot in SPI Flash)
This is covered in the booting_methods section.
Booting Linux (Linux in SPI Flash)
This is a simple matter of loading a uImage from SPI flash (via chip select 2), and doing a bootm
command on it. For example the following
bfin> set sfboot 'sf probe 2; sf read 0x2000000 0x300 0x100000; bootm 0x2000000'
bfin> set bootcmd run sfboot
bfin> save
The next time this board boots, it will run the sfboot
command, which probes the flash at CS 2
, loads the image located in offset 0x300
, with a length of 0x100000
, into memory location 0x2000000
, and then does a bootm on it. Simple!
【转载】Serial NOR Flash and U-Boot的更多相关文章
- (30)导入时如何定制spring-boot依赖项的版本【转载】【从零开始学Spring Boot】
此文章转载地址:http://www.tuicool.com/articles/RJJvMj3 请注重作者的版权. spring-boot通过maven的依赖管理为我们写好了很多依赖项及其版本,我们可 ...
- 转载:NOR Flash擦写和原理分析
1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存 ...
- xilinx的quick boot(1) ——flash的一些内容
xilinx的quick boot(1) --flash,quick boot配置文件,以及中间的一些联系xilinx 配置模式分为SPI,BPI.用过的spi外挂flash是N25Q./////// ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(1)- Boot简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的BootROM功能简介. 截止目前为止i.MX RT系列已公布的芯片有三款i.MXRT105x, i. ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRT Bo ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启 ...
- Flash Memory 简介【转】
本文转载自:https://linux.codingbelief.com/zh/storage/emmc/ Flash Memory 是一种非易失性的存储器.在嵌入式系统中通常用于存放系统.应用和数据 ...
- LPCScrypt, DFUSec : USB FLASH download, programming, and security tool, LPC-Link 2 Configuration tool, Firmware Programming
What does this tool do? The LPC18xx/43xx DFUSec utility is a Windows PC tool that provides support f ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(1)- Boot简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的BootROM功能简介. 截止目前为止i.MX RTxxx系列已公布的芯片仅有一款i.MXRT60 ...
随机推荐
- VC中打开对话框选择文件和文件夹
1.选择文件 CFileDialogdlg(true, NULL, NULL, NULL, "所有文件 | *.*", this); ...
- JNI开发示例
安装:eclipse(http://www.eclipse.org/).CDT(C/C++ Development Tooling).ADT(Android Development Tools) ht ...
- oprofile
一.原理 在关注事件发生一定次数时,进行一次采样,记录下需要的信息(比如指令寄存器或栈寄存器信息). 二.参数 项 说明 eventname 要关注的事件名称,常用的事件名称及功能如下: CP ...
- C# keybd_event模拟对照表以及用法.
Windows提供了一个模拟键盘API函数Keybd_event(),该函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息. [DllImport("use ...
- maven eclipse miss required library解决
我是直接到C:\Users\admin\.m2\repository目录把所有的库包全删除,然后在项目里刷新一下,搞定!
- Gradle中ProGuard的配置
好久没有写博客了…元旦前赶紧写一篇吧… 这些日子琢磨了一下gradle.对比起maven确实在配置上灵活很多,对groovy的支持可以更容易的自定义任务. 由于最近的几个项目中都使用到了moco这个开 ...
- nodejs express 框架解密1-总体结构
本文是基于express3.4.6的. 1.express 代码结构为: bin/express 是在命令行下的生成express 框架目录文件用的 lib/express 是框架的入口文件 lib/ ...
- Hadoop 2.7.1 使用minicluster进行单元测试
目的是要跑通这个单元测试:hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestClose.java 这个Java文件比较简单: /** * Lic ...
- Cocos2dx使用wxsqlite开源加密SQLite3数据库
最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...
- 利用VBA查找excel中一行某列第一次不为空与最后一列不为空的列数
昨日同事有需求,想知道每个商品第一次销售的月份,以及最后一次销售的月份. 本想通过什么excel函数来解决,但是找了半天也没找到合适的,最后还是通过VBA来解决吧. 使用方法: Excel工具-宏-V ...