nand

nand flash裸机编程
第001节_NAND_FLASH操作原理
第002节_NandFlash时序及初始化
第003节_NandFlash的芯片id读取
第004节_NandFlash的数据读取
第005节_NandFlash的擦除与烧写

第001节_NAND_FLASH操作原理
NAND FLASH是一个存储芯片
那么: 这样的操作很合理”读地址A的数据,把数据B写到地址A”

问1. 原理图上NAND FLASH和S3C2440之间只有数据线,
怎么传输地址?
答1.在DATA0~DATA7上既传输数据,又传输地址
当ALE为高电平时传输的是地址,

问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令
怎么传入命令?
答2.在DATA0~DATA7上既传输数据,又传输地址,也传输命令
当ALE为高电平时传输的是地址,
当CLE为高电平时传输的是命令
当ALE和CLE都为低电平时传输的是数据

问3. 数据线既接到NAND FLASH,也接到NOR FLASH,还接到SDRAM、DM9000等等
那么怎么避免干扰?
答3. 这些设备,要访问之必须”选中”,
没有选中的芯片不会工作,相当于没接一样

问4. 假设烧写NAND FLASH,把命令、地址、数据发给它之后,
NAND FLASH肯定不可能瞬间完成烧写的,
怎么判断烧写完成?
答4. 通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙

问5. 怎么操作NAND FLASH呢?
答5. 根据NAND FLASH的芯片手册,一般的过程是:
发出命令
发出地址
发出数据/读数据

      NAND FLASH                      S3C2440

发命令 选中芯片
CLE设为高电平 NFCMMD=命令值
在DATA0~DATA7上输出命令值
发出一个写脉冲

发地址 选中芯片 NFADDR=地址值
ALE设为高电平
在DATA0~DATA7上输出地址值
发出一个写脉冲

发数据 选中芯片 NFDATA=数据值
ALE,CLE设为低电平
在DATA0~DATA7上输出数据值
发出一个写脉冲

读数据 选中芯片 val=NFDATA
发出读脉冲
读DATA0~DATA7的数据

用UBOOT来体验NAND FLASH的操作:

选中 NFCONT的bit1设为0 md.l 0x4E000004 1; mw.l 0x4E000004 1
发出命令0x00 NFCMMD=0x00 mw.b 0x4E000008 0x00
发出地址0x00 NFADDR=0x00 mw.b 0x4E00000C 0x00
发出地址0x00 NFADDR=0x00 mw.b 0x4E00000C 0x00
发出地址0x00 NFADDR=0x00 mw.b 0x4E00000C 0x00
发出地址0x00 NFADDR=0x00 mw.b 0x4E00000C 0x00
发出地址0x00 NFADDR=0x00 mw.b 0x4E00000C 0x00
发出命令0x30 NFCMMD=0x30 mw.b 0x4E000008 0x30
读数据得到0x17 val=NFDATA md.b 0x4E000010 1
读数据得到0x00 val=NFDATA md.b 0x4E000010 1
读数据得到0x00 val=NFDATA md.b 0x4E000010 1
读数据得到0xea val=NFDATA md.b 0x4E000010 1
退出读状态 NFCMMD=0xff mw.b 0x4E000008 0xff

第002节_NandFlash时序及初始化

第003节_NandFlash的芯片id读取

第004节_NandFlash的数据读取
a. 地址问题
CPU大爷: 小nand啊,你的性能比不上小nor啊,听说你有位反转的毛病
Nand : 是的,大爷,位反转是我天生的毛病,时有时无
CPU大爷: 靠,你说你价格便宜容量大,这不是害我嘛
Nand : 没事,我有偏方,用OOB就可以解决这问题
CPU大爷: 得得得,你那偏方是什么也别告诉我,我只管能读写正确的数据
Nand : 是的,大爷,我这OOB偏方也就我自个私下使用。
您就像使用nor一样使唤我就可以了

b. 实现nand flash的页读取
c. 实现从nand flash启动

作业:

第005节_NandFlash的擦除与烧写

作业:

Original: https://www.cnblogs.com/agui125/p/12052412.html
Author: 风御之举
Title: nand

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606888/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何隐藏shell脚本内容

    从事 Linux 开发的同学,经常需要编写 shell 脚本,有时脚本中会涉及到一些敏感内容,比如一些 IP 地址,用户名以及密码等,或者脚本中有一些关键的代码, 所有这些内容你都…

    Linux 2023年6月13日
    095
  • 【计算机取证篇】镜像挂载利器-Arsenal Image Mounter

    Arsenal Image Mounter是一款非常优秀的磁盘挂载工具,在Microsoft Windows中可以将磁盘映像的内容作为”真实磁盘”挂载到系统…

    Linux 2023年6月13日
    0119
  • linux下利用inode删除文件

    由于 linux下中文编码和在Windows中的中文编码可能不同,在一定的条件下,linux的文件夹可能会存在乱码的情况就算一些乱七八糟的字符。如问号的文件名,这样的文件使用rm …

    Linux 2023年6月6日
    0102
  • SpringBoot入门-Redis(六)

    package com.vast; import com.vast.dao.AccountRepository; import com.vast.dao.IAccountMybat…

    Linux 2023年5月28日
    066
  • CMU15-445 数据库导论 Storage02 其他存储方式

    CMU15-445 数据库导论 Storage02 其他存储方式 1. 参考资料: [1] CMU15-445:Database Systems [Andy Pavlo] http…

    Linux 2023年6月6日
    0111
  • url参数+,&,=,/等转义编码【转】

    问题描述 在使用postman发送请求时,url出现了有+,空格,/,?,%,#,&,= 等特殊符号,可能在转义之后导致服务器端无法获得正确的参数值。解决办法 将这些字符转…

    Linux 2023年6月8日
    079
  • 白话TCP/IP原理

    TCP/IP(Transmission-Control-Protocol/Internet-Protocol),中文译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Inte…

    Linux 2023年6月14日
    073
  • 【滚动更新】C++ 八股文选集(没代码,纯应试)

    1,变量的声明和定义有什么区别。 声明不分配内存,定义分配内存。变量只能被定义一次,但可以被声明多次。 2,#ifdef、#else、#endif和#ifndef的作用。 预处理条…

    Linux 2023年6月13日
    094
  • redis研究记录

    redis研究记录 1 概述目前多数的NoSql数据库本质上都是键值对形式,Redis也不例外。作为缓存数据库的一种,和Memcached相比,有以下几种主要的优点:(1)速度上,…

    Linux 2023年5月28日
    077
  • 最小化安装killall不可用

    最小化安装killall不可用 最小化安装 Centos7.4后,发现killall命令不可用使用了以下命令,查看软件包名: yum search killall 查找后发现应使用…

    Linux 2023年6月13日
    099
  • Redis-Sentinel Redis的哨兵模式

    Redis-Sentinel Redis的哨兵模式Redis Sentinel 模式简介Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-sla…

    Linux 2023年5月28日
    094
  • Linux指令_曾佳豪

    一、基础指令 1、ls指令 含义:ls (list) 用法1 :#ls 含义:列出当前工作目录下所有文件/文件夹的名称 [En] Meaning: list the names o…

    Linux 2023年5月27日
    0120
  • ACL和NAT

    NAT 概述: NAT(网络地址翻译)一个数据包目的ip或者源ip为私网地址, 运营商的设备 无法转发数据。 NAT工作机制: 一个数据包从企业内网去往公网时,路由器将数据包当 中…

    Linux 2023年6月6日
    095
  • echarts属性的设置大全(完整大全)

    1. 全图默认背景  &amp…

    Linux 2023年6月13日
    068
  • 【翻译】如何编写 Git 提交消息

    个人博客及创作索引页正在制作中,此处仅释出本地第一大版本。原文档基于 Hexo 及相关插件,不兼容于此处的格式暂不统一修复。 《【翻译】如何编写 Git 提交消息》[1]的简体中文…

    Linux 2023年6月13日
    0128
  • go——数组

    GO——数组 一、一维数组声明方式: 1. var 数组名 [数组长度] 数组类型 var arr [5]int //定义一个数组,有5个元素,数组类型为整形 2.var 数组名=…

    Linux 2023年6月7日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球