1. Introduction
UFS设备可以利用有关其生产状态的知识,相应地调整内部操作。
例如,在设备焊接之前加载到存储设备中的内容可能被破坏,其概率高于regular模式。UFS设备可以在设备焊接前使用"Special"内部操作加载内容,这将减少生产故障,并在焊接后使用"regular"操作。
设备焊接的灵敏度是逻辑单元的一个属性Property,一些逻辑单元可能对设备焊接敏感,而一些逻辑单元则可能对其不敏感。在将数据加载到设备之前,主机应读取bPSASensitive,以识别对设备焊接灵敏的LU。
预加载的数据是在设备配置完成(设置bConfigDescrLock并重置设备)之后、设备焊接到host平台之前加载到设备上的数据。可以被预加载到所有敏感LU的组合最大数据量是特定于设备的,并由dPSAMaxDataSize属性定义。
2. PSA Flow
PSA功能基于设备的能力,可以独特地识别在焊接之前写入的数据。只有当bPSASensitive=1的逻辑单元中的所有LBAs都未映射时,才能启动PSA flow。如果主机不知道LBAs是否未映射,则应设置bPSAState Off,对每个bPSASensitive=1的LU的整个LBA范围发送UNMAP命令,以取消映射预加载数据并重新启动PSA flow。
- 要启动PSA流,host首先检查设备是否支持PSA功能(请参阅设备描述符中的参数bUFSFeaturesSupport)
- host应将dPSADataSize设置为计划在bPSASensitive=1的所有逻辑单元中预加载的数据量。如果主机试图设置dPSADataSize>dPSAMaxDataSize,设备将返回一个General failure error。
- 主机设置bPSAState属性为"Pre-soldering",然后通过WRITE命令预加载逻辑单元中的数据。
- 主机应将仅通过WRITE命令写入到bPSASensitive描述符设置为1的LU的数据计入dPSAMaxDataSize限制。在PSA flow期间,主机不应多次将数据写入同一LBA,在这种情况下,设备行为可能未定义。
- 一旦host完成所有LU的预加载(写入的数据总量为dPSADataSize)主机将会把bPSAState从"Pre-soldering"更改为"Loading Complete",以向device指示数据的预加载已完成。
- 在焊接之前,在"Loading Complete"状态下,设备可能会停止使用特殊的内部操作并恢复常规操作。因此,host不应将数据写入设备,因为数据可能在焊接过程中损坏;在这种情况下,write命令可能会导致错误。
- 将bPSAState设置为"Loading Complete"后,可以对设备进行焊接。在通电后、Loading Complete状态下处理第一个WRITE命令期间,设备应将bPSAState更改为"Soldered"。
3. PSA State Machine
PSA状态机描述bPSAState属性的不同状态及其状态之间的转换。
- 在预焊接阶段,主机写入超过dPSADataSize的数据可能会导致设备焊接期间的数据损坏。
- 在将bPSAState设置为"Soldered"之前的任何时候,主机都可以通过将bPSAState切换为"Off"来重新启动PSA flow -> 取消映射所有敏感数据 -> 将bPSAState设置为"Pre-Soldering"。
- bPSAState属性的更改可能涉及设备的额外操作,这可能需要一些时间。bPSAStateTimeout表示设备可以返回一个Response的最大允许超时。