UFS 16 - uboot下UFS使用SCSI验证功能

uboot下UFS使用SCSI验证功能

  • 1 scsi支持的命令
  • 2 探测设备
  • 3 检查设备的信息
  • 4 切换当前要操作的设备
  • 5 将0xb0000000开始的4K内存数据都设置为aa
  • 6 将0xb0000000内存地址,大小为4K的数据写入到ufs设备0地址处
  • 7 从ufs设备读取数据
  • 8 比对写入和读出的数据是否一致

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有介绍
    UFS 16 - uboot下UFS使用SCSI验证功能_第1张图片
$ 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

你可能感兴趣的:(UFS专栏,UFS使用SCSI验证功能,uboot下UFS使用SCSI)