使用at91sam9260在uboot下直接对nandflash操作
发布时间:2020-12-15 17:49:12 所属栏目:百科 来源:网络整理
导读:声明:这里面的对nandflash的操作是在韦东山老师的linux视频启发下所写的 一,at91sam9260里面有对nandflash的支持,主要是通过三个寄存器实现的; ?(1). DataRegister 数据寄存器 位置在offset 0x000000 ,起始地址就是nandflash的地址空间,所以实际的寄
声明:这里面的对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?
公司的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 ? ? ? ? ? ?////退出
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |