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

相关文章

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.