嵌入式设备为什么以及何时同时具有NAND和NOR?

时间:2013-08-25 06:06:20

标签: linux linux-kernel operating-system embedded-linux device-tree

我在嵌入式产品的dts文件中找到了这个代码段 当我们有NAND闪存时,为什么我们有NOR闪存? LCS0,LCS1的含义在下面的localbus节点中提到了什么?

        localbus@a8405000 {
        #address-cells = <2>;
        #size-cells = <1>;
        compatible = "fsl,mpc8313-elbc", "fsl,elbc", "simple-bus";
        reg = <0xa8405000 0x1000>;
        interrupts = <77 0x8>;
        interrupt-parent = <&ipic>;

        // CS0 and CS1 are swapped when
        // booting from nand, but the
        // addresses are the same.
//      ranges = <0x0 0x0 0xfe000000 0x01000000    /* LCS0: NOR BOOT        */
        ranges = <0x0 0x0 0xfe000000 0x02000000    /* LCS0: NOR BOOT        */
                  0x1 0x0 0xa8000000 0x00040000    /* LCS1: NAND CONTROLLER */
//            0x2 0x0 0xa0000000 0x04000000    /* LCS2: FGPA            */
              0x2 0x0 0xa0000000 0x04000000>;  /* LCS2: FGPA            */
//            0x3 0x0 0xff000000 0x01000000>;  /* LCS3: NOR RESERVE     */

        flash@0,0 {
            #address-cells = <1>;
            #size-cells = <1>;
            compatible = "cfi-flash";
//          reg = <0x0 0x0 0x1000000>; /* 16MB */
            reg = <0x0 0x0 0x2000000>; /* 32MB */
            bank-width = <2>;
            device-width = <1>;

            u-boot@0 {
                reg = <0x0 0x80000>;
            };

            xxxx@80000 {
                reg = <0x080000 0x1000000>;
            };

            log@1080000 {
                reg = <0x1080000 0x2c0000>;
            };

            inventry@1340000 {
                reg = <0x1340000 0x20000>;
            };

            xxxxx@1360000 {
                reg = <0x1360000 0x20000>;
            };

            xxxxx@1380000 {
                reg = <0x1380000 0x20000>;
            };

            xxxxx@13a0000 {
                reg = <0x13a0000 0x20000>;
            };

            reserve-nor1@13c0000 {
                reg = <0x13c0000 0xc40000>;
            };

            dummy1@2000000 {
                reg = <0x2000000 0x0>;
            };

            dummy2@2000000 {
                reg = <0x2000000 0x0>;
            };
        };

        nand@1,0 {
            #address-cells = <1>;
            #size-cells = <1>;
            compatible = "fsl,mpc8313-fcm-nand",
                         "fsl,elbc-fcm-nand";
            reg = <0x1 0x0 0x40000>; /* NAND CONTROLLER 256KB */

            dtb-0@0 {
                reg = <0x0 0x20000>;
            };

            kernel-0@20000 {
                reg = <0x20000 0x400000>;
            };

            rootfs-0@420000 {
                reg = <0x420000 0x099e0000>;
            };

            dtb-1@9e00000 {
                reg = <0x09e00000 0x20000>;
            };

            kernel-1@9e20000 {
                reg = <0x09e20000 0x400000>;
            };

            rootfs-1@a220000 {
                reg = <0x0a220000 0x099e0000>;
            };

            internal@13c00000 {
                reg = <0x13c00000 0x6400000>;
            };

            xxxx-log@1a000000 {
                reg = <0x1a000000 0x6000000>;
            };
        };
    };

我完全没有得到以下代码段的含义

        // CS0 and CS1 are swapped when
        // booting from nand, but the
        // addresses are the same.
//      ranges = <0x0 0x0 0xfe000000 0x01000000    /* LCS0: NOR BOOT        */
        ranges = <0x0 0x0 0xfe000000 0x02000000    /* LCS0: NOR BOOT        */
                  0x1 0x0 0xa8000000 0x00040000    /* LCS1: NAND CONTROLLER */
//            0x2 0x0 0xa0000000 0x04000000    /* LCS2: FGPA            */
              0x2 0x0 0xa0000000 0x04000000>;  /* LCS2: FGPA            */
//            0x3 0x0 0xff000000 0x01000000>;  /* LCS3: NOR RESERVE     */

2 个答案:

答案 0 :(得分:2)

  与NAND闪存相比,

NOR-flash 的擦除操作和写入操作更慢。这意味着NAND闪存具有更快的擦除和写入时间。 NAND上的更多擦除单元。因此需要更少的擦除。 NOR闪存可以比NAND快一点读取数据。

NOR提供完整的地址和数据总线,可随机访问其任何内存位置(可寻址到每个字节)。这使其成为旧版ROM BIOS /固件芯片的合适替代品,很少需要更新。它的耐久性是10,000到1,000,000个擦除周期。 NOR非常适合在嵌入式系统中存储代码。此外,对 XiP(eXecute in Place) 的支持使其成为加载初始启动加载程序(甚至在初始化DDR之前)的一个非常有吸引力的选择。

  

NAND-flash 占用每个单元更小的芯片面积。这款制造商的NAND存储密度更高,每比特的成本低于NOR闪存。它还具有NOR闪存耐久性的十倍。 NAND更适合作为包括视频和音频在内的大型文件的存储介质。 USB拇指驱动器,SD卡和MMC卡属于NAND型。

NAND-flash不提供随机访问外部地址总线,因此必须逐块读取数据(也称为页面访问),其中每个块保存数百到数千位,类似于一种顺序数据访问。这是NAND闪存不适合替换ROM的主要原因之一,因为大多数微处理器和微控制器都需要字节级随机访问。

结帐Table 1 in this document说明了各自的比较优点。

答案 1 :(得分:1)

LCSx指的是“本地芯片选择x”。这些是总线上的信号,当设置时将导致芯片响应该总线上的数据请求。因此,通过在闪存芯片上设置LCS0将响应CPU数据请求,并通过设置LCS1,另一个芯片将响应(或类似的东西)。将它们视为额外的地址位。

NOR闪存倾向于用于BIOS和bootroms,因为它通常是“无错误”,而使用NAND可能需要一个软件层来提供纠错(在bootrom加载之前你不会有这种情况......)。

看起来您可以通过交换几条芯片选择线来选择从NAND或NOR启动。这样,当CPU将其引导地址放在总线的地址线上时,您可以控制哪个芯片响应,NOR或NAND。