数码之家

 找回密码
 立即注册
搜索
查看: 5557|回复: 18

[Other] 闪存中0和1代表有数据还是无数据?

[复制链接]
发表于 2020-9-10 13:48:45 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lzhq0071 于 2020-9-10 13:48 编辑

有一块风雷SSD,2246EN 8贴8DDK的板子,用了130PE最近听它里面的无损音乐经常无故停下,过一会儿在恢复,看任务管理器是100%
且有概率直接掉盘然后立马又识别,打算先给他做一次安全擦除,查阅了一点资料比如关于闪存擦除跟编程的区别,找到的都是类似这样说的:

1.png

这话的意思是不是可以理解为闪存在空的时候,所有位为1,编程的时候才是把1写成0?
然后就问题来了,我用DISKGENIUS给他做一次清除数据,它提示有填充扇区数据为0x00还是0xFF还是随机数


3.png


根据查阅的资料,我觉得可能应该给全盘写1才是擦除的做法,然后我填了FF,等完成之后发现硬盘的写入量居然增加了1PE
然后我在用DISKGENIUS等软件查看硬盘扇区,他们的每个位都是1,但是我觉得不对劲
我再把这个固态重新开了卡升级了固件,开卡完成后发现扇区每个位都是0,这就跟上面查阅的资料相悖了

2.png

这是因为这两种东西代表的不一样吗,扇区中的每一位并不是直接跟闪存中的每一位一一对应的吗?


打赏

参与人数 1家元 +20 收起 理由
家睦 + 20 歡迎探討

查看全部打赏

发表于 2020-9-10 14:17:46 | 显示全部楼层
我的思路是这样的:
1、检查下电路板是否有异常的地方,比如是否有严重发热,是否有小料已烧毁,接口处是否有松动。
2、如果电路板没问题,做se,还不如重新开卡。如果担心坏块屏蔽不干净,可以跑一次RDT。

打赏

参与人数 1家元 +4 收起 理由
zidian + 4

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-10 14:22:16 来自手机浏览器 | 显示全部楼层
fanallen 发表于 2020-9-10 14:17
我的思路是这样的:
1、检查下电路板是否有异常的地方,比如是否有严重发热,是否有小料已烧毁,接口处是否 ...

其实那个都无所谓,我只是想知道空的硬盘扇区里面的每一个位为什么不是FF而是00,因为闪存擦除完不应该是全写1吗也就是FF
回复 支持 反对

使用道具 举报

发表于 2020-9-10 14:48:03 | 显示全部楼层
我理解感觉他所说的编程与擦除指的是硬件上的,比如1代表正电荷,0代表负电荷
而你读出的是他们所代表的数据,与实际硬件那个不是同一种概念。
比如一个开关被按下,这是硬件上的被按下的状态,但是实际我可以让它做个门铃,也可以当电视开关,或者干其他的一些事情,就看你这么去定义这个事情

打赏

参与人数 1家元 +6 收起 理由
zidian + 6

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-9-10 15:51:57 | 显示全部楼层
nb267213667 发表于 2020-9-10 14:48
我理解感觉他所说的编程与擦除指的是硬件上的,比如1代表正电荷,0代表负电荷
而你读出的是他们所代表的数 ...

原来如此
回复 支持 反对

使用道具 举报

发表于 2020-9-10 21:59:17 来自手机浏览器 | 显示全部楼层
全写1不就相当于跑了一圈么,pe当然+1
回复 支持 反对

使用道具 举报

发表于 2020-9-11 10:45:13 | 显示全部楼层
看过一些资料,硬件层面貌似是对某个电极注入电子 以代表该bit有效,把电子放出来后代表该bit无效(基本上可以以电平位状态理解为-1和0的关系)。逻辑上的 0和1 与硬件上的 0和1有区别('非'操作?)。spi flash貌似就没这破事儿,nor flash没工具没试过不知道:shy:
回复 支持 反对

使用道具 举报

发表于 2020-9-11 15:53:59 | 显示全部楼层
这么多的高手啊:praise:
回复 支持 反对

使用道具 举报

发表于 2020-9-11 19:31:18 | 显示全部楼层
你用Winhex打开磁盘、U盘、SSD看到的,是十六进制。我们所说的填0,就是填十六进制的0

机器语言都是读二进制的,只有0和1。所以你说的不是存储设备底层的状态

不管硬盘,还是SSD,实际都不是写0和1,只是通过电平高低来表示

你看到的数据,是经过主控给你转换后的信息。而你Winhex看到的信息,也是软件帮你转换了一下(Winhex看到的是字节,默认一行是16个字节,打开磁盘默认会以磁盘格式显示,也就是每个扇区显示512个字节的信息给你。一个字节等于8bit,例如FF是一个字节,对应二进制是1111 1111)

对于SSD的NandFlash而言,PE就是指编程和擦除,完成一次循环操作就算一次PE。意思是说:不管你通过什么软件,不管你写什么到指定的扇区(包括00和FF),只要需要固件动用到擦除块(释放电荷)这个操作,再给这个块按照页大小的方式逐渐递增编程(控制电压)进去,它就是一次PE。你填0只是系统(应用)层面的事情,对于SSD后台而言,由固件决定是否需要擦除(写入肯定是要写的,它不一定要擦除块,因为如果写入有足够的页大小,就不会去擦除新块)

实际上,根据片子的质量。有些远远低于标准,有些也远远高于标准。就算到了PE寿命,它也并不是不能用,只是出错的概率很高,通过标准的ECC或其它校验算法没有办法完整纠错了。所以就有了坏块管理的这个固件机制

SSD的读写,是按照Block块擦除作为最小单位,Page页作为最小读写单位

例如B27制程的颗粒,一个块大概是80MB左右(具体忘记了,大约),一个页是16K(我忘记是不是了)。那么你写一个1MB的文件进去,SSD就会空闲页的表格中找到64个连续的页来写进去。如果找不到,它可能就会从一个新的块中从头开始写

但如果没有完全空的,它就会去搬运、整理之类的,给你分配出更多的空间给你使用。说白了,SSD根本不管你填零不填零。你看到的00、FF,不是SSD关心的。它只关心OS或文件系统要求它做什么操作

以上这些只是我个人的理解

打赏

参与人数 1家元 +30 收起 理由
lzhq0071 + 30 感谢高手

查看全部打赏

回复 支持 2 反对 0

使用道具 举报

发表于 2020-9-11 19:39:17 | 显示全部楼层
我想表达的重点是:不管你通过什么软件,给硬盘指定的位置写入数据,不管是00,还是FF,还是其它的十六进制。对于SSD(或者硬盘),它就是写入了

你用全00填写100次,SSD也会一样操作的。但有些时候,因为压缩算法的存在,以及磨损均衡机制、不同SSD的设计如带DRAM等因素的存在,系统对SSD的写入不是1:1关系

有可能忽大忽小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-12 00:40:08 来自手机浏览器 | 显示全部楼层
125589 发表于 2020-9-11 10:45
看过一些资料,硬件层面貌似是对某个电极注入电子 以代表该bit有效,把电子放出来后代表该bit无效(基本上 ...

很有说服力,我只是单纯的以为他们的0和1代表的是同一种东西了,看来是完全错的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-12 00:43:14 来自手机浏览器 | 显示全部楼层
futurestar 发表于 2020-9-11 19:39
我想表达的重点是:不管你通过什么软件,给硬盘指定的位置写入数据,不管是00,还是FF,还是其它的十六进制 ...

感谢高手,基本明白了还顺带让我学到了一些其他的东西
回复 支持 反对

使用道具 举报

发表于 2020-9-12 10:31:38 | 显示全部楼层
话说 linux 系统下 有个命令dd  可以解决你的疑问
回复 支持 反对

使用道具 举报

发表于 2020-9-15 08:32:09 | 显示全部楼层
不管硬盘,还是SSD,实际都不是写0和1,只是通过电平高低来表示
回复 支持 反对

使用道具 举报

发表于 2020-9-15 10:57:46 | 显示全部楼层
软件擦除ssd  那就真的要报废了。。。
回复 支持 反对

使用道具 举报

发表于 2021-8-19 17:58:32 | 显示全部楼层
本帖最后由 伽马射线 于 2021-8-19 18:47 编辑

充电荷=置低电平,算半个周期,再释放放电荷=置高电平,才算一个周期
回复 支持 反对

使用道具 举报

发表于 2021-8-19 21:11:00 | 显示全部楼层
你有1张纸,还有一支笔,笔只能写黑字(编程),还有一瓶涂改液,涂改液只能涂白(擦除),如果这个纸不是新的,上面有黑有白(数据),那么你往上面写字(编程),现在的黑块会和以前的黑块混合在一起,造成混乱,所以,要先把整个纸涂白(擦除),然后再在相应的位置写字(编程),上面才会呈现我们想要的结果,不论全是1还是全是0,理论上都可以称其为空白,只有10混合,代表了一些信息,才算是有数据
回复 支持 反对

使用道具 举报

发表于 2023-3-21 10:22:52 | 显示全部楼层
我也不太明白,专门来看一看!
回复 支持 反对

使用道具 举报

发表于 2023-3-22 13:05:32 | 显示全部楼层
擦除应该是一个人为定义的过程,全0和全1都可以定义为擦除,或者你也可以定义任何一个数值为擦除,擦除相当于对闪存进行了一次读写
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-19 14:18 , Processed in 0.452400 second(s), 19 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表