LCD实验学习笔记(七):NAND FLASH

发布者:不羁少年最新更新时间:2023-06-15 来源: elecfans关键字:LCD  NAND  FLASH  S3C24X0 手机看文章 扫描二维码
随时随地手机看文章

s3c2440 CPU内置NAND FLASH控制器。相关寄存大器起始地址为0x4e000000。

通过设置NFCONF寄存器,设置NAND FLASH 时序。

通过设置NFCONT寄存器,使能NAND FLASH、初始化ECC等。

代码:


 

#define GSTATUS1 (*(volatile unsigned int *)0x560000B0) //读此寄存器可以知道CPU芯片型号
#define BUSY 1

#define NAND_SECTOR_SIZE_LP 2048 //大页每页2048字节
#define NAND_BLOCK_MASK_LP (NAND_SECTOR_SIZE_LP - 1) //大页掩码???

typedef unsigned int S3C24X0_REG32;

//s3c2440 NAND FLASH相关寄存器
typedef struct {
  S3C24X0_REG32 NFCONF;
  S3C24X0_REG32 NFCONT;
  S3C24X0_REG32 NFCMD;
  S3C24X0_REG32 NFADDR;
  S3C24X0_REG32 NFDATA;
  S3C24X0_REG32 NFMECCD0;
  S3C24X0_REG32 NFMECCD1;
  S3C24X0_REG32 NFSECCD;
  S3C24X0_REG32 NFSTAT;
  S3C24X0_REG32 NFESTAT0;
  S3C24X0_REG32 NFESTAT1;
  S3C24X0_REG32 NFMECC0;
  S3C24X0_REG32 NFMECC1;
  S3C24X0_REG32 NFSECC;
  S3C24X0_REG32 NFSBLK;
  S3C24X0_REG32 NFEBLK;
} S3C2440_NAND;

static S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000;//s3c2440 Nand flash 相关寄存器起始地址

//供外部调用的函数声明
void nand_init(void); //初始化
void nand_read(unsigned char *buf, unsigned long start_addr, int size);//读取数据到缓冲区

/* S3C2440的NAND Flash处理函数 */
static void s3c2440_nand_reset(void);
static void s3c2440_wait_idle(void);
static void s3c2440_nand_select_chip(void);
static void s3c2440_nand_deselect_chip(void);
static void s3c2440_write_cmd(int cmd);
static void s3c2440_write_addr_lp(unsigned int addr);
static unsigned char s3c2440_read_data(void);

//复位
static void s3c2440_nand_reset(void)
{
  s3c2440_nand_select_chip();//选片选
  s3c2440_write_cmd(0xff); //复位命令
  s3c2440_wait_idle(); //等待就绪
  s3c2440_nand_deselect_chip(); //取消片选
}

//等待就绪信号
static void s3c2440_wait_idle(void)
{
  int i;
  volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFSTAT;
  //最后一位为1表示忙,忙就一直等
  while (!(*p & BUSY))
  for (i = 0; i < 10; i++);
}

//片选
static void s3c2440_nand_select_chip()
{
  s3c2440nand->NFCONT &= ~(1 << 1); //NFCONT寄存器[1]位Reg_nCE置0
  int i ;
  for (i = 0; i < 10; i++); //等待片选?
}


//取消片选
static void s3c2440_nand_deselect_chip()
{
  s3c2440nand->NFCONT |=(1<<1); //NFCONT寄存器[1]位Reg_nCE置1
}

//发送命令
static void s3c2440_write_cmd(int cmd)
{
  volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFCMD; //p指向NFCMD寄存器
  *p = cmd; //命令写入命令寄存器
}

//发送地址
static void s3c2440_write_addr_lp(unsigned int addr)
{
  int i;
  volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFADDR;
  int col, page;
  col = addr & NAND_BLOCK_MASK_LP; //得到页内地址。 每页2K,页内地址为bit[0-10]
  page = addr / NAND_SECTOR_SIZE_LP; //得到页号。256M为2的28次方,地址总位数为27,即bit[11-27]为页号,共17位
  *p = col & 0xff; //地址后8位 ,A0-A7;
  for (i = 0; i < 10; i++);
  *p = (col >> 8) & 0x0f; //A8-A10
  for (i = 0; i < 10; i++);
  *p = page & 0xff; //页号后后位 A11-A18
  for (i = 0; i < 10; i++);
  *p = (page >> 8) & 0xff;//A19-A26
  for (i = 0; i < 10; i++);
  *p = (page >> 16) & 0x1; //A27
  for (i = 0; i < 10; i++);}

//读数据
static unsigned char s3c2440_read_data(void)
{
  volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFDATA;
  return *p;
}


//初始化Nand Flash
void nand_init(void)
{
  //设置时序
  //这里假设cpu频率100MHz,即一个时钟周期为10ns
  #define TACLS 0
  #define TWRPH0 3 //nand flash手册 twp最低要求12ns,即2个时钟周期以上,所以这里可以取1的,3可以保证400MHz时可用
  #define TWRPH1 0 //nand flash手册 tCLH最低要求5ns,取值0要求CPU频200Mhz以下
  s3c2440nand->NFCONF = (TACLS << 12) | (TWRPH0 << 8) | (TWRPH1 << 4);
  //使能Nand Flash,禁止片选,初始化ECC
  s3c2440nand->NFCONT = (1 << 4) | (1 << 1) | (1 << 0);
  s3c2440_nand_reset(); //复位
}

//读数据
void nand_read(unsigned char *buf, unsigned long start_addr, int size)
{
  //Nand Flash的读取单位最小是page,长度必须是page的整数倍。所以必须对齐
  if ((start_addr & NAND_BLOCK_MASK_LP)||(size & NAND_BLOCK_MASK_LP))
  {
    return;
  }
  s3c2440_nand_select_chip();//发出片选信号

  int i, j;
  for (i = start_addr; i < (start_addr+size);)
  {
    s3c2440_write_cmd(0); //发出READ0命令
    s3c2440_write_addr_lp(i);
    s3c2440_write_cmd(0x30);
    s3c2440_wait_idle();
    //读取页数据
    for ( j = 0; j     {
      *buf = s3c2440_read_data();
      buf++;
    }

  }

  s3c2440_nand_deselect_chip();//取消片选
}


关键字:LCD  NAND  FLASH  S3C24X0 引用地址:LCD实验学习笔记(七):NAND FLASH

上一篇:在EVC环境下开发实现电梯缓冲器复位时间测试系统的应用方案
下一篇:LCD实验学习笔记(十):TFT LCD

推荐阅读最新更新时间:2024-11-17 09:40

STM32学习笔记(6.1):LCD的显示
1. LCD/LCM的基本概念 液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。 LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接件,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。 在平时的学习开发中,我们一般使用的是LCM,带有驱动IC和LCD屏幕等多个模块。 2. FSMC的基本概念 在STM32上开发LCD显示,可以有两种方式来对LCD进行操作,一种是通过普通的IO口,连接L
[单片机]
显示器价格战损害中国LCD供应链利润率
  据iSuppli,液晶电视市场价格下跌是柄双刃剑,它刺激了第三季度中国液晶市场的增长,但同时也损害了整个供应链的利润率,危及中国国内电视制造商的长远利益。   有些OEM厂商有能力利用其它方面的利润来弥补液晶电视方面的亏损,比如新兴的“超薄CRT”电视价格较低,但生产成本更低。然而,随着中国OEM厂商的液晶业务继续表现糟糕,它们将越来越难以保持整体获利。   价格下跌将持续多年,因中国液晶电视销售额到2011年仍能从2006年的73亿美元增长到249亿美元,年复合增长率为27.7%。预计2007年中国液晶电视销售额将达到136亿美元。   据iSuppli,中国厂商在中国市场的液晶电视出货量将增加,预计到2011年单位出货量将
[焦点新闻]
英国反垄断机构批准 SK 海力士收购了英特尔NAND 业务
据外媒报道,英国反垄断机构(CMA)日前表示,根据目前掌握的信息,决定不再对“SK海力士收购英特尔NAND 业务”进行第二阶段审查,这意味着英国已批准该项交易。 去年10月,韩国第二大芯片制造商 SK 海力士签署协议,以 90 亿美元收购英特尔的NAND 业务,其中包括美国分公司的固态硬盘业务及位于中国大连的 NAND 闪存芯片工厂。为完成该笔交易,SK 海力士需要获得主要国家及地区反垄断监管机构的批准。 英国是继美国、韩国、欧洲、中国台湾地区和巴西之后第六个批准两家公司交易的国家及地区。而中国大陆地区和新加坡的反垄断审查目前仍在进行中。SK海力士计划在今年年底前获得以上国家及地区的批准。 业内人士指出,从长远的角度来看,如果
[手机便携]
AVR单片机驱动LCD1602
这几天一直在学习AVR单片机的使用,也移植了几个以前在51单片机上用到的一些函数库,今天在调试LCD1602,把经验分享给大家 在进行读写操作的时候,如果使用了较高的晶振频率,那么在操作时序的时候要适当延时,一般一个空指令就可以了。 在读忙操作的时候要把数据口设置为输入,并开启内部上拉。 下面是实现的代码: #include iom8515.h #define LCD1602_DB PORTA //PA #define LCD1602_RS (1 7) //PC7 #define LCD1602_RW (1 6) //PC6 #define LCD1602_EN (1 5) //PC5 #defi
[单片机]
为何持续看好持续亏损中的LG?
LCD 面板的价格在第三季度继续走低,这意味着 LG Display 或将再次出现亏损。 ● 出货旺季即将开始,LCD 的需求也会增加,这有助于价格上涨。 ● 许多制造商已经表示有意削减 LCD 产量,由于供应减少,应该会提高价格。 ● 需求增加和供应减少可能会在接下来的两个季度为 LG Display 的业绩带来缓解。 今年 9 月,LG Display CEO 宣布辞职,新的 CEO 将于 2020 年 3 月正式任命。此前,LG 因面板价格下跌而陷入亏损。今年第二季度,该公司净亏损 5500 亿韩元(按当前汇率计算约合 4.6 亿美元),同比增长 83%。 薄膜晶体管液晶显示器(TFT-LCD)面板市场在第三季度
[嵌入式]
为何持续看好持续亏损中的LG?
小型LCD背光的LED驱动电路设计
  过去几年来,小型彩色LCD显示屏已经被集成到范围越来越宽广的产品之中。彩色显示屏曾被视为手机的豪华配置,但如今,即便在入门级手机中,彩屏已成为一项标配。幸好,手机产业的经济规模性(全球手机年出货量接近10亿部)降低了LCD彩色显示屏的成本,并使它们集成在无论是便携医疗设备、通用娱乐遥控器、数字相框/图像查看器、教育玩具,或是最新具有WiFi功能的VoIP无绳电话等其他产品中都具有吸引力。   彩色LCD显示屏需要白色背光,以便用户在任何光照环境下都能正常地观看。这个背光子系统包括1个高亮度白光发光二极管(LED)阵列、1个扩散器(diffuser)以扩散光线和1个背光驱动器将可用电能稳压为恒定电流以驱动LED.一块1到1.5英
[电源管理]
小型<font color='red'>LCD</font>背光的LED驱动电路设计
英特尔将向美光出售合资NAND闪存厂股份
北京时间2月29日凌晨消息,英特尔同意与美光科技扩大就闪存芯片领域的合资企业合作,提高双方关系的效率和灵活性。根据双方达成的协议,美光将为英特尔供货NAND闪存产品,而英特尔则将向美光出售价值6亿美元的两家合资晶圆厂股份。   协议规定,英特尔将首先接收美光一半的股份购买资金,另外一半将寄放在美光,可能会按照供货协议退还或用于未来采购。该协议还扩大了双方在NAND闪存共同开发项目上的合作计划,以覆盖新兴存储技术。   该交易预计将在今年上半年完成。   英特尔和美光已经在NAND闪存芯片制造领域合作了几年的时间,该闪存普遍用于智能机和平板电脑。通过合资企业,双方可以分担部分资本支出和研发负担,并同时以制造成本价采购NAND闪
[半导体设计/制造]
东芝200毫米功率芯片晶圆厂上线
日前,东芝公司(Toshiba Corp.)和旗下Kaga东芝电子公司(Kaga Toshiba Electronics Corp.)正式宣布在日本运营一家新的200毫米功率半导体晶圆厂,目标直指大批量生产300毫米晶圆。 该晶圆厂于2006年9月开始建设,将成为东芝分立器件的关键生产基地,制造小信号器件和功率芯片等产品。这座晶圆厂由Kaga东芝生产晶圆片,Kaga东芝是东芝旗下公司。 新晶圆工厂在2007年9月末上线,完成了首阶段投资计划,包括一座新建筑和生产设备。预计整个投资计划将从2006到2010财政年度,总投资550亿日元(约合4.686亿美元)。据称,新晶圆厂每月产能最高将达60,000片。 东芝半导体公司执行副
[焦点新闻]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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