uboot下UFS使用SCSI验证功能
UFS 1-UFS架构简介1
UFS 2 -UFS架构简介2
UFS 3 - UFS RPMB
UFS 4 - UFS Boot
UFS 5 - UFS UIC Layer: MIPI M-PHY
UFS 6 - UAP – SCSI Commands(1)
UFS 7 - UAP – SCSI Commands(2)
UFS 8 - UAP – SCSI Commands(3)
UFS 9 - UAP – SCSI Commands(4)
UFS 10 - UAP – SCSI Commands(5)
UFS 11 - UFS RPMB分区功能验证
UFS 12 - UAP – SCSI Commands(6)
UFS 13 - Logical Unit Management
UFS 14 - UFS RPMB安全读写命令
UFS 15 - UFS RPMB操作
1 scsi支持的命令
在执行scsi命令的时候需要首先执行scsi scan
把该总线上挂载的设备都识别之后再去操作其余的动作。
$ scsi
scsi - SCSI sub-system
Usage:
scsi reset - reset SCSI controller
scsi info - show available SCSI devices
scsi scan - (re-)scan SCSI bus
scsi device [dev] - show or set current device
scsi part [dev] - print partition table of one or all SCSI devices
scsi read addr blk# cnt - read `cnt' blocks starting at block `blk#'
to memory address `addr'
scsi write addr blk# cnt - write `cnt' blocks starting at block
`blk#' from memory address `addr'
$
2 探测设备
在该处探测到两个scsi设备,均为UFS v3.1的ufs设备。大小均为3.9G
$ scsi scan
scanning bus for devices...value. rx=0, tx=0
Device 0: (0:0) Vendor: Synopsys Prod.: UFSDeviceDEVICE Rev: V3_1
Type: Hard Disk
Capacity: 4095.9 MB = 3.9 GB (1048575 x 4096)
Device 1: (0:1) Vendor: Synopsys Prod.: UFSDeviceDEVICE Rev: V3_1
Type: Hard Disk
Capacity: 4095.9 MB = 3.9 GB (1048575 x 4096)
$
3 检查设备的信息
该处查看到的设备信息和scsi scan
探测到的设备信息一致,两个ufs device均为Rev: V3_1的ufs设备,大小为3.9G。
$ scsi info
Device 0: (0:0) Vendor: Synopsys Prod.: UFSDeviceDEVICE Rev: V3_1
Type: Hard Disk
Capacity: 4095.9 MB = 3.9 GB (1048575 x 4096)
Device 1: (0:1) Vendor: Synopsys Prod.: UFSDeviceDEVICE Rev: V3_1
Type: Hard Disk
Capacity: 4095.9 MB = 3.9 GB (1048575 x 4096)
$
4 切换当前要操作的设备
scsi device 0
表示将当前要操作的设备切换到Device 0: (0:0)
- 默认的设备是设备0,想切换到哪个设备直接使用
scsi dev/device #dev_num
即可
$ scsi device 0
Device 0: (0:0) Vendor: Synopsys Prod.: UFSDeviceDEVICE Rev: V3_1
Type: Hard Disk
Capacity: 4095.9 MB = 3.9 GB (1048575 x 4096)
... is now current device
$
5 将0xb0000000开始的4K内存数据都设置为aa
$ mw.b 0xb0000000 aa 0x1000
6 将0xb0000000内存地址,大小为4K的数据写入到ufs设备0地址处
scsi write 0 0xb0000000 0 1
表示将0xb0000000开始的内存数据,写入到起始地址为0,block cnt为1的ufs设备处,ufs 普通lun的block size为4096,所以block cnt设置的大小为1。
block size的大小在ufs标准文档的11.3.8.2 Read Capacity (10) Parameter Data
有介绍
$ scsi write 0 0xb0000000 0 1
scsi write: device 0 block # 0, count 1 ... 1 blocks written: OK
$
7 从ufs设备读取数据
和上面介绍的一样,该命令是从ufs的地址0处,读取一个block的数据到0xb1000000内存地址。每一个block的大小为4096。
$ scsi read 0xb1000000 0 1
scsi read: device 0 block # 0, count 1 ... 1 blocks read: OK
8 比对写入和读出的数据是否一致
比对0xb0000000和0xb1000000两个内存地址大小为0x1000的内存数据是否一致:
- 一致,则ufs的读写数据是一致的,读写功能是OK的。
- 不一致,则说明ufs的读写功能可能存在问题,或者和scsi命令的适配存在问题。
$ cmp 0xb0000000 0xb1000000 0x1000
Total of 4096 word(s) were the same