【问题标题】:What is the Logical Block Address of a sector in a USB Flashdrive?USB闪存驱动器中扇区的逻辑块地址是什么?
【发布时间】:2016-03-10 22:34:15
【问题描述】:

我正在实现 USB 作为主机来读取存储在闪存驱动器中的文件。为了阅读,我在 SCSI 中实现了 read(10) 命令。 该命令有一个名为逻辑块地址的字段,就像我要读取的地址一样。现在,我知道了我要读取的扇区号。

那么,逻辑块地址和扇区号是一样的吗?

我查看了气缸盖扇区(CHS),但我没有关于气缸或气缸盖的信息

【问题讨论】:

  • 你的意思是阅读意味着scsi_read()对吗?
  • 我正在从头开始实现代码,我没有使用库。在 SCSI 命令集中,读取命令称为 read(10),其中 1 表示命令的大小。我猜 scsi_read() 是来自某些 API 的函数调用。但我确信他们做同样的任务。所以是的,如果你有一些有用的信息
  • Read这本书。对usb编程也很有帮助。我只是想帮助你。这可能与您的问题无关

标签: usb host scsi


【解决方案1】:

在 SCSI 中的常见用法中,扇区逻辑块地址相同。您的设备很可能有 512 字节的扇区(512 字节的逻辑块)。有一些具有 4096 字节扇区的高性能 SSD 和大容量旋转介质驱动器。这些驱动器被标记为具有“高级格式化”。

SCSI 不支持 CHS 寻址。所以,如果你不知何故只有一个扇区号,它可能是 SCSI“扇区”或逻辑块地址。

典型 SCSI 命令中的所有这些整数字段都是大端格式。如果您使用的是某种典型的 x86 PC,那么您的整数将是 little-endian 格式。在将扇区号放入 READ(10) 命令的字段之前,您需要将其转换为 htobe32()htonl()num 字段也是如此:(htobe16()htons())。

【讨论】:

  • 另外,来自维基百科 (en.wikipedia.org/wiki/USB_flash_drive):扇区长度为 512 字节,以便与硬盘驱动器兼容...
  • @gubblehozer 我正在通过将 USB 实现为主机而不使用库来读取 USB 闪存驱动器。而且我正在开发的板子是小端的,我已经处理了 SCSI 命令的数据传输顺序,我的意思是字节序。是的,我的扇区大小是 512Bytes,集群中有 32 个扇区。感谢您澄清扇区是逻辑块地址。我现在面临的问题是,当我通过执行 LBA 0x0000 读取零扇区时,我得到了一些闪存驱动器上不存在的数据,我使用名为 HXD 的软件检查了闪存驱动器的内容。
  • @gubblehozer 作为响应,我得到了我要求的字节数,其中大部分是零,但在搜索闪存驱动器时不存在。你知道这里可能是什么问题吗?链接到我的阅读(10)看起来像什么-i.imgur.com/ky4FHlm.png链接到我阅读它得到的响应-imgur.com/jL6OEjE
  • 我不确定您的情况可能出了什么问题。该 CDB 看起来格式正确,可以读取一个块。
  • 是一个假设在执行 read(10) 之前执行任何其他 SCSI 命令,这可能使其读取正确?我得到了我为 LBA 0x0000 共享的图像,如果我执行任何其他 LBA,那么我会得到 512 字节的 0x00
猜你喜欢
  • 1970-01-01
  • 2023-03-02
  • 2011-03-24
  • 2019-12-14
  • 1970-01-01
  • 2012-08-18
  • 2015-06-25
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多