历史上的今天

今天是:2024年09月08日(星期日)

2021年09月08日 | s3c2440学习之路-009 nor flash的简单配置

发布者:oplndctkl出 来源: eefocus关键字:s3c2440  flash  简单配置 手机看文章 扫描二维码
随时随地手机看文章

1.原理

1.1 Bank的划分

2440支持nand flash 和 nor flash启动, 不过nor flash启动时使用的是最保守的配置,即相关的时钟设置成最小值以保证低性能的nor flash也可以工作。nor flash启动时,CPU是从nor flahs读取指令,因为nor flash的访问速度慢导致程序执行的也慢,所以要加快nor flash的运行。这就需要修改nor flash配置相关的寄存器,让其达到最高的访问速度。


2440将内存的控制分成了8个Bank, 通过GCSn引脚来控制。nor flash接在Bank0上,通过GCS0来控制。这个控制是由2440自动来完成,当你访问的内存地址在0x0000_0000~0x0800_0000之间,2440就会自动选通GCS0,因此我们只关注寄存器配置部分即可。

在这里插入图片描述

在这里插入图片描述

1.2时序

先分析一下nor flash的时序。

Tsrw:读、写操作之间的潜伏期 大于45ns

Toeh:输出使能的保持时间 0

Tce:片选使能后过多久数据才有效 70ns之内

Toe:输出使能后过多久数据才有效 30ns之内

Taa:地址信号后过多久数据才有效 70ns之内

Trc:读取数据的周期 大于70ns

Tdf:输出使能或片选使能关闭 多久之后数据才稳定 最大30ns

Tch:片选使能的保持时间 0


通过时序图可以了解到,Toec Toe Taa Tce的时间都是包含在Trc里面的,如果同时发出 使能信号、地址信号、数据信号只要保证Trc大于70ns即可。


Tsrw 需要大于45ns, 不过nor flash的手册有备注说明只是取样所得,不是100%, 因此暂不管这个参数


Tdf 需要30ns,2440没有对应的参数可以设置,因此无法管了

在这里插入图片描述

在这里插入图片描述

2440可以设置时序的参数不多, 可以看到初始值Tacc是111b(14clock),Tacc刚好对应Nor flash 的Trc。因此保证Tacc大于70ns 即可保证Nor flash稳定工作

一开始2440是由外部的12M晶振提供时钟,此时Nor flash 的访问周期就等于14/12M = 11.67ms。当系统时钟配置好后,HCLK=100M, 此时的访问周期等于14/100M = 0.14ms=140ns。


这里我们要把Tacc配置成101b(8clock),让访问时间等于80ns,以最大限度提高nor flash

在这里插入图片描述

在这里插入图片描述

2.主要寄存器

2.1BWSCON

配置位宽,由2440上电读取引脚OM[1:0]决定,因此不用配置

在这里插入图片描述

在这里插入图片描述

2.2BANKCON0

只需要将Tacc配置成8clock即可。 (个人感觉前面讲 nor flash 的Tsrw Tdf可以通过配置Tcah来解决,不过目前没有配置程序一样也可以跑,所以没有管了)

在这里插入图片描述

在这里插入图片描述

3.源码

init.c


int bank0_tacc_set(int value)

{

    /* nor flash can change 0->1, but can't change 1->0

    so can't clear [10:8]

    */

    //BANKCON0 &= ~(0x7 << 8);

    //BANKCON0 |= (value << 8);

    BANKCON0 = value << 8;


    return 0;

}


main.c


int led_test(void)

{

    int i = 0;


    led_init();


    for (i = 4; i <= 6; i++)

    {

        led_on(i);

        delay(100000);

        led_off(i);

    }

}


int main(int argc, char *argv[])

{

    int c = 0;

    uart0_init();


    while(1)

    {

        printf("please input num[0~7]nr");

        c = getchar();

        putchar(c);


        if (c >= '0' && c <= '7')

        {

            bank0_tacc_set(c - '0');

            led_test();

        }

        else

        {

           printf("please input num[0~7]nr");

        }

    }


    return 0;

}


在main函数中,通过输入0~7来给Tacc赋值,led_test是一个流水灯程序。(程序必须以nor 启动)

通过流水灯执行的快慢,来观察给Tacc赋不同值得效果。可以明显的观察到当输入5(8clock)和7(14clock)时,输入5流水灯会执行的更加快。根据测试,输入4~7都可正常工作。


这里有个问题,就是不能执行BANKCON0 &= ~(0x7 << 8), 因为Tacc被清零,此时clcok=0, nor flash就不能正常工作了。

关键字:s3c2440  flash  简单配置 引用地址:s3c2440学习之路-009 nor flash的简单配置

上一篇:s3c2440学习之路-012-0 异常中断基础知识
下一篇:s3c2440学习之路-008 uart实现printf函数

推荐阅读

使用STVD建立完汇编工程项目之后(具本建立方法可以看我的另一篇博文http://blog.csdn.net/u010093140/article/details/49983397),可以看到这个目录结构(以STM8S105C6芯片为例) 其中.asm文件是汇编代码的源文件,.inc文件是包含文件,类似于C语言当在的.c文件和.h文件。接下来让我们来分析一下这三个文件。(分析汇编代码最好也要对STM8单片机的启动...
(文章来源:海西智能装备中心) 现代工业社会发展迅速,传统的生产方式逐渐被智能化、自动化所取代。就国际机器人联合会今年的调查统计数据显示,自2012年以来全球工业机器人安装量保持高速增长,但到了2018年,增速大不如前。越来越多的智能制造企业投入到了工业机器人的研发和生产中,但至少就国内来说,“供大于求”是事实。 从13年开始,中国就是...
一,FSMCFSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。二,FSMC存储块STM32F767的FMC将外部存储器划分为6个固定大小的256M的存储区域,如下图如图:FSMC分为4块,每块256M字节又被划分为4*64,即四个片选NOR / PSRAM使用块1,共2...
近日,国家知识产权局出具“无效宣告请求审查决定书”,决定号为51715,专利号为200810091140.9,宣告专利权全部无效。专利权人株式会社泰塞克(以下简称:泰塞克),无效宣告请求人为苏士杰。图片来源:国知局苏士杰于2021年5月向国家知识产权局提出了无效宣告请求,涉及专利为泰塞克的“半导体测试装置”专利。国家知识产权局经过审查后,宣告ZL20081009...

史海拾趣

问答坊 | AI 解惑

汽车行驶记录仪中USB HOST技术

1. USB 总线的简介USB(Universal Serial Bus )是一种通用串行总线,是一种标准的连接接口。在与外面的USB 从结构和USB HOST连接时,不必重新配置系统和调节接口,USB HOST 自动识别这些接口设备,并配置适当的驱动程序,因此实现了即插即用 ...…

查看全部问答∨

谁能帮我找到10102A 芯片的PDF

谁能帮我找到10102A 芯片的PDF,非常感谢!请联系我QQ:645652168…

查看全部问答∨

CDMA模块

CDMA模块基于CDMA平台的通信模块,它将通信芯片、存储芯片等集成在一块电路板上,使其具有发送通过CDMA平台收发短消息、语音通话、数据传输等功能。CDMA模块可以实现普通CDMA手机的主要通信功能,也可以说是一个“精简版”的手机。电脑、单片机、AR ...…

查看全部问答∨

基于ARM的SD主控制器的设计与实现.pdf

基于ARM的SD主控制器的设计与实现.pdf…

查看全部问答∨

在6F877,18F1320,18F1220上通过的18B20程序

这是在6F877,18F1320,18F1220上通过的18B20程序,18B20主要是延时问题,这个解决了,什么都可以通过。 # include <pic18f1220.h> # define uch unsigned char # define unint unsigned int # define DQ        R ...…

查看全部问答∨

编译uclinux内核时候遇到的问题,帮我看看吧。

由于毕业设计需要和本身兴趣,要构造ARM+uclinux,本机Linux版本:UBUNTU6 .06. 在本机上安装了www.uclinux.org上下的arm-elf-tools, 然后arm-elf-gcc-v,显示如下 Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specs gcc ver ...…

查看全部问答∨

DriverWized生成的应用程序

用DS3.2的DriverWized生成一个驱动程序后. 生成的win32 console应用程序无法打开和运行.exe文件. 错误提示: Could not execute: Bad executable format (Win32 error 193) Cannot execute program 为什么我的应用程序无法运行? 另外如何直接在D ...…

查看全部问答∨

怎样程序烧写到指定的flash地址里?

在项目中遇到一个问题:需要将一个变量放到一个指定的flash地址里,即flash的绝对地址中。我查看了IAR的complier手册,上面的例子说以下面的方式定义即可。const int bootKey @ 0x0801FFFC = 3; /* O ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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