拆解与优化:Comsol 8Gb USB Flash Stick (AU6989SN-GT & SDTNRCAMA-008G)

Gough's Tech Zone

很久以前,我收到一个 Comsol 8Gb USB Flash Stick 用于测试。 后来,我设法又搞到了一根,于是我就不那么难过了,可以把它拆开看看里面是什么——结果证明,这为我提供了一个周末的 娱乐 世界。 这比我预期的要多,而优化过程是像我这样的工程师真正感到兴奋的事情。

拆解与实验

我很遗憾地说,这款产品的拆解过程具有一定的破坏性。主 PCB 本身固定在一个薄铝“管”内,由两个粘合在里面的半透明塑料端件固定。切割这些部件并用钳子将其扭出是释放内部 PCB 的唯一方法,这显示了一些有趣的结果。

DSC_4056

PCB 标记为 C20V-2.0-AU6989-L48-2L-TF-1.5,日期为 2014 年 6 月 26 日,这使其成为一个相对较新的设计。前面预留了一个 LED 指示灯的位置,但未使用,而是优先使用后面的 LED 指示灯。预留了一个晶体振荡器的位置,但由于它使用了带有集成晶体的 Alcor Micro AU6989SN-GT 控制器,因此该位置没有安装任何东西。

特性,摘自 usbdev.ru,包括:

– PCBs are pin compatible with AU69XX USB2.0 series – Integrated build-in Regulator – Integrated build-in Crystal with Alcor’s patent – Supports 72bit/1K BCH ECC engines – Supports new generation MLC/TLC flash – Supports Toggle/ONFI DDR flash – Not support the flash ECC requirement under 24bit/1K – Well performance in TLC DDR flash – Improved read performance reach 32MB/Sec – Integrates hardware DMA engine to tune up the operation performance – Works with default driver under the environments of Windows ME, Windows 2000, Windows XP, Vista, Window7, Windows 8, Mac 9.2, Mac OS 10.x. Using Alcor Micro’s vendor driver for the environment under Windows 98SE. – Low power operation with SDR/DDR flash – Supports software write protection – Support Auto Run function – Support erasable and read-only mode AP Disk – Companion application program with UFD – iStar available for users – – To have UFD partition management function – – To do password protection for the security in data access – – To guard data files with software write protection function – – To lock up PC by UFD as the key – Available in 48-pin LQFP 7x7mm / TQFP_7x7mm / QFN_6x6mm / QFN_7x7mm package to support 4CE pin flashx2pcs – Available in 64-pin LQFP 7x7mm / TQFP_7x7mm package to support 4CE pin flashx4pcs

它是一个功能非常丰富的控制器,但考虑到竞争对手(例如 Phison)在价值领域提供类似的功能,这是您可以预料到的。

DSC_4058

背面提供了一个很大的惊喜。闪存是一个焊接下来的单个 microSDHC 卡!该卡没有标记制造商,但确实有一些蚀刻。在下面还可以看到一个表面贴装晶体的空间。

我知道你在想什么——这只是一个读卡器和 microSDHC 的组合,减去了连接器,但你就错了。该控制器是一个闪存控制器,而拆焊显示了一个更有趣的结果。拿出热风枪!

DSC_4060

在 microSDHC 的引脚上似乎仅使用了电源连接,而是使用焊盘与卡进行通信。总共建立了 21 个引脚连接,但我不确定它们是什么。

也许玩转 microSDHC 卡可以让我们从中读取数据,从而提供一种简单的方法来恢复卡中的数据——结果证明这行不通。**我的读卡器将该卡识别为 24/32Mb 卡,并且无法正确读取。它显示为未格式化。**读取速度为 10.8Mb/s。

comsol-card

我还决定更进一步,尝试提取 CID 和 CSD 信息:

CID: 035344534430333280ffffffff0062c5
CSD: 00260032515981e9bef9cfff92404053

CID 和 CSD 提供了一些非常不寻常的信息。 CID 将制造商 ID 作为 0x03,即 Sandisk。0x5344 的应用程序 ID 也是 Sandisk 的常见特征。 产品名称为 SD032,修订版为 8.0,这表明为 32Mb(或 Gb)。 序列号似乎未设置(所有 oxFF),日期设置为 2006 年 2 月。这与版本 1 CSD 配对,设备大小为 1958,等于 32,096,256 字节 - 即 32MiB。

因此,看起来这是一个 Sandisk 部件,带有 SD 控制器,但它尚未经过最终的制造商认证和格式化程序。 相反,它使用底面的焊盘作为原始 NAND 封装集成到产品中,忽略了板载 SD 控制器,因此控制器采用与原始 NAND 通信的格式。

我们如何证明它是 Sandisk 部件? 好吧,这里有一些类似的 Sandisk 部件的照片,作为 microSDHC 卡,以 Sandisk 品牌销售。

DSC_4122 DSC_4121

请注意,蚀刻的数字如何匹配相同的字体间距样式? 当然,品牌尚未印刷,并且在主干上进行了额外的蚀刻,这可能是由于特殊的分级(C 级?)。 底部还具有焊盘,但被某种厚厚的涂料覆盖。 现在我知道这些焊盘是做什么用的了!

再次取出热风枪,我能够将封装重新焊接到板上而没有损坏它——它仍然可以正常工作。 那么为什么这令人兴奋呢? 这是因为,就像我之前在博客中玩过的 Phison USB 密钥一样,制造商的工具是公开提供的(尽管通过不正当渠道),这可以让我们对制造和优化过程有一些有趣的了解。

AlcorMP 软件

用于认证和制造这些 USB 密钥的软件称为 AlcorMP。 该软件的各种版本可从 usbdev.ru 获得。 该软件能够以英语和中文运行,但用户指南仅提供中文版本,因此我几乎完全在没有它的帮助下进行了探索。

NewAlcorMP2

要与此特定 USB 密钥(使用非常晚期的控制器)正常工作,您必须使用 AlcorMP 15.03.05.00 或更高版本。 由于闪存不受支持,我尝试了 14 版本,但没有成功。 默认情况下,它将以管理权限运行,因此它可以挂钩一个特殊的驱动程序来与密钥通信并重新编程它们。 该程序附带大量 .bin 文件,这些文件似乎包含要在控制器本身上运行的代码,这使得该控制器成为一个可能的安全问题,正如 BadUSB 漏洞中针对 Phison 控制器所指出的那样。 可以如此轻松地重新编程控制器,这对于那些制造 假闪存 密钥的人来说是一件幸事。

这些文件执行低级格式化、测试,并为控制器提供固件,以及一些特殊的分区工具,供那些希望使用 iStar 功能的人使用。

**这就像工程师的游乐场——一个由工程师为工程师制作的工具。**该工具的主屏幕如下所示,目前,它正在执行低级格式化。 通常,插入密钥会使其显示其闪存 ID 和其他信息,并且会根据工厂在设备上完成的处理加载“合理的”处理设置。

查找 Comsol 的配置详细信息可以为我们提供以下数据:

ConfigInfo

该驱动器格式化的固定容量为 7450Mb,固件版本为 1600。 VID 和 PID 似乎也已自定义,但供应商/产品字符串为空,这解释了之前 HDTune Pro 测试中驱动器的无名称性质。

要开始认证过程,您需要单击“设置”按钮。 这会弹出一个密码提示,不需要输入任何内容——只需单击“确定”即可

Flash-Config

第一个屏幕是一个相对混乱的屏幕,但它设置了闪存配置。 闪存从 ID 字节自动检测为 Sandisk SDTNRCAMA-008G。 将编号、通道和周期时间保留为默认值似乎足以用于此驱动器。

可以更改制造过程以优化驱动器的速度或容量。 还有第三个选项,似乎是基于 NAND 制造商标记的预先存在的坏块进行高级格式化。 您应该真正使用容量或速度,因为来自制造商的坏块数据可能已损坏。

低级格式化将测试闪存并确保闪存可用。 如果您有一个假闪存驱动器来确定其正确的容量,这是可取的。 检查模式为 LLF Check,具有多个彻底性级别。 我选择了 Distrube Check,因为这似乎更彻底,并且检查了相邻闪存单元的干扰,而其他测试则没有解决这个问题(但可能足够)。 我还选择了之后的半容量检查,以确保进行彻底的测试。 扫描级别可能会影响稳健性,完全扫描需要更长的时间,但可以确保所有闪存都经过测试 - 据我所知,完全扫描 4 是最彻底的。 ECC 级别可以在 0 到 15 之间设置——这是一个引起我注意的设置,我希望在下一部分中进一步理解和优化它。

特殊闪存部分用于处理具有古怪/兼容性问题的_特定_类型的闪存,除非您在制造过程中出现特定错误,否则应将其保留为“正常”。

“高级”按钮会弹出一个具有更多功能的新对话框 -

LLF-Enhance

ECC 增强级别功能通常处于关闭状态,但可以打开以提高结果的稳定性。 低级格式化修改可以通过多次运行低级格式化循环来增加扫描时间以提高稳定性,但通常是不必要的,因为剩余的 ECC 应该能够处理可能已通过的任何边缘块。

模式控制用于低级格式化的测试模式,而驱动级别配置芯片的信号驱动。 MaxL1fCE 似乎与闪存芯片启用有关,应保留为默认设置。 我不确定 LC Offset 用于什么。 同步模式可能表明闪存接口正在以同步模式运行 - 但我不太确定。

应将“加强稳定性”保留为默认设置——启用此选项会弹出一个警告,表明容量和速度将因稳定性而牺牲,这对于正常使用可能不是必需的。

“使用块模式”控制使用哪些块。 可以将此更改为奇数或偶数块以“挽救”坏闪存芯片。 可以启用或禁用缓存程序,但我不确定这实际上会做什么——所以我确实尝试查看它在以后的部分中是否会做任何事情。

Mode-Select

下一个屏幕允许您选择驱动器显示为哪种模式——无论是可移动磁盘、固定磁盘、只读、密码保护还是 U3 风格的 CD-ROM。 您可以为驱动器预先设置一些格式化参数,以及要预加载的图像。 还可以自定义 LED 行为。 使用 U3 风格的 CD-ROM 可以将驱动器变成 USB CD-ROM 驱动器,用于安装不了解 USB 安装的操作系统(例如 Windows XP),或者用于存储只读内容(而不使用驱动器的其他只读功能)

VID-Setup

“信息”选项卡允许您设置 VID、PID 和字符串——因此您可以在设备管理器中自定义驱动器的“名称”。 这可能是一个非常好的聚会技巧。

Bad-Block-Set

坏块配置屏幕让您有机会设置闪存的配置方式。“自动检查”根据实际可用的闪存量优化驱动器大小。 这可能很危险,因为它可能不会留下任何备用块,以便在“运行时”块发生故障时进行替换。 也就是说,我不确定 Alcor Micro 是否能够进行动态块替换。

“动态设置”为保留留下一些块,而 bin 允许系统自动优化一个目标或另一个目标,并根据可用的闪存决定将驱动器分配给哪个“常规”容量。 这很有趣,因为它暗示可能存在 非常 奇怪大小的闪存密钥——也许是一个具有 6.8Gb 可用闪存的 4Gb 密钥?

Capacity-Bin

我不得不说,大多数制造商可能不会使用这种模式,而是使用固定容量模式——驱动器要么通过,要么无法提供设置的容量,这就是一天的结束(对于此型号,为 7450Mb)。 最后一种模式将固定数量的块设置为百分比作为“坏块”。

其他设置包括格式化文件系统(您实际上没有选择),以及有助于实际生产使用的选项(使用同一台机器同时认证多达 32 个驱动器)。 有一个有趣的 ATTO 优化功能,表明有一些调整可以使驱动器基准测试更好。 可以使用 MBR 或 VFAT 格式化驱动器(这不可靠地启动,但会提供稍微更多的空间)。 “启用读取器”功能允许其他具有集成 SD 读取器的芯片组使插槽“可用”,而 MaxMPTime 允许将生产限制在一定数量的时间或失败。

Flash-Type-Power

另一个页面允许您自定义闪存,并进行多次循环老化测试。 可以调整电源位以使其更能满足最终用户的要求。 我不知道 AutoH2 会做什么,但“写入日志”选项会在文本文件中提供驱动器优化的结果的快速列表。

UI-Show

UI 显示功能实际上仅对那些希望标准化特定外观或颜色编码的生产环境中的人有用 - 家庭用户可以使用默认设置。

速度/容量和 ECC 优化

控制器本身宣传支持 72 位/1K BCH ECC,且不低于 24 位/1K ECC。 ECC 设置为 0 到 16 有点令人困惑,所以我尝试咨询手册,并获得了一些数字翻译帮助。

使用 Google 翻译 翻译的 ECC 部分如下:

ECC set FLASH poor quality need to be open for FLASH bad block ECC error correction can improve certain capacity, but There may be some risks. ECC = 0 most stringent low grid FLASH out the most stable; ECC = 15 most relaxed, Capacity may be larger, but there may be some risks. The original low-grid setting value refers to a low-level format ECC on the selected use. ECC tuning levels: Level 1-4, may be appropriate to increase the capacity of FLASH, the proposed selection level 1. Low grid correction: low grid ECC scan times can make more accurate, but it takes a little more time, check only takes effect. Scan times: You can manually set the number of low grid scanning, you can make a more accurate scan, but it takes a little more time, Check only takes effect. Patten: Patten can choose different scans, mainly for the more special flash. Use Block Mode: manually choose to do the entire block or block or even-odd block. Cache Program: Open or closed manually select cache program command.

使用 Bing 翻译器 给我的结果非常相似:

ECC setting Low quality FLASH needs to open up FLASH bad block by ECC error correction, guaranteed capacity can be improved, but There may be a certain amount of risk. ECC=0 is the most strict, low FLASH the most stability; ECC=15 is the most relaxed, Capacity may be larger, but there may be a certain degree of risk. Low setting refers to the use of a low-level format on the chosen ECC values. ECC tuning level: level 1-4, may be appropriate to improve the capacity of the FLASH, choose level 1. Correction: low several times makes the ECC scanning is more accurate, but will spend more time, check the do not take effect. Scan frequency: low the number of scans that can be manually set, can make the scan is more accurate, but will spend more time, Check the do not take effect. Patten: you can select a different scan Patten, mainly for very special Flash. Use Block Mode: manually choose to do the full block or even block or odd block. Cache Program: choose to turn on or turn off the cache manually program command.

因此,似乎 ECC 设置设置了闪存低级格式化期间对块错误的容差。 为了验证这一点,我决定以 每个 设置(每个设置花费一个小时)运行低级格式化,以进行 容量和速度优化。 禁用了 ECC 调整。 在测试期间使用了随机模式(导致格式化大小略有随机变化),并使用了具有完全扫描 4 的干扰测试。 结果如下:

devsize-vs-ecc

结果似乎在一定程度上遵循描述,但有一些令人惊讶的地方。 首先,针对容量选项进行优化并没有明显优于针对速度进行优化,并且在低 ECC 级别(严格)下表现更差。 大多数高于 3 的 ECC 级别容量都非常相似,约为 7800MB+,大约比其附带的 固定容量多 350-450Mb。 识别出的坏块数量在不同的 ECC 级别之间有所不同,可能是由于在检测错误时的随机模式测试变化,以及测试期间的一些潜在磨损和对齐差异。

一般来说,ECC 级别似乎表示在低级格式化期间,在将块/页面标记为坏并停止使用之前,闪存块/页面中容许的坏位数量。 因此,较低的级别更严格,而较高的级别将允许在低级格式化中出现更多有缺陷的位(为未来的磨损留出更少的余量,使其稳定性降低)。

由于闪存的质量,即使在 ~3 相当严格的级别下,容量也可以最大化。 更高的级别似乎没有恢复更多的容量,这意味着坏块必须包含即使具有更宽的坏位容限也无法纠正的坏单元突发

如果您想为重新分配留出一些空间(前提是控制器实际上支持它),最好认证一个稍小的固定大小。

那么,容量优化与速度的成本是多少? 事实证明,速度模式下的速度要好得多——在读取方面比发货状态快约 84%,在写入方面快 44%。部分改进似乎是新的固件——因为使用 AlcorMP 工具识别驱动器的固件版本为 8E8A。

Capacity Optimized CDM Speed Optimized CDM

不再是令人讨厌的 13.78Mb/s 读取和 3.27Mb/s 写入! 它仍然不是速度恶魔,但鉴于我拥有的具有相同形状的 Sandisk 卡是 Class 4 卡,因此性能可能是我们可以从闪存中获得的最佳性能。 我确实将写周期时间更改为最小值,希望“推动”闪存更快,但没有任何区别。

ATTO 优化和缓存程序

另一个选项让我很感兴趣,那就是针对 ATTO 进行优化,ATTO 是一种常用的磁盘基准测试。 这是一种作弊行为,还是以牺牲顺序访问为代价而故意偏向小块访问? 是否有任何权衡?

另一个疑问是缓存程序选项是什么意思。 这是否意味着驱动器上会有 pSLC 缓存,或者尝试优化小型传输? 或者这只是在驱动器本身上缓存生产固件的选项? 它对性能有任何影响吗?

Capacity Optimized ATTO No Opt 容量优化,无 ATTO 优化 Speed Optimized ATTO No Opt 速度优化,无 ATTO 优化

总的来说,在没有 ATTO 优化的情况下,除了细微的变化之外,针对性能进行优化选择似乎可以全面提供更好的性能

[Speed+ATTO Optimized ATTO](https://goughlui.com/2015/04/05/teardown-optimization-comsol-8gb-usb-flash-stick-au6989sn-gt-sdtnrcama-008g/<