TQ2440开发板学习纪实(8)--- 从NAND Flash读取数据,把代码搬运到SDRAM运行

本文主要是介绍TQ2440开发板学习纪实(8)--- 从NAND Flash读取数据,把代码搬运到SDRAM运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为依赖于S3C2440的开机自动从Nandflash复制数据到片内SRAM执行,目前我们的可执行程序体积仍然不能大于4KB的限制。而我们的程序目前已经非常接近这个限制大小了,为了能够继续开发,必须突破这个限制。为此需要实现代码搬运功能,把程序从Nandflash搬运到SDRAM中去,并跳转到SDRAM执行。

本文为啥不实现NandFlash写? 因为对于我们的实现目前尚未需求。更重要的是,写操作涉及到擦除,更涉及到NandFlash寿命。为了减少写次数,延长NandFlash寿命,一般会在软件层实现写缓存。这就涉及到大量的代码,会偏离我们实验的主题--代码搬运。等以后确实需要保存数据到NandFlash时,再实现写功能不迟。

1 NAND Flash基础知识

1.1 TQ2440板载Nandflash芯片基本情况

NAND Flash作为一种存储芯片,其读写操作需要特定的时序和规范。实际上也存在相关的工业标准,用来标准化Nandflash的读写等操作。
与RAM和ROM不同,NAND Flash的传送数据、地址、命令时共用同一组针脚,通过不同的时序加以区分。下图是TQ2440开发板上搭载的Nandflash接口图:

这里写图片描述

其接口非常简单,其中

  • IO0-IO7,8个针脚用于传送数据、地址、命令。
  • WP,写保护,直接接地。
  • WE,写使能
  • RE,读使能
  • CE,片选
  • ALE,地址锁存
  • RDY/B,忙闲状态
  • CLE,命令锁存
  • VSS,接地
  • VCC,电源

1.2 Nand flash基本术语

  • 页(Page),NandFlash以页为单位进行读写,常见的页大小为512B,1KB,2KB等。
  • 块(BLOCK),NandFlash在写入数据之前必须先擦除(写入1),而擦除的最小单元就是块,常见的块大小为64页。
  • 擦除。NandFlash写入之前必须先擦除,也就是全部写入1。因为写的时候只能写0,不能写1。
  • 数据带宽,也就是每次传送数据的位数(I/O针脚数),常见的有8,16。
  • 地址周期,传送一个完整的地址,需要发送几次数据。

1.3 S3C2440片内NandFlash控制器

(1)硬件读取
S3C2440片内集成了NandFlash控制器,启动时,通过外部针脚的电平高低的硬件配置来获得页大小,数据宽度,地址周期等要素,从而可以在启动时能够完成读取Nandflash到SRAM。
(2)软件读取
S3C2440的片内NandFlash控制器同样对用户开放,允许用于以软件操纵它来读写NandFlash。

2 利用S3C2440片内NandFlash控制器读取NandFlash数据

这篇关于TQ2440开发板学习纪实(8)--- 从NAND Flash读取数据,把代码搬运到SDRAM运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603208

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L