历史上的今天
返回首页

历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2021年10月11日 | S3C2440裸机------NandFlash编程_芯片id读取

2021-10-11 来源:eefocus

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%xnr",buf[0]);

printf("device  id  = 0x%xnr",buf[1]);

printf("3rd byte    = 0x%xnr",buf[2]);

printf("4th byte    = 0x%xnr",buf[3]);

printf("page  size  = %d kbnr",1  <<  (buf[3] & 0x03));

printf("block size  = %d kbnr",64 << ((buf[3] >> 4) & 0x03));

printf("5th byte    = 0x%xnr",buf[4]);

 

}

 

 

void nand_flash_test(void)

{

char c;

 

while (1)

{

/* 打印菜单, 供我们选择测试内容 */

printf("[s] Scan nand flashnr");

printf("[e] Erase nand flashnr");

printf("[w] Write nand flashnr");

printf("[r] Read nand flashnr");

printf("[q] quitnr");

printf("Enter selection: ");

 

c = getchar();

printf("%cnr", 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;

}

}

}

推荐阅读

史海拾趣

振宝佳(DMBJ)公司的发展小趣事

为了提升生产效率和产品品质,振宝佳公司在韩国引进了专业的全制动生产线和智能化的电子监察检查设备。这些先进的生产线和设备使公司的生产能力得到了显著提升,同时也确保了产品的质量和稳定性。这些投入为公司赢得了客户的信赖和好评。

Abbotec Incorporated公司的发展小趣事

在追求经济效益的同时,Abbotec也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,Abbotec还积极参与社会公益活动,为社会的发展做出贡献。

这五个故事都是基于电子行业发展的常见模式而虚构的,旨在展示一个电子企业可能经历的发展过程。请注意,这些故事并非针对任何真实存在的企业,也不涉及任何具体的褒贬评价。

ELM [ELM Electronics]公司的发展小趣事

随着电子技术的快速发展,ELM意识到只有不断创新才能保持市场竞争力。因此,公司加大了研发投入,专注于新技术的研发和应用。经过数年的努力,ELM成功推出了一系列具有创新性和领先性的电子产品,如高性能的集成电路、先进的传感器等。这些产品的推出不仅丰富了ELM的产品线,也进一步提升了公司的市场地位。

Eutech公司的发展小趣事

EUtech公司注重品牌塑造和市场拓展。他们通过参加国际展会、举办技术研讨会等方式提高品牌知名度。同时,公司积极拓展海外市场,产品已出口到新加坡、香港、韩国等国家和地区。凭借优异的产品质量和良好的市场口碑,EUtech公司逐渐在国际市场上树立起了品牌形象。

Goldentech Discrete Semiconductor Inc公司的发展小趣事

进入21世纪后,随着全球电子市场的竞争加剧,Goldentech意识到单靠技术创新已不足以维持其市场地位。因此,公司开始积极寻求与行业领先企业的战略合作。通过与一家知名芯片设计公司的深度合作,Goldentech成功将其高性能离散半导体器件集成到对方的芯片设计中,从而实现了产品的广泛应用。这一合作不仅扩大了Goldentech的市场份额,还提升了其品牌知名度和行业影响力。

Edsun Laboratories Inc公司的发展小趣事

面对日益严重的环境问题,ECM Electronics Limited.积极响应国家节能减排的号召,将绿色发展和可持续发展作为企业的重要战略。公司采用环保材料和节能技术,降低产品能耗和排放。同时,公司还积极参与环保公益活动,推动行业绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

问答坊 | AI 解惑

LM3S 系列单片机休眠与深度休眠应用笔记(二)

1.4 深度睡眠模式设置步骤 处理通过调用WFI 指令即可进入睡眠模式,但要进入深度睡眠实现最低的功耗需要正确配置,其步骤如下: 1. 使能ACG 自动时钟门控。这样睡眠模式和深度睡眠模式的外设时钟可以单独控制。 2. 配置寄存器DCGC0、 DCGC1 和DC ...…

查看全部问答>

cadence16.2学习.pdf

很不错的资料 ,希望对大家有所帮助…

查看全部问答>

求教数据存储问题

MSP430F449中我想把一个整形的数A存入某地方 掉电也不丢失! 作为以后程序运行的参数。 应该是放在FLASH里面吧?或者建议是在哪儿? 怎么写和读? 应该读写各一句话就能搞定的吧?不是例子里面那么复杂!! 求给个例子或者指个方向 谢谢 ...…

查看全部问答>

请问广州哪里有零售漆包线、绝缘纸和绝缘漆的地方??

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 请问广州哪里有零售漆包线、绝缘纸和绝缘漆的地方?? 昨天下午走了一下午,传说中有这些东西的解放中,都没看见有卖忘各位朋友指出哪里有得买  …

查看全部问答>

在同一空间如果存在多个ZigBee网络,终端设备如何辨别并加入属于自己的网络?

请斑竹指教,谢谢!   [ 本帖最后由 lvhoujun 于 2011-9-19 22:52 编辑 ]…

查看全部问答>

发明者电子设计宝典

本帖最后由 dontium 于 2015-1-23 12:51 编辑 很基础的一些东西 在论坛上下了不少东西 也要贡献一下 如果有人发过的话版主就删了吧 …

查看全部问答>

关于C2000芯片的FLASH锁死----以及解决办法

FLASH锁死了这是为什么,有没有办法解锁。为什么会有类似下面这几种报错: Read status value 0x0001 from symbol PRG_status(24x系列) ADC Calibration not complete, check if device is unlocked and recalibrate.(2833x系列)   答:FL ...…

查看全部问答>

关于施密特触发器的直流信号处理

想问一下各位大侠,施密特触发器对于直流信号是怎么处理的?(我仿真过,发现如果输入一个电压介于两个门限电压之间,那输出电压和输入电压是成比例的,谁能告诉我为什么啊?)…

查看全部问答>

富士通工业测控DIY板硬件说明

富士通DIY工业控制板原理图及PCB发布     已经1周多了,当初就打算写个硬件说明什么的,让大家使用“富士通DIY工业控制板” 时更加方便。也能让大家明白电路当初那么做的一些意图。上一周基本上已经写好,为了让大家看起 ...…

查看全部问答>

STM3210B--电机控制入门套件 FOC 程序库(sensorless)

附件中的库已经验证在demo板上,运行正常。 [ 本帖最后由 安_然 于 2013-1-30 16:02 编辑 ]…

查看全部问答>