使用at91sam9260在uboot下直接对nandflash操作
来源:互联网 发布:mysql如何更改密码 编辑:程序博客网 时间:2024/06/06 12:41
声明:这里面的对nandflash的操作是在韦东山老师的linux视频启发下所写的
一,at91sam9260里面有对nandflash的支持,主要是通过三个寄存器实现的;
(1). DataRegister 数据寄存器 位置在offset 0x000000 ,起始地址就是nandflash的地址空间,所以实际的寄存器地址也就是0x40000000;
(2).CommandRegister 命令寄存器 位置在offset 0x400000,也就是0x40400000
(3). AddressRegister 地址寄存器 位置在offset 0x200000,既0x40200000
这里需要说明的是,里面的具体的操作nandflash时序已经由9260芯片完成,我们要做的只是操作寄存器而已。
二,我们首先来实现读取nandflash ID的操作
最后5个读取数据操作会得到 ec f1 00 15 40通过nand的芯片手册可以得知 read ID的操作流程为enable------>command 0x90 -------> address 0x00 ----->data1 ----> data2 ------>data3 ------>data4-----> date5
公司的at91sam9260开发板的nandflash使能引脚是接到了PC14引脚上(这是atmel公司推荐的接法),而nand芯片的使能电平为低,所以需要将芯片的PC14引脚置地。通过查看at91sam9260的datasheet可知PC的寄存器空间是在0xFFFFF800 --0xFFFFFA00之间的,然后PC的输出寄存器分别为置位寄存器 offset 0x30 和清零寄存器 offset 0x34,也就是我们需要到清零寄存器里面将第14为置位来是使能nandflash芯片。
Emfuture> mw.l 0xFFFFF834 0x00004000
通过查看输出状态寄存器 (offset 0x38)来看PC14是否为低
Emfuture> md.l 0xFFFFF838 1
fffff838: 00000000 .... 可见nandflash已经使能
这里需要注意的是需要配置PC14引脚为IO使能和输出使能,这样才能操作引脚输出功能
然后发送0x90命令到命令寄存器中
Emfuture> mw.b 0x40400000 0x90
接着是地址寄存器中输出 0x00地址
Emfuture> mw.b 0x40200000 0x00
现在就可以读取数据寄存器的值了,连续读取5个值 ,因为第二个就是chip id
Emfuture> md.b 0x40000000 1
40000000: ec .
Emfuture> md.b 0x40000000 1
40000000: f1 . /////Device Code 每次9260uboot启动是打印的chipID就是0xecf1就是这个
Emfuture> md.b 0x40000000 1
40000000: 00 .
Emfuture> md.b 0x40000000 1
40000000: 95 . ////和芯片手册稍微有点出入,不过效果已经达到了
Emfuture> md.b 0x40000000 1
40000000: 40 @
Emfuture> md.b 0x40000000 1
40000000: ec . ///继续读的话就会循环输出上面的数据
退出读取ID的状态 0xff命令
Emfuture> mw.b 0x40400000 0xff
三, 现在来读取nandflash第一个字节的数据
我们使用nand dump 0 命令先读取出来第一页的命令做对比
Emfuture> nand dump 0 //nand dump 命令
Page 00000000 dump:
0d 00 00 ea 05 00 00 ea 05 00 00 ea 05 00 00 ea ///对比的数据
05 00 00 ea c8 0f 00 00 05 00 00 ea 05 00 00 ea
具体的操作流程为
enable------>command 0x00 -------> address 0x00 ----->address 0x00 ----->address 0x00 ----->address 0x00 ----->data1 ----> data2 ------>data3 ------>data4 ------->cammand 0xff
Emfuture> mw.l 0xFFFFF834 0x00004000 ////使能nandflash芯片
Emfuture> md.l 0xFFFFF838 /////查看输出是否为0
fffff838: 00000000 ....
Emfuture> mw.b 0x40400000 0x00 //////command 0x00
Emfuture> mw.b 0x40200000 0x00 ////address 0x00
Emfuture> mw.b 0x40200000 0x00
Emfuture> mw.b 0x40200000 0x00
Emfuture> mw.b 0x40200000 0x00
Emfuture> mw.b 0x40200000 0x00
Emfuture> mw.b 0x40400000 0x30 ////命令 command 0x30
Emfuture> md.b 0x40000000 1 ////开始读数据
40000000: 0d .
Emfuture> md.b 0x40000000 1
40000000: 00 .
Emfuture> md.b 0x40000000 1
40000000: 00 .
Emfuture> md.b 0x40000000 1
40000000: ea .
Emfuture> mw.b 0x40400000 0xff ////退出
- 使用at91sam9260在uboot下直接对nandflash操作
- AT91SAM9260下GPIO的使用
- 在应用程序中实现对NandFlash的操作
- 在应用程序中实现对NandFlash的操作
- 在应用程序中实现对NandFlash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- S3C2440对nandflash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- s3c2440对nandflash的操作
- S3C2416 对nandflash的操作
- AM3352 uboot中对NandFlash坏块的处理
- 天祥 TX2440 UBOOT移植(3. 添加NANDFLASH有关操作)
- Tomcat6 配置数据源
- hibernate与dwr的结合问题
- strut2与JFreechart集合
- Cannot create a s…
- 根据ip地址查询地址
- 使用at91sam9260在uboot下直接对nandflash操作
- GCC内联汇编基础
- delphi7中的Image组件和SpeedButton组件
- css隐藏父元素,不隐藏子元素
- 理解TCP为什么需要进行三次握手
- vc 读写txt文件 支持Ascii/Unicode/Unicode big endian/UTF-8
- 机房收费系统之结尾
- 【IOS游戏开发】之 生成短网址的工具收集
- Swing 带标题栏的右键菜单(二)