学习笔记--- S3C2440 对NANDFLASH操作原理与测试代码分析

发布者:sigma28最新更新时间:2022-04-02 来源: eefocus关键字:S3C2440  NANDFLASH  测试代码 手机看文章 扫描二维码
随时随地手机看文章

首先来看一下NANDFLASH接口:

图上看出只有数据口和控制口,没有地址线,所以它不能像网卡,SDRAM那样统一寻址,它的操作方法步骤:


1 使能芯片


2 发操作指令(读,写,擦,复位)


3 发操作地址


5 等待忙信号释放(只有读)

6 发送数据(写),接收数据(读)


7 等待忙信号,低电平


8 禁能芯片


这些控制信号线都是通过软件设置寄存器,然后硬件自动产生其他控制线的控制信号;


操作信号含义如下:


R/B :读/忙状态线


CE : 片选


CLE :发送指令信号


ALE :发送地址信号


WE:写信号


RE:读信号


这里要注意的:


1 数据按字节传输,刚好8位数据线,可以直接读取数据寄存器获取数据


2 地址有32位,这里只有8位线,所以一个地址要传完需要多次发送,发送规则看NANDFLASH芯片手册,如下图:

这个芯片需要分4个周期发送地址,地址线的多少取决于存储芯片的大小,写驱动的时候要按照这个表发送地址位。


@******************************************************************************

@ File:head.s

@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行

@******************************************************************************       

  

.text

.global _start

_start:

                                            @函数disable_watch_dog, memsetup, init_nand, nand_read_ll在init.c中定义

            ldr     sp, =4096               @设置堆栈 

            bl      disable_watch_dog       @关WATCH DOG

            bl      memsetup                @初始化SDRAM

            bl      nand_init               @初始化NAND Flash


                                            @将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中

                                            @nand_read_ll函数需要3个参数:

            ldr     r0,     =0x30000000     @1. 目标地址=0x30000000,这是SDRAM的起始地址

            mov     r1,     #4096           @2.  源地址   = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处

            mov     r2,     #1024           @3.  复制长度= 1024(bytes),对于本实验的main.c,这是足够了

            bl      nand_read               @调用C函数nand_read


            ldr     sp, =0x34000000         @设置栈

            ldr     lr, =halt_loop          @设置返回地址

            ldr     pc, =main               @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转

halt_loop:

            b       halt_loop

先看这段启动代码,为了使用C语言来设置看门狗与初始化SDRAM等操作,需要先设置好SP,因为C语言函数的入口地址和局部变量都需要栈来存储。

在完成初始化后,就可以调用nandread函数来读取NANDFLSH数据了,这里需要传进3个参数,从汇编语言传参数给C语言函数就只能通过将参数赋值给R0-R4,这里的三个参数,第一个参数对应r0,依次类推。下面这段代码实现把参数传递给nand_read函数了:


            ldr     r0,     =0x30000000     @1. 目标地址=0x30000000,这是SDRAM的起始地址

            mov     r1,     #4096           @2.  源地址   = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处

            mov     r2,     #1024           @3.  复制长度= 1024(bytes),对于本实验的main.c,这是足够了

            bl      nand_read               @调用C函数nand_read

再来看下nand_read的原型:

void nand_read(unsigned char *buf, unsigned long start_addr, int size)


第一个参数是需要传入一个地址,所以在从汇编传入进来的是一个地址,使用LDR 指令将绝对地址装载到r0


dr     r0,     =0x30000000     @1. 目标地址=0x30000000,这是SDRAM的起始地址


第二个和第三个参数传入的都是立即数,可以直接使用下面方式赋值


mov     r1,     #4096           @2.  源地址   = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处

mov     r2,     #1024           @3.  复制长度= 1024(bytes),对于本实验的main.c,这是足够了

关键字:S3C2440  NANDFLASH  测试代码 引用地址:学习笔记--- S3C2440 对NANDFLASH操作原理与测试代码分析

上一篇:学习笔记--- S3C2440 内存类设备接口接线与访问原理
下一篇:学习笔记 --- S3C2440 DMA操作原理

推荐阅读最新更新时间:2024-11-01 13:09

一种基于WinCE6.0的数字调频收音机的设计
本设计利用数字收音机芯片Si4730,为基于WincE6.0的智能系统集成FM功能提供了一种很好的解决方案,该方案实现了全频手动与自动搜台等功能。 1 基于WinCE6.0的系统设计流程 如图1所示,基于WinCE 6.0的系统设计一般分为3个过程:针对不同的硬件平台设计BSP包,BSP包括Boot-loader、OAL和驱动程序;针对系统的需求,利用Platform Builder for CE 6.0选择合适的组件,构建操作系统并导出SDK;在SDK的支撑下开发应用程序。 WinCE 6.0与其早期版本相比,开发工具有了较大的变化。Platform Builder已经不是一个单独发行的工具,Platform B
[单片机]
一种基于WinCE6.0的数字调频收音机的设计
嵌入式驱动学习之GPIO驱动
开发环境 主机开发环境:ubuntu12.04 BootLoader:u-boot-1.1.6 kernel:linux-2.6.30.4 CPU:s3c2440 开发板:TQ2440 开发步骤 1、硬件分析 在天嵌科技提供的开发板中 4 个 LED 灯(TQ2440)分别使用了 S3C2440芯片的:GPB5、GPB6、GPB7 和 GPB8,下面列出来对应的原理图: 根据上图可以知道,当 CPU 的 GPB5 到 8 是低电平时,LED 灯亮;当为高电平时 LED 灯灭。只需要在驱动中实现对 GPB 口电平的控制就可以实现对灯进行开关操作。 2、编写LED驱动 以下为驱动源码: #include linux/mis
[单片机]
嵌入式驱动学习之GPIO驱动
s3c2440存储控制器和地址以及启动的理解
1.首先应该先了解Flash ROM的种类 NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。 NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。 通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。 结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash. 2.Nand Flash的命令、地址、数据都通过I/O口发送,管脚复用,这样做做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果设计者想将NAND FLASH更换为更高密度、更大容量的,也不必改动电路板。在S3C2440中NANDFLASH的控制依靠NAND F
[单片机]
s3c2440、s3c2410的存储控制及启动代码的理解
对于s3c2440、s3c2410这样的片子,并不是想51那样简单的内存和启动操作 1、这两种芯片的地址线为addr0~addr26共有27条地址线即为128MB的寻址范围,为了更广的范围芯片厂家就多加了nGCS0~nGCS7(有了所谓的bank0~bank7),8个引脚作为外部的扩展即128*8MB=1GB的寻址范围。理论上这芯片有4GB(2的23次方)的寻址范围和采用统一编址的方式。但并不是全都用到的一般只用到其中的一部分。即可分为:外部地址空间bank0~bank7(0x00000000~0x40000000)、内部寄存器地址(0x48000000~0x5FFFFFFF)主要用于特殊功能寄存器 、未用地址段,这三个大部分组成
[单片机]
S3C2440-按键
[单片机]
S3C2440-按键
S3C2440之UART操作(FIFO中断模式)
3个独立的串口,每一个都可以利用DMA 和中断方式操作。每个包含2个64字节FIFO,一个接,一个发。 非FIFO模式相当于FIFO模式的一个寄存器缓冲模式。 每一个UART有7种状态,overrun错误,校验错误,帧错误,断点,接收缓冲区准备好,发送缓冲区为空,发送移位寄存器为空。 当接收移位寄存器中的数据传给FIFO的时候,且接收的数据触发了Rx FIFO的阀值,Rx中断产生了。 发送器中FIFO的还未发得数据到达Tx FIFO阀值的时候,Tx中断产生了。(我觉得应该理解为:发送器中FIFO发送结束,即为空的时候产生中断。) 功能:在串口上输入16字节,包括回车,然后会把输入的字符回显在串口终端
[单片机]
S3C2440 Boot Loader引导代码功能简述
【前言】开始学习ARM的时候,基本上都要从裸机编程开始。为了减低入门的门槛,很多时候只要修改模板里的主函数main.c,可是,久而久之,就会产生些疑问,问什么下载了这些C代码编译链接生成出来的BIN就能在ARM上跑了呢?原因就在于,有几个文件已经不声不响的帮我们提前干了很多的事,而这些事C语言是干不了的,只能由汇编完成,美其名曰:ARM汇编引导代码。其实不光“裸奔”需要,Boot Loader也同样需要。那么到底这些汇编帮我干了些什么呢?笔者就结合S3C2440的Boot Loader引导代码简单分析整理下。 【一】变量及相关宏定义 开始首先用GET(相当于C语言里的#include)伪指令包含进来了三个头文件option.i
[单片机]
S3C2440之MMU操作(MDK4.22)
关于MMU知识: 1.ARM CPU上的地址转换过程涉及到了3个概念,虚拟地址VA,变换地址MVA,物理地址PA。当没有启动MMU的时候,CPU核,CACHE,MMU见到的都是PA。 启动MMU之后,CPU核对外发出VA,VA被转换为MVA,供给CACHE和MMU使用,MMU再将MVA转换为PA,最终找到真实的地址。 CPU看见的VA,CACHE和MMU看不见VA,看见的是MVA;设备只看到VA。 转换算法:如果VA 32M,那么使用进程PID来转换,PID通过CP15的C13读取。 if(VA 32M) then MVA = VA | (PID 25); else MVA = VA; /
[单片机]
<font color='red'>S3C2440</font>之MMU操作(MDK4.22)
热门资源推荐
热门放大器推荐
  •  pdf文件点云配准从入门到精通 (郭浩)
  •  pdf文件构建实时机器学习系统
  •  pdf文件基于FSM和Verilog HDL的数字电路设计
  •  pdf文件计算机体系结构:嵌入式方法
  • 系统发生错误

    系统发生错误

    您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ]

    [ 错误信息 ]

    页面错误!请稍后再试~

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved