S3C2440裸机------NandFlash编程_芯片id读取

2024-08-30 23:08

本文主要是介绍S3C2440裸机------NandFlash编程_芯片id读取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.芯片id读取时序图

 2.使能芯片

3.发送命令函数

4.发送地址函数

5.读数据函数

 6.完整代码


1.芯片id读取时序图

我们先看一下NandFlash芯片手册中读取id的时序图,后面我们要根据这个时序图去写代码。

 2.使能芯片

从前面的时序图我们可以看出,我们首先要发出片选信号,我们通过设置下图寄存器的Reg_nCE位来进行设置,

void nand_select(void)
{/*使能片选*/NFCONT &=~(1<<1);
}void nand_deselect(void)
{/*禁止片选*/NFCONT |= (1<<1);
}

3.发送命令函数

我们从最前面的时序图可以看到,要想读取设备id,首先要向NandFlash发送90命令,然后相应的CLE和WE信号要使能,这里的时序不需要我们管,我们只需要往命令寄存器写值即可,NandFlash控制器会为我们做好相应的时序。

void nand_cmd(unsigned char cmd)
{volatile int i;NFCCMD = cmd;for(i=0; i<10; i++);
}

4.发送地址函数

void nand_addr_byte(unsigned char addr)
{volatile int i;NFADDR = addr;for(i=0; i<10; i++);
}

5.读数据函数

unsigned char nand_data(void)
{return	NFDATA;
}

 6.完整代码

#include "s3c2440_soc.h"
#include "my_printf.h"void nand_init(void)
{
#define  TACLS   0
#define  TWRPH0  1
#define  TWRPH1  0/*设置NAND FLASH的时序*/NFCONF = (TACLS<<12) | (TWRPH0<<8) | (TWRPH1<<4);/*使能NAND FLASH控制器,初始化ECC,禁止片选*/NFCONT = (1<<4) | (1<<1) | (1<<0);
}void nand_select(void)
{/*使能片选*/NFCONT &=~(1<<1);
}void nand_deselect(void)
{/*禁止片选*/NFCONT |= (1<<1);
}void nand_cmd(unsigned char cmd)
{volatile int i;NFCCMD = cmd;for(i=0; i<10; i++);
}void nand_addr_byte(unsigned char addr)
{volatile int i;NFADDR = addr;for(i=0; i<10; i++);
}unsigned char nand_data(void)
{return	NFDATA;
}void nand_chip_id(void)
{ unsigned char buf[5]={0};nand_select(); nand_cmd(0x90);nand_addr_byte(0x00);buf[0] = nand_data();buf[1] = nand_data();	buf[2] = nand_data();buf[3] = nand_data();buf[4] = nand_data();	nand_deselect(); 	printf("maker   id  = 0x%x\n\r",buf[0]);printf("device  id  = 0x%x\n\r",buf[1]);	printf("3rd byte    = 0x%x\n\r",buf[2]);		printf("4th byte    = 0x%x\n\r",buf[3]);			printf("page  size  = %d kb\n\r",1  <<  (buf[3] & 0x03));	printf("block size  = %d kb\n\r",64 << ((buf[3] >> 4) & 0x03));	printf("5th byte    = 0x%x\n\r",buf[4]);}void nand_flash_test(void)
{char c;while (1){/* 打印菜单, 供我们选择测试内容 */printf("[s] Scan nand flash\n\r");printf("[e] Erase nand flash\n\r");printf("[w] Write nand flash\n\r");printf("[r] Read nand flash\n\r");printf("[q] quit\n\r");printf("Enter selection: ");c = getchar();printf("%c\n\r", c);/* 测试内容:* 1. 识别nand flash* 2. 擦除nand flash某个扇区* 3. 编写某个地址* 4. 读某个地址*/switch (c)		 {case 'q':case 'Q':return;break;case 's':case 'S':nand_chip_id();break;case 'e':case 'E':break;case 'w':case 'W':break;case 'r':case 'R':break;default:break;}}
}

这篇关于S3C2440裸机------NandFlash编程_芯片id读取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应