s3c2440裸机-Norflash2-适配访问时序

发布时间:2024-07-08  

前面我们了解了norFlash的特性和原理,那么cpu是如何和nor进行通信的呢?下面开始详细介绍。

1.内存控制器适配norflash

如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部norflash的性能进行配置,这里先列出时间参数的含义:



Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCS片选)

Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号)

Tacc:access cycle(数据访问周期)

Tacp:page模式下的访问周期

Tcoh:Chip selection hold time after nOE (nOE信号释放多久后才能释放片选nGCS)

Tcah:Address hold time after nGCSn (片选nGCS释放多久后才能释放地址信号A)

2.我们现在来根据外部norFlash的手册来配置我们的寄存器来设置时序。

我们知道,当从nor启动时,此时nor对应0地址,CPU从0地址读取第一条指令,成功执行。那么问题来了,此时并没有对内存控制器进行设置,去初始化nor,那为什么还能访问norflash呢,还能从0地址取指令执行呢?

答:肯定是CPU配置的默认时序就能兼容此款flash。

下面我们根据此款norflash(MX29LV160D)手册中的访问时序图来分析,如下图:



从上面MX29LV160D手册的时序图中我们看见:

(1)先发送地址信号A
(2)发送片选CE
(3)发送读使能OE
(4)从数据总线上读出数据
(5)释放信号...

从表中我们看见:

发出地址数据(Addresses)后,要等待Taa(要求大于等于70ns)时间,地址数据才有效;
发出片选信号(CE#)后,要等待Tce(要求大于等于70ns)时间,片选信号才有效;
发出读信号(OE#)后要等待Toe(要求大于等于30ns)时间,读信号才有效;

而且表中Tas(地址建立时间,也就是地址发送多久后才能继续发后面的片选信号)最小可以为0,那么说明地址信号(A)、片选(CE)、读(OE)使能信号可以一起发出。

为了简单我们把地址(Addresses),片选信号(CE#),读信号(OE#),同时发出,然后让它们都等待70ns即可(等待地址信号,片选信号,读写使能信号有效)。

我们再看看上面的nor访问时序图,释放地址、片选、读使能信号都没有时间差值dt要求,那么说明地址、片选、读使能信号可以同时释放。

再来看s3c2440内存控制器的配置:



(1)配置数据访问周期Tacc:

从上图可以看到Tacc的默认值是111,对应14个clocks。s3c2440系统上电采用12MHz的晶振,HCLK=OSC=12MHz,那么Tacc=(1/(12*10^6)) * 14≈1166 ns,这个值很大,远超过了我们的nor手册上的Trc=70ns,几乎可以满足所有NorFlash的要求,这也是为什么我们不做初始化也能访问norflash的原因。

启动后,由于我们的时钟HCLK设置成了100MHz,T=1000/100=10ns,Tacc= 10ns*14 >70ns, 所以内存控制器不配置Tacc也是能访问该flash的。为了让访问速率加快,因此设置Tacc>70ns即可,配置成101,8个clocks即可。

(2)配置Tacs,Tcos,Tcoh,Tcah:

从nor的分析中,我们得知地址、片选、读使能同时发出和同时释放,所以配置Tacs,Tcos,Tcoh,Tcah皆为0。

代码如下:
BANKCON0 = (*(volatile unsigned long *)(0x48000004));
void bank0_tacc_set(int val)
{
    BANKCON0 = val << 8;
}

3.测试:

int main(void)
{
    unsigned char c;

    uart0_init();//参考前面的uart编程
    puts("Enter the Tacc val: nr");

    while(1)
    {
        c = getchar();
        putchar(c);
        if (c >= '0' && c <= '7')
        {
            bank0_tacc_set(c - '0');
            led_test();//跑马灯代码我就不贴了,谁都会
        }
        else
        {
            puts("Error, val should between 0~7nr");
            puts("Enter the Tacc val: nr");
        }
    }
    return 0;
}

实验效果:

输入0~4,Tacc小于70ns,无法读取Nor Flash上数据,LED不能闪烁。

输入5~7,Tacc大于70ns,可以读取Nor Flash上数据,LED不断闪烁,且值越小越快。

结论:我们的内存控制器默认配置的tacc一般都能兼容大多数市面上的norflash,一般都是可以访问的,无需进行对内存控制器进行多余的配置。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>