我在嵌入式产品的dts文件中找到了这个片段。
当我们有一个NAND闪光灯时,为什么我们有一个NOR闪光灯?
在下面的localbus节点中提到的LCS0,LCS1的含义是什么?
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 */发布于 2013-08-28 08:42:24
与NAND相比,NOR闪存在擦除操作和写操作方面要慢一些.这意味着NAND有更快的擦除和写入时间.更多的NAND有更小的擦除单位。所以需要更少的擦除。非闪存读取数据的速度比NAND略快.
NOR提供完整的地址和数据总线来随机访问它的任何内存位置(可寻址到每个字节)。这使得它适合替代旧的ROM BIOS/固件芯片,很少需要更新。它的寿命是10,000到1,000,000擦除周期。也不适合在嵌入式系统中存储代码。此外,对XiP(eXecute就位)的支持使得从(甚至在初始化DDR之前)加载初始引导加载程序成为一个非常有吸引力的选择。
NAND占每个单元的较小的芯片面积.该制造商NAND在更大的存储密度和更低的成本每比特比非闪存.它也有多达十倍的耐久的NOR闪光。NAND更适合作为大文件(包括视频和音频)的存储介质。USB拇指驱动器,SD卡和MMC卡是NAND型。
NAND不提供随机访问外部地址总线,因此数据必须按块读取(也称为页面访问),其中每个块包含数百至数千位,类似于一种顺序数据访问。这是NAND不适合取代ROM的主要原因之一,因为大多数微处理器和微控制器都需要字节级的随机访问。
查看在本文件中,说明每种方法的比较优点。
发布于 2013-08-25 06:28:02
LCSx指的是“本地芯片选择x”。这些是总线上的信号,当设置这些信号时,将导致芯片响应总线上的数据请求。因此,通过在闪存芯片上设置LCS0将响应CPU数据请求,通过设置LCS1,另一个芯片将响应(或类似的东西)。把它们看作是额外的地址位。
非闪存倾向于用于BIOS和bootroms,因为它通常是“无错误的”,而使用NAND可能需要一个软件层来提供错误纠正(在加载了引导之前,您不会使用它.)。
看起来,您可以选择从NAND启动,也可以通过交换几个芯片选择线来引导。这样,当CPU将其启动地址放在您控制的总线的地址行上时,您控制哪个芯片响应时,NOR或NAND。
https://stackoverflow.com/questions/18426258
复制相似问题