两者都是电可擦写的。
NAND flash 和 NOR flash 均使用 floating gate MOSFETs。
比较项目 | NAND flash | NOR flash |
---|---|---|
Gate | bit line 和 word lines 之间装配的是一个NAND 门 | bit line 和 word lines 之间装配的是一个NOR门 |
读/写 | 读/写基于page(页) | 需要额外的地址线读/写,random-access,所以可用于XIP(execute in place) |
接口引脚 | 少 | 总线连接 |
主要应用 | File storage | Code execution |
容量 | High | Low |
出厂时是否允许坏块 | 允许 | 不允许 |
Cost per bit | Low | |
Active power | Low | |
Standby power | Low | |
Write speed | Fast | |
Read speed | Fast | |
Execute in place (XIP) | No | Yes |
Reliability | High | |
主要生产厂家(截至2019) | Samsung Electronics – 34.9% Kioxia – 18.1% Western Digital Corporation – 14% Micron Technology – 13.5% SK Hynix – 10.3% Intel – 8.7% |
|
lauterBach 支持 | lauterBach支持的最新NAND flash controller列表 | lauterBach支持的最新NOR flash器件列表 |
用小容量的NOR Flash存储启动代码,比如uboot,系统启动后,初始化对应的硬件,包括SDRAM等,然后将NAND Flash上的Linux 内核读取到内存中,做好该做的事情后,就跳转到SDRAM中去执行内核了。
这样的好处是由于NAND 本身有坏块的可能性,所以为了保障启动万无一失,很多要求高级安全的产品,标注必须从NOR Flash启动uboot,而且从NOR启动还有一个好处就是启动速度快,NAND Flash的优点是容量大,但是读取速度不快,比不上NOR Flash,比如一些对于开机速度有要求的产品应用,比如车载液晶仪表,这类产品为了快速启动一般都是NOR FLASH+EMMC的配置,当然像瑞萨、cypress等平台直接上hyperflash那就更快了。
参考:
ARM calls FIQ the fast interrupt, with the implication that IRQ is normal priority. In any real system, there will be many more sources of interrupts than just two devices and there will therefore be some external hardware interrupt controller which allows masking, prioritization etc. of these multiple sources and which drives the interrupt request lines to the processor.
To some extent, this makes the distinction between the two interrupt modes redundant and many systems do not use nFIQ at all, or use it in a way analogous to the non-maskable (NMI) interrupt found on other processors (although FIQ is software maskable on most ARM processors).
$ vim test.c
#include <stdio.h>
int main(void)
{
int i;
for(i=0;i<10;i++)
printf("%d \n\r",i);
printf("----------");
for(i=0;i<10;++i)
printf("%d \n\r",i);
return;
}
编辑完毕后,shift+: wq 保存退出。
$ gcc test.c -o test
$ ./test
0
1
2
3
4
5
6
7
8
9
----------
0
1
2
3
4
5
6
7
8
9
// 一位工程师写的示例代码
// 向这位工程师致敬!
//
int a = 0; //全局初始化区
int a = 0; //全局初始化区
char *p1; //全局未初始化区
main() {
int b; //栈
char s[] = "abc"; //栈
char *p2; //栈
char *p3 = "123456"; //123456\0在常量区,p3在栈上。
static int c = 0; //全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
//分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}
1 板子通过usb2uart连接到ubuntu虚拟机(可移动设备名称为:Google Salxxxxxx)。
并启动android。
2 虚拟机上首先要安装VMware Tools(否则,会看不到共享文件夹)。
3 启用windows下共享文件夹、
(1)要传输的文件,例如,test.txt
(2)android img文件夹——含adb命令
以上两者均位于该共享文件夹。
1 虚拟机上,进入终端,并进入上述共享文件夹下,或软连接目录。
2 shell下,
$ ./adb root
restarting adbd as root
$ ./adb shell (可以进入板上目录)
salvator:/ # ls
acct dev init.zygote64_32.rc sdcard
bin etc lost+found storage
bugreports init mnt sys
cache init.environ.rc odm system
charger init.rc oem ueventd.rc
config init.recovery.salvator.rc postinstall vendor
d init.usb.configfs.rc proc
data init.usb.rc product
default.prop init.zygote32.rc sbin
salvator:/sdcard/Movies # exit
$ ./adb push /home/titron/test.txt /sdcard/Download
$ ./adb push /home/m3n_imgs/aaa.mp3 /data/media/0/Download
$ ./adb push /home/m3n_imgs/bbb.apk /data/media/0/Download
# 说明:
# 推送到/data/media/0/Download,
# 相当于推送到/sdcard/Download
#
# "/data/media/0"是安卓手机内置存储的真实目录,
# 而"/sdcard"是内置存储被安卓系统挂载的快捷方式(指向"/data/media/0");
# 通常需要存储空间权限的手机app会访问后者,前者需要ROOT权限才能访问,因此这两个文件夹是一个目录
# 有关android内部存储和外部存储,请参看下面的附录连接。
附录: