插:网络上有2440中文手册,看起来挺方便。

Nor和Nand flash概述

nor flash不可以直接写,否则就跟内存一样了,上面的程序很容易被破坏。
但是读nor就和读内存一样,发出地址直接读就行了。
在这里插入图片描述
nand的接线少,数据线上既传输命令又传输数据还传输地址!
nor和nand都是不能直接写的,要发出一定的命令。
nor贵且容量小,为什么还用呢?
优点就是无位反转和坏块,如果要高可靠性地存储程序,尤其是重要的需要稳定的程序,错一点都不行的,一般就用nor。
海量数据用nand存储,比如视频监控的信息。
手机里面都是用的nand,现在技术好了,位反转和坏块出现的几率也小了。万一真的出现了,重新刷个固件也就好了。

Nor Flash支持XIP,即代码可以直接在Nor Flash上执行,无需复制到内存中。这是由于NorF lash的接口与RAM完全相同,可以随机访问任意地址的数据。Nor Flash进行读操作的效率非常高,但是擦除和写操作的效率很低,另外,Nor Flash的容量一般比较小。NAND Flash进行擦除和写操作的效率更高,并且容量更大。一般而言,Nor Flash用于存储程序,NAND Flash用于存储数据。基于NAND Flash的设备通常也要搭配Nor Flash以存储程字。
cpu可以直接从nor上面读取指令执行,但是nand就得把程序弄到sram中了,不过这个是2440帮我们做好的,不用管,自动拷贝4K到片内内存SRAM。

Flash存储器件由擦除单元(也称为块)组成,当要写某个块时,需要确保这个块己经
被擦除。Nor Flash的块大小范围为64kB、128kB:NAND Flash的块大小范围为8kB,64kB,擦/写一个Nor Flash块需4s,而擦/写一个NAND Flash块仅需2ms。Nor Flash的块太大,不仅增加了擦写时间,对于给定的写操作,Nor Flash也需要更多的擦除操作——特别是小文件,比如一个文件只有IkB,但是为了保存它却需要擦除人小为64kB—128kB的Nor Flash块。

Nor Flash的接口与RAM完全相同,可以随意访问任意地址的数据。而NAND Flash的
接口仅仅包含几个I/O引脚,需要串行地访问。NAND Flash一般以512字节为单位进行读写。这使得Nor Flash适合于运行程序,而NAND Flash更适合于存储数据。

容量相同的情况下,NAND Flash的体积更小,对于空间有严格要求的系统,NAND Flash可以节省更多空间。市场上Nor Flash的容量通常为IMB~4MB(也有32MB的Nor Flash),NAND Flash的容量为8MB~512MB。容量的差别也使得Nor Flash多用于存储程序,NAND Flash多用于存储数据。

对于Flash存储器件的可靠性需要考虑3点:位反转、坏块和可擦除次数。所有Flash器件都遭遇位反转的问题:由于Flash固有的电器特性,在读写数据过程中,偶然会产生一位或几位数据错误(这种概率很低),而NAND Flash出现的概率远大于Nor Flash,当位反转发生在关键的代码、数据上时,有可能导致系统崩溃。当仅仅是报告位反转,重新读取即可:如果确实发生了位反转,则必须有相应的错误检测/恢复措施。在NAND Flash上发生位反转的概率史高,推荐使用EDC/ECC进行错误检测和恢复。NAND Flash上面会有坏块随机分布在使用前需要将坏块扫描出来,确保不再使用它们,否则会使产品含有严重的故障。NAND Flash每块的可擦除次数通常在100000次左右,是Nor Flash的10倍。另外,因为NAND Flash的块大小通常是NorF lash的1/8,所以NAND Flash的寿命远远超过Nor Flash。

嵌入式Linux对Nor、NAND Flash的软件支持都很成熟。在Nor Flash上常用jffs2文
件系统,而在NAND Flash常用yaffs文件系统。在更底层,有MTD驱动程序实现对它们的读、写、擦除操仵,它也实现了EDC/ECC校验。

Nand Flash只有8个I/O引脚的好处:

  1. 减少外围引脚
  2. 提高系统的可扩展性,因为没有像其他设备一样用物理大小对应的完全数目的addr引脚,在芯片内部换了芯片的大小等的改动,对于用全部的地址addr的引脚,那么就会引起这些引脚数目的增加,比如容量扩大一倍,地址空间/寻址空间扩大一倍,所以,地址线数目/addr引脚数目,就要多加一个,而对于统一用8个I/O的引脚的Nand Flash,由于对外提供的都是统一的8个引脚,内部的芯片大小的变化或者其他的变化,对于外部使用者(比如编写nand flash驱动的人)来说,不需要关心,只是保证新的芯片,还是遵循同样的接口,同样的时序,同样的命令,就可以了。这样就提高了系统的扩展性。

nor flash不需要初始化,但是nand flash需要!详情见nand初始化章节!

用Uboot操作Nor Flash查看其特性

(下文中有uboot操作nand,跟nor不同,值得关注。nor是直接操作内存,nand是操作寄存器,因为nand时序复杂,有自己的控制器方便操作。对uboot而言,还是差不多的)

uboot有命令可以访问内存,nor又可以像内存一样访问,所有把uboot下载到nor中启动,然后就可以用UBOOT的命令读写nor了,不用编程就可以读写nor了,方便我们学习和验证nor的特征和命令格式等。比如下表:
在这里插入图片描述

下面我们使用u-boot来体验Nor Flash的操作(开发板设置Nor启动,进入u-boot)。
开发板一定要设为nor启动,因为nor启动时,cpu访问0开始的地址就是nor地址了。
而在nand启动的,CPU可以看到的零地址是片内内存SRAM,看不到NOR,更无法读写nor了。

首先要使用OpenJTAG烧写UBOOT到Nor Flash
OpenJTAG开发了一个工具:oflash,用它来烧写。

那么我们怎么用u-boot来操作呢?
Nor Flash手册里都会有一个命令的表格,如图:
在这里插入图片描述

上面的word和byte指的是,这个nor芯片(很多的Nor Flash)可以配置成位宽是16或者是8。
(word是16?!!!!!)
对于我们使用的jz2440开发板,我们的nor接了16根数据线,位宽是16,看word行就好了。

复位(reset):往任何一个地址写入F0。

怎样读ID呢?
读ID(ReadSiliconID):往Nor Flash的555地址写AA,再往2AA的地址写入55,再往555的地址写入90,然后就可以读数据了。通过读ADI这个地址,就可以读到DDI数据了。
在这里插入图片描述
ADI是什么呢?A1=0,A0=0的时候读到的是厂家ID。0/1时读出的是设备ID。
这A1,A0是什么意思呢???????????????????
根据后面的实验,貌似是00表示0地址,01就表示地址1。不是很明白。

后面实验可以看一下读出的内容和这里是否对应。

实验1:
读数据:在u-boot上执行:md.b0(这应该就是一个读内存的指令)
结果(和我们烧进去的数据完全一样):
在这里插入图片描述

这些数据就是我们烧写的uboot,在电脑上用二进制工具打开uboot.bin:
在这里插入图片描述

可见,内容和上面是一样的。
可以得出结论:u-boot可以像读内存一样来读nor flash。

实例2
读ID(参考Nor手册):
往地址555H写入AAH(解锁)
往地址2AAH写入55H(解锁)
往地址555H写入90H(命令)
读0地址得到厂家ID(C2H)
读1地址得到设备ID(22DAH或225BH)
退出读ID状态:给任意地址写F0H就可以了。
在这里插入图片描述
容易忘记:
2440发出(555H<<1)地址,Nor Flash才能收到555H这个地址。
在这里插入图片描述
其中涉及的地址的变换容易忘记做!!2440发出的地址其实就是nor需要的地址×2。

1).当执行过
md.w 0 1
结果(输出厂家ID):
00000000:00c2…(00c2就是厂家ID)
2).当执行过
md.w 2 1
结果(输出设备ID):
00000002:2249I"(2249就是设备ID)
3).当执行
mw.w 0 f0
就退出读ID的状态,
执行:
md.b0
结果:
00000000:17.(读到的就是Nor Flash地址·0的数据)

Nor Flash的两种规范:
两种规范,貌似就是对应两种接口。

通常内核里面要识别一个 Nor Flash 有两种方法:
一种是 jedec 探测,读取Flash的制造商ID和设备ID(在内核里有这个nor flash 的所有信息,换另外一款芯片时,若内核里没有这款芯片的描述,需手动添加该器件的各种参数),以确定Flash的大小和算法。
就是在内核里面事先定义一个数组,该数组里面放有不同厂家各个芯片的一些参数,探测的时候将 flash 的 ID 和数组里面的 ID 一一比较,如果发现相同的,就使用该数组的参数。
(jedec就是读ID的命令,发出命令实现识别nor,和代码中的数组信息进行匹配。老式的norflash规范都是要先读id然后跟数组比较,如果数组中没有对应的信息还得修改数组的内容使有匹配的,比较麻烦。)(貌似芯片中不带有更多信息,都靠软件数组的内容获取信息。)
(可是这里nor flash的信息又可以通过发上面表格的命令获取,貌似 jedec 探测也能获取信息呀????????上面表格table5中的命令是什么模式的呢????好像只有最后一个是进入cfi模式呀???????)
总结:上面表格中nor的大部分命令都是和这两个规范无关的。两种规范仅是针对如何获取某些特定描述信息而言的,(具体可以查看cfi的命令都是查询些什么)。和规范相关的只有两个命令:
在这里插入图片描述
查询ID,后续通过jedec规范得到那些信息。
在这里插入图片描述
进入cfi模式,通过后续cfi的命令查询哪些信息。

jedec规范对应的内核中的数组:
在这里插入图片描述
jedec 探测的优点就是简单,缺点是如果内核要支持的 flash 种类很多,这个数组就会很庞大。内核里面用 jedec 探测一个芯片时,是先通过发命令来获取 flash 的 ID,然后和数组比较,但是 flash.c 中连 ID 都是自己通过宏配置的。

② 一种是 CFI(common flash interface)探测,公共Flash接口。
用来帮助程序从Flash芯片中获取操作方式信息,就是直接发各种命令来读取芯片的信息,比如 ID、容量等,芯片本身就包含了电压有多大,容量有有多少等信息。
新的nor flash规范让nor flash去支持 CFI接口,芯片内部本身就带有各种属性,可以直接读出来。换芯片时,不需修改内核代码。
而上面的EDEC用来帮助程序读取Flash的制造商ID和设备ID(在内核里有这个nor flash 的所有信息,换另外一款芯片时,若内核里没有这款芯片的描述,需手动添加该器件的各种参数),以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。

下面对在Nor Flash上操作,2440上操作,U-BOOT上操作cfi 探测(读取芯片信息)进行比较参考芯片手册。
在这里插入图片描述
往nor flash的55H地址写入98H,就会进入cfi 接口查询的模式。
在这里插入图片描述
…中间省略很多对应于cfi接口查询信息的命令。

在这里插入图片描述
往nor flash的55H地址写入98H,就会进入cfi 接口查询的模式之后,读取读地址10H就可以得到0051,读地址11H得到0052,读地址12H得到0059 (连起来其实就是cfi)
读地址27H得到容量。
在这里插入图片描述
实验现象:
在这里插入图片描述

15的十进制就是21,2的21次方=2M,所以这个nor flash就是两兆的。

读完信息,怎么退出CFI模式呢?
往任意一个地址写F0就可以了。如mw.w 0 f0

(上文中jedec模式下可以发命令读取ID和软件中数组比较。读取ID后怎么退出读ID的状态,也是任意地址写F0,如mw.w 0 f0!)

只有退出了上面这些查询的模式,才能读取nor上实际的数据的(像读内存那样)。
在这里插入图片描述

补充:手册表格里下面两个区域是什么意思呢?
在这里插入图片描述
有的norflash可以支持:前面一部分32K擦除,后面一个区域是64K为单位擦除。

用Uboot写nor flash

上面说的都是读nor,写是怎样的?
nor是不可以直接像内存一样写的!
在这里插入图片描述
注意,地址要选大一点,我们uboot是放在nor中的,做这个实验如果写在前面的地址会破坏uboot的。

怎样把数据写进Nor Flash进去呢?
写数据之前必须保证,要写的地址是擦除的。
因为nor的写操作只能把1写成0,0是不能写成1的。而擦除是写成全1的。
我们烧写时,如果上面的数据,不是0ffff,就是没有被擦除过,我们就要先擦出,擦除完后,才可以烧写,擦除烧写的命令可以从芯片手册里面获得。

芯片手册中命令表格查到:
在这里插入图片描述
下面是Nor Flash的写操作,如下表:
在这里插入图片描述
1).U-BOOT执行完上述指令后,0x1234,就被写到0x100000地址处,
执行:
md.w1000001
结果(1234被写进去):
00100000:1234 4
从这里可以看出来U-BOOT的操作不是很复杂。

2).我们再次往0x100000地址处,写入0x5678,执行如下命令,出错!!!!易错点!
mw.w aaa aa
mw.w 554 55
mw.w aaa a0
mw.w 100000 5678
查看0x100000地址处的数据
md.w 100000 1
结果:
00100000:12300.
0x100000地址处的数据不是0x5678,写操作失败,失败的原因是,原来的数据已经是0x1234不是全0xffff,再次写操作失败,(Nor Flash只有先擦出,才能烧写)。

在这里插入图片描述
注意擦除:
在这里插入图片描述
SA表示的是这个扇区地址。

Nor Flash编程,代码读写nor

上面的内容回了,这里挺简单的,视频不看了,笔记不记了。
详情参考https://blog.csdn.net/thisway_diy/article/details/79397638
部分代码挺有意思,复制过来。

最关键的基础函数,值得学习:

#define NOR_FLASH_BASE  0  /* jz2440, nor-->cs0, base addr = 0 *//* 比如:   55H 98 * 本意是: 往(0 + (0x55)<<1)写入0x98*/
void nor_write_word(unsigned int base, unsigned int offset, unsigned int val)
{volatile unsigned short *p = (volatile unsigned short *)(base + (offset << 1));*p = val;
}/* offset是基于NOR的角度看到,往NOR Flash某个地址发送指令 */
void nor_cmd(unsigned int offset, unsigned int cmd)
{nor_write_word(NOR_FLASH_BASE, offset, cmd);
}/*nor_read_word函数是从NOR Flash 读取两个字节(本开发板位宽16bit),读取数据的地址,是基于2440,所以读取NOR Flash某个地址上的数据时,需要把NOR Flash对应的地址左移一位(地址乘以2)。*/
unsigned int nor_read_word(unsigned int base, unsigned int offset)
{volatile unsigned short *p = (volatile unsigned short *)(base + (offset << 1));return *p;
}/*读取地址中的数据
向nor_dat函数中写入NOR Flash某个地址,返回该NOR Flash地址上的数据。*/
unsigned int nor_dat(unsigned int offset)
{return nor_read_word(NOR_FLASH_BASE, offset);
}//等待烧写完成 : 读数据, Q6无变化时表示结束 (参考芯片手册),
void wait_ready(unsigned int addr)
{unsigned int val;unsigned int pre;pre = nor_dat(addr>>1);val = nor_dat(addr>>1);while ((val & (1<<6)) != (pre & (1<<6))){pre = val;val = nor_dat(addr>>1);		}
}

翻看nor flash芯片手册,
发出program,数据写入命令后,怎么判断写入结束呢?
在这里插入图片描述
上面提到查询polling一个数据位。
在这里插入图片描述

toggle就是变化的意思,貌似这里如果是还在写入的过程,那么每读一次它就会变一个值。第一次读可能是0,下次读就是1。当我们两次读到Q6的值没变化的时候,就说明读写已经完成了。

下面是main直接调用的大函数,自己创建个菜单的这种格式,自己值得学一学

	void nor_flash_test(void)
233	{
234		char c;
235
236		while (1)
237		{
238			/* 打印菜单, 供我们选择测试内容 */
239			printf("[s] Scan nor flash\n\r");
240			printf("[e] Erase nor flash\n\r");
241			printf("[w] Write nor flash\n\r");
242			printf("[r] Read nor flash\n\r");
243			printf("[q] quit\n\r");
244			printf("Enter selection: ");
245
246			c = getchar();
247			printf("%c", c);
248
249			/* 测试内容:
250			 * 1. 识别nor flash
251			 * 2. 擦除nor flash某个扇区
252			 * 3. 编写某个地址
253			 * 4. 读某个地址
254			 */
255			switch (c)		 
256			{
257				case 'q':
258				case 'Q':
259					return;
260					break;
261				
262				case 's':
263				case 'S':
264					do_scan_nor_flash();
265					break;
266
267				case 'e':
268				case 'E':
269					do_erase_nor_flash();
270					break;
271
272				case 'w':
273				case 'W':
274					do_write_nor_flash();
275					break;
276
277				case 'r':
278				case 'R':
279					do_read_nor_flash();
280					break;
281				default:
282					break;
283			}
284		}
285	}

功能代码如下:

/* 进入NOR FLASH的CFI模式* 读取各类信息*/
void do_scan_nor_flash(void)
{char str[4];unsigned int size;int regions, i;int region_info_base;int block_addr, blocks, block_size, j;int cnt;int vendor, device;/* 打印厂家ID、设备ID */nor_cmd(0x555, 0xaa);    /* 解锁 */nor_cmd(0x2aa, 0x55); nor_cmd(0x555, 0x90);    /* read id */vendor = nor_dat(0);device = nor_dat(1);nor_cmd(0, 0xf0);        /* reset */nor_cmd(0x55, 0x98);  /* 进入cfi模式 */str[0] = nor_dat(0x10);str[1] = nor_dat(0x11);str[2] = nor_dat(0x12);str[3] = '\0';printf("str = %s\n\r", str);/* 打印容量 */size = 1<<(nor_dat(0x27));printf("vendor id = 0x%x, device id = 0x%x, nor size = 0x%x, %dM\n\r", vendor, device, size, size/(1024*1024));/* 打印各个扇区的起始地址 *//* 名词解释:*    erase block region : 里面含有1个或多个block, 它们的大小一样* 一个nor flash含有1个或多个region* 一个region含有1个或多个block(扇区)* Erase block region information:*    前2字节+1    : 表示该region有多少个block *    后2字节*256  : 表示block的大小*/regions = nor_dat(0x2c);region_info_base = 0x2d;block_addr = 0;printf("Block/Sector start Address:\n\r");cnt = 0;for (i = 0; i < regions; i++){blocks = 1 + nor_dat(region_info_base) + (nor_dat(region_info_base+1)<<8);block_size = 256 * (nor_dat(region_info_base+2) + (nor_dat(region_info_base+3)<<8));region_info_base += 4;//		printf("\n\rregion %d, blocks = %d, block_size = 0x%x, block_addr = 0x%x\n\r", i, blocks, block_size, block_addr);for (j = 0; j < blocks; j++){/* 打印每个block的起始地址 *///printf("0x%08x ", block_addr);printHex(block_addr);putchar(' ');cnt++;block_addr += block_size;if (cnt % 5 == 0)printf("\n\r");}}printf("\n\r");/* 退出CFI模式 */nor_cmd(0, 0xf0);
}void do_erase_nor_flash(void)
{unsigned int addr;/* 获得地址 */printf("Enter the address of sector to erase: ");addr = get_uint();printf("erasing ...\n\r");nor_cmd(0x555, 0xaa);    /* 解锁 */nor_cmd(0x2aa, 0x55); nor_cmd(0x555, 0x80);	 /* erase sector */nor_cmd(0x555, 0xaa);    /* 解锁 */nor_cmd(0x2aa, 0x55); nor_cmd(addr>>1, 0x30);	 /* 发出扇区地址 */wait_ready(addr);
}/*开发板上的NOR Flash的位宽是16bit,所以可以把要写的数据构造出16bit然后在写进NOR Flash中。*/
void do_write_nor_flash(void)
{unsigned int addr;unsigned char str[100];int i, j;unsigned int val;/* 获得地址 */printf("Enter the address of sector to write: ");addr = get_uint();printf("Enter the string to write: ");gets(str);printf("writing ...\n\r");/* str[0],str[1]==>16bit * str[2],str[3]==>16bit */i = 0;j = 1;while (str[i] && str[j]){val = str[i] + (str[j]<<8);/* 烧写 */nor_cmd(0x555, 0xaa);	 /* 解锁 */nor_cmd(0x2aa, 0x55); nor_cmd(0x555, 0xa0);	 /* program */nor_cmd(addr>>1, val);/* 等待烧写完成 : 读数据, Q6无变化时表示结束 */wait_ready(addr);i += 2;j += 2;addr += 2;}val = str[i];/* 烧写 */nor_cmd(0x555, 0xaa);	 /* 解锁 */nor_cmd(0x2aa, 0x55); nor_cmd(0x555, 0xa0);	 /* program */nor_cmd(addr>>1, val);/* 等待烧写完成 : 读数据, Q6无变化时表示结束 */wait_ready(addr);
}
void do_read_nor_flash(void)
{unsigned int addr;volatile unsigned char *p;int i, j;unsigned char c;unsigned char str[16];/* 获得地址 */printf("Enter the address to read: ");addr = get_uint();p = (volatile unsigned char *)addr;printf("Data : \n\r");/* 长度固定为64 */for (i = 0; i < 4; i++){/* 每行打印16个数据 */for (j = 0; j < 16; j++){/* 先打印数值 */c = *p++;str[j] = c;printf("%02x ", c);}printf("   ; ");for (j = 0; j < 16; j++){/* 后打印字符 */if (str[j] < 0x20 || str[j] > 0x7e)  /* 不可视字符 */putchar('.');elseputchar(str[j]);}
/*输出的字符是否为不可视字符,要是为不可视字符输出点’.’,要是可视字符输出字符。*/printf("\n\r");}
}

NAND_FLASH操作原理

原理图:
在这里插入图片描述
八根数据线,其余的引脚什么意思呢?
当ALE为高电平时数据线上传输的是地址,低电平是传输的是数据。
在这里插入图片描述

对于一个引脚定义,有些字母上面带一横杠的,或者在字母后面加“#”,或者字母前面有个n,那都是数字电路中说明此引脚/信号是低电平有效的。否则都是高电平有效。

Nand Flash只有8个I/O引脚的好处:

  1. 减少外围引脚:相对于并口(Parellel)的Nor Flash的48或52个引脚来说,的确是大大减小了引脚数目,这样封装后的芯片体积,就小很多。现在芯片在向体积更小,功能更强,功耗更低发展,减小芯片体积,就是很大的优势。同时,减少芯片接口,也意味着使用此芯片的相关的外围电路会更简化,避免了繁琐的硬件连线。
  2. 提高系统的可扩展性,因为没有像其他设备一样用物理大小对应的完全数目的addr引脚,在芯片内部换了芯片的大小等的改动,对于用全部的地址addr的引脚,那么就会引起这些引脚数目的增加,比如容量扩大一倍,地址空间/寻址空间扩大一倍,所以,地址线数目/addr引脚数目,就要多加一个,而对于统一用8个I/O的引脚的Nand Flash,由于对外提供的都是统一的8个引脚,内部的芯片大小的变化或者其他的变化,对于外部使用者(比如编写nand flash驱动的人)来说,不需要关心,只是保证新的芯片,还是遵循同样的接口,同样的时序,同样的命令,就可以了。这样就提高了系统的扩展性。

NAND FLASH是一个存储芯片
那么: 这样的操作很合理”读地址A的数据,把数据B写到地址A”。
原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?
复用!在DATA0~DATA7上既传输数据,又传输地址。(对NAND FLASH的操作还需要发出命令,所以数据线上还传输命令)。
当ALE为高电平时传输的是地址,当CLE为高电平时传输的是命令。当ALE和CLE都为低电平时传输的是数据。

在这里插入图片描述

怎么操作NAND FLASH呢?
根据NAND FLASH的芯片手册,一般的过程是:
发出命令
发出地址
发出数据/读数据

命令表格:
在这里插入图片描述
在这里插入图片描述
时序图解析:
① 8条数据线上发出90h这个值(命令),怎么知道他是命令呢?这时候芯片是选中的,CLE是高电平,WE来一个写脉冲,nand收会把90这个值存进去,而且他知道了这是个命令。
② 发00h地址。
③ 剩下的就是数据出来了,可以读了。第一个字节是EC字符,然后就是设备ID。

NAND FLASH控制器,帮我们简化了对NAND FLASH的操作,下面来分析一下不使用NAND FLASH控制器和使用NAND FLASH控制器对外设NAND FLASH的操作。
一句话,有了控制器,我们不用管时序了,给寄存器进行操作就OK了!
注意!!易错点:一个与我想象不一样的地方:我以为是把一个32位的地址值给地址寄存器,他就会按照时序分多次在数据线上传出去。
实际不是的。地址寄存器和命令寄存器都是低八位有效的,尤其是地址寄存器要注意!!!!
我们在读写nand的时候,还是需要看读写的时序图,按照时序图的要求把地址按照一个字节一个字节的传出去!!!!!并不是地址一次性给地址寄存器就不用管了的!!!!!
我们想要读某个地址,就得需要确定在哪一行page(row),在哪一列col(0~2047)。从NAND FLASH的地址周期中可以看出来,先发出2个col(列地址),(每次只能发8位,两次凑个16位)。再发出3个(Row)行地址。
这也不是我自己想当然的那样的,详情还是得参考nand读写的章节!!!!!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用UBOOT来体验NAND FLASH的操作

值得关注,uboot操作nand flash就是操作寄存器。
注意是在uboot中操作,开发板上不要进到启动内核里。

一、读ID:

操作:                   S3C2440                 u-boot 
选中                     NFCONT的bit1设为0   md.l 0x4E000004 1; mw.l 0x4E000004  1
(md表示读出内存/寄存器,1表示读一次,然后我们要修改数据!!!再mw.l写进去)
发出命令0x90             NFCMMD=0x90         mw.b 0x4E000008 0x90 
发出地址0x00             NFADDR=0x00         mw.b 0x4E00000C 0x00
读数据得到0xEC           val=NFDATA          md.b 0x4E000010 1
读数据得到device code    val=NFDATA          md.b 0x4E000010 10xda
退出读ID的状态           NFCMMD=0xff         mw.b 0x4E000008 0xff

md: memory display
mw: memory write
md.l是因为这个寄存器是个四字节长度的!!!!
b:8位
w:16位
l:32位(默认值)
后面为什么用mw.b呢???难道寄存器是8位?

UBOOT中所有的数据都认为是16进制的,所以加不加0x都一样的。
小端模式(little endian),简单记忆:低低模式,即低位在低地址。

二、读数据
uboot功能强大,本来内部就有nand的操作函数。相应,也提供了命令直接供我们查看nand的数据。
在这里插入图片描述

而我们用寄存器操作一样可以读出这些数据。

读写nand也要看时序图的,不过关注点不是引脚电平变换,而主要是发送的顺序:
在这里插入图片描述

对于存储为256M的NAND FLASH,需要28条地址线,来表示这个地址值,根据原理图可以,只用8根地址线,所以需要4个周期的地址,为了兼容更大容量的NAND FLASH,要发出5个周期的地址!!!!!
我们不用管别的引脚时序,但是必须手动给寄存器赋值五次,发出五次地址!!!!!!(寄存器只有第八位有效)。
在这里插入图片描述

NandFlash时序及初始化

nor flash不需要初始化,但是nand flash需要。

NAND FLASH控制器的时序,是为了让NAND FLASH外设工作起来,假如外接不同的NAND FLASH外设,那么它的操作时序可能就会不同,所以NAND FLASH控制器发出的时序图,就是不一样的,所以我们根据NAND FLASH外设来设置NAND FLASH控制器。

我们在读写时直接操作寄存器,而不用管we那些引脚在读写时的变化。是有前提的,就是我们初始化了nand控制器,把时序反映到了寄存器的配置中。

在这里插入图片描述
(nand的读写一般是一个页为单位。一个块一般是64个页)
必须一个页读写吗??????????????最小单位了吗?????
好像是可以读取到字节的,后面nand读写章节介绍了。读的时候要指定想读取的地址所在的页以及偏移,而不是直接使用一个从0排到FFFFFFFF那样的地址!!!!

识别ID这个步骤有战略意义,如果成功的话,说明我们初始化是正确的,而且nand是可以工作的。

在这里插入图片描述

左上是2440nand flash的时序图,上面涉及的时间在手册里搜索,可以找到是在坐下的寄存器里面设置。
右上是芯片命令锁存周期图。右下是针对右上的时间的说明。
这些图怎么看呢?
2440的TACLS这个时间就对应芯片的Tcls-Twp这个时间!从芯片中可以计算出这里可以是0,说明CLE和nWE可以同时发出。

在这里插入图片描述
在这里插入图片描述

编程实现nand读写

视频没看,没有什么要补充。
全部参考韦东山老师博客即可:https://blog.csdn.net/thisway_diy/article/details/79397811。
韦老师威武!

提取重点须知。
一、
我们一般先操作片选使能,只有片选使能之后才能进行后边的操作,**片选使能也是通过寄存器操作的!!**虽然有引脚直接接了CE#(nCE),chip enable。

void nand_select(void)
{/*使能片选*/NFCONT &=~(1<<1);
}

二、
发命令的函数,和发地址的函数代码如下:

void nand_cmd(unsigned char cmd)
{volatile int i;NFCCMD = cmd;for(i=0; i<10; i++);
}void nand_addr_byte(unsigned char addr)
{volatile int i;NFADDR = addr;for(i=0; i<10; i++);
}

接下来就可以读取数据了,数据可以直接通过读取NFDATA寄存器里面数据来获得数据,根据时序图,是读5个字节的数据,代码如下:

unsigned char nand_data(void)
{//这是读取一次的,每次只能读取一个字节!!!!!得按照时序图中的要求读一定的次数。return  NFDATA;
}

所以真正读取是这样的:

buf[0] = nand_data();buf[1] = nand_data();   buf[2] = nand_data();buf[3] = nand_data();buf[4] = nand_data();   

三、
在这里插入图片描述

问:CPU想读取,第2048个数据,它是哪以一个?
答:是Page1的第0个字节。CPU使用某个地址访问数据的时候,是在页数据空间来寻址的,根本就看不到oob区。

读NAND FLASH步骤:(从程序的角度来说),我们需要先发出00命令再发出5个周期的地址,再发出30命令,然后就可以读数据了。比如:我想访问某个地址的数据,需要确定在哪一行page(row),在哪一列col(0~2047)。从NAND FLASH的地址周期中可以看出来,先发出2个col(列地址),再发出3个(Row)行地址。

/* 发出地址 *//* col addr */nand_addr_byte(col & 0xff);nand_addr_byte((col>>8) & 0xff);/* row/page addr */nand_addr_byte(page & 0xff);nand_addr_byte((page>>8) & 0xff);nand_addr_byte((page>>16) & 0xff);

四、
如果程序大于4K,按照以前的方式放到nand,由硬件自动拷贝到sram执行,这种方式就不行了,得全部重定位到sdram再执行。(或者在nor中启动)。

https://www.cnblogs.com/pengdonglin137/p/3324494.html

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Fibonacci数列

    Fibonacci数列 Fibonacci数列是一个很常见的递推数列,也称"兔子数列"。Fibonacci数列中蕴含很多信息,比如"黄金分割"就蕴含在Fibonacci数列中。 ** 一.递推公式 F0=0F1=1Fn=Fn−1+Fn−2(n≥2)\begin{array}{l} F_{0}=0 \\ F_{1}=1 \\ F_{n}=F_{n-1}+F_{n…...

    2024/5/1 14:06:38
  2. 对面向对象中Student类型的数组进行封装处理

    要求 定义类Student,包含三个属性:学号number(int),年级state(int),成绩 score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。 问题一:打印出3年级(state值为3)的学生信息。 问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息 我写了两个版本…...

    2024/4/19 20:37:36
  3. 认认真真学习zookeeper(一)

    本文内容包括:zookeeper的简介、数据模型、单机安装过程、常用Shell命令、ACL权限控制以及JavaAPI调用文章目录1. zookeeper简介1.1 什么是zookeeper1.2 zookeeper应用场景1.3 zookeeper的设计目标2. zookeeper的数据模型3. zookeeper单机安装4. zookeeper常用Shell命令4.1 新…...

    2024/4/20 8:36:25
  4. DVWA靶场-Brute Force Source 暴力破解

    靶场环境搭建https://github.com/ethicalhack3r/DVWA[网络安全学习篇附]:DVWA 靶场搭建目录Brute Force Source 暴力破解Low Brute Force核心代码BP爆破注入Medium Brute Force核心代码High Brute Force核心代码Impossible Brute ForceBrute Force Source 暴力破解Low Brute F…...

    2024/4/16 8:14:11
  5. js DOM 事件 与http

    第一个接收事件的是window -》 document -》html js获得html节点 document.documentElement;=》body捕获 =》 目标阶段=》 冒泡阶段 event event.preventDefault() 阻止默认事件 比如阻止a标签跳转 event.stopPropagaition() 阻止冒泡 event.stoplmmediatePropagarion() 注…...

    2024/4/24 10:09:53
  6. 【分享】http://t.cn/xxx的短链接如何生成?

    短链接:用通俗的话说,短链接就是把长网址通过程序计算和其他方法转换成短网址,类似于t.cn/xxxx。短链接优势:短小精悍;减少网址字符占用的空间,尤其是在撰写文章和插入网址字符时;搜索引擎优化!应用场景 短网址的应用非常广泛,如短信营销、邮件宣传、微信营销、QQ营销…...

    2024/5/3 19:12:30
  7. 多线程程序

    功能描述:相机采集图片,同时对采集的图片进行处理功能说明:采集和处理两个模块采用线程处理,数据使用循环队列进行存储。主程序#encoding: utf-8该文件用于控制多个相机的采集和算法调用import time import uuid, cv2 import numpy as np import threading from thread…...

    2024/4/24 10:09:51
  8. 006

    软件配置管理的作用?软件配置包括什么 软件配置管理(Software Configuration Management,SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。SCM活动的目标就是为了标识…...

    2024/4/24 10:09:52
  9. 初学Web前端会用到开发工具【零基础web前端入门视频教程】

    目前市面上比较流行的前端开发工具主要有WebStorm、Vscode、Sublime、HBuilder、notepad++、EditPlus、记事本等,今天介绍一下这些开发工具,并且给出了下载地址。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cfsy14n7-1591101435577)(https://u…...

    2024/4/24 10:09:49
  10. DVWA靶场-Command Injection 命令注入

    往期博文:DVWA靶场-Brute Force Source 暴力破解靶场环境搭建https://github.com/ethicalhack3r/DVWA[网络安全学习篇附]:DVWA 靶场搭建目录Command Injection 命令注入Low Command Injection核心代码Medium Command Injection核心代码High Command Injection核心代码Impossi…...

    2024/4/24 10:09:51
  11. tensorflow教程

    tf对话create two matrixes层数据输入占位符 对话 import tensorflow as tf create two matrixes matrix1 = tf.constant([[3,3]]) matrix2 = tf.constant([[2],[2]]) product = tf.matmul(matrix1,matrix2)# method 1 sess = tf.Session() result = sess.run(product) print(r…...

    2024/4/24 10:09:49
  12. leetcode--字符串的排列

    题目来自LeetCode,链接:面试题38. 字符串的排列。具体描述为:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例: 输入:s = "abc" 输出:["abc","acb","bac",&q…...

    2024/5/3 17:52:04
  13. 堆的计数

    import java.util.Scanner;public class Main_10 {/*** 题目描述 我们知道包含N个元素的堆可以看成是一棵包含N个节点的完全二叉树。* 每个节点有一个权值。对于小根堆来说,父节点的权值一定小于其子节点的权值。* * 假设N个节点的权值分别是1~N,你能求出一共有多少种不同的小…...

    2024/4/24 10:09:45
  14. 本地文件上传至 Linux 服务器

    本地文件上传至 Linux 服务器服务器使用过程中经常需要与 PC 进行文件交互,交互过程中的文件传输可采用的协议主要有 RDP(远程桌面协议), SSH, FTP(远程文件传输协议) 等。方法主要有 scp, xftp(Xshell 插件), lrzsz, FTP工具等,这里只介绍 scp 的上传下载文件时的用法。一、…...

    2024/4/24 10:09:44
  15. 游戏设计模式——面向数据编程(转)

    作者:KillerAery 出处:http://www.cnblogs.com/KillerAery/随着软件需求的日益复杂发展,远古时期面的向过程编程思想才渐渐萌生了面向对象编程思想。当人们发现面向对象在应对高层软件的种种好处时,越来越沉醉于面向对象,热衷于研究如何更加优雅地抽象出对象。然而现代开发…...

    2024/4/24 10:09:44
  16. 2020年6月程序员工资统计,平均14404元,又跌了,扎心

    见了鬼 本月的平均收入为14404, 本文的articleId为106503404,真是见了鬼。 平均工资 2020年6月全国招收程序员313739人。2020年6月全国程序员平均工资14404元,工资中位数12500元,其中95%的人的工资介于5250元到35000元。虽然收入又下降了,但是岗位比上个月多了起来,随着经…...

    2024/4/24 10:09:42
  17. 2020年6月中国编程语言排行榜

    编程语言比例排名 编程语言 平均工资 工资中位数 最低工资 最高工资 人头 人头百分比1 scala 19973 17500 7000 45000 3175 0.68%2 rust 19229 17500 5352 44229 457 0.10%3 julia 18455 20214 12500 25000 11 0.00%4 python 18350 17500 6000 42500 36648 7.90%5 lua 18168 16…...

    2024/4/16 8:14:52
  18. 特长生考试Day_0

    你根本不知道,让一个已经退役一年的OIer去考特长生,他有多么绝望。 你永远不知道,当你用洛谷查到你最新几次做题记录做的是网络流,差分约束,斜率优化等算法时,然而你连背包、dfs怎么打都忘记时,你有多么绝望。 你永远不知道,当你看自己曾发的题解时竟然看不懂的心情,有…...

    2024/4/16 8:14:42
  19. 一个实验带你快速掌握NAT的多种实现方式,建议收藏反复学习

    认识NAT NAT定义:网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有…...

    2024/4/19 19:56:17
  20. 健壮F.T.+新裸金属重磅发布!全新升级版ZStack加速新基建!

    6月2日,以“健壮F.T.+新裸金属 新基建下的新IaaS”为主题的2020年ZStack新品线上超级发布会引爆了企业级云市场。面向新基建发展契机,致力于普惠云计算的ZStack与英特尔、阿里云等伙伴强势携手发布2大重磅新品:首个采用了F.T.技术的ZStack Mini超融合一体机(简称:ZStack M…...

    2024/4/18 12:44:01

最新文章

  1. C++ 函数 参数与返回值

    #一 参数与返回值 回顾文件读数据功能 文件读数据 1函数参数传值调用过程 将函数调用语句中的实参的一份副本传给函数的型材。 简单的值的传递&#xff0c;实参的值没有发生变化。 2 函数参数传值调用过程 传地址调用 将变量的地址传递给函数的形参 形参和实参指向了同…...

    2024/5/4 4:53:17
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. YOLOv9架构图分享

    YOLOv9是YOLO (You Only Look Once)系列实时目标检测系统的最新迭代。它建立在以前的版本之上&#xff0c;结合了深度学习技术和架构设计的进步&#xff0c;以在目标检测任务中实现卓越的性能。通过将可编程梯度信息(PGI)概念与广义ELAN (GELAN)架构相结合&#xff0c;YOLOv9在…...

    2024/5/1 14:06:38
  4. 分发饼干(C++ 贪心)

    目录 题目需求 贪心算法思想 什么是贪心 贪心算法的使用 贪心算法的优缺点 代码实现 后言 题目需求 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&…...

    2024/5/2 9:30:15
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57