Skip to content

USB Class MSC SCSI CB Length is wrong for 3 commands #17

@froha

Description

@froha

Describe the set-up
Custom board with USB Host and stm32-mw-usb-host.
A Zephyr device with a USB Device with MSC Class with the new USB Stack Next.
CONFIG_USB_DEVICE_STACK_NEXT=y

Describe the bug
The new Zephyr USB Device Stack checks the length of the SCSI command.
The log of the Zephyr RTOS shows following:
<err> usbd_msc: Unknown SCSI opcode 0x12
The message is not correct, because the length is wrong for this opcode.

The bug is that the stm32-mw-usb-host sets for all SCSI commands a length of 10.
But the following commands has a length of 6:

Opcode: TEST_UNIT_READY
Function: USBH_MSC_SCSI_TestUnitReady

Opcode: INQUIRY
Function: USBH_MSC_SCSI_Inquiry

Opcode: REQUEST_SENSE
Function: USBH_MSC_SCSI_RequestSense

In this functions it should be:
MSC_Handle->hbot.cbw.field.CBLength = 6;
instead of:
MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH;

#define CBW_LENGTH 10

For the other 3 commands (READ_CAPACITY10, WRITE10 and READ10) the length of 10 is correct.

How To Reproduce
Use a Zephyr RTOS on a board (ST Board) and the Mass Storage example.
A board with the stm32-mw-usb-host and MSC Class.
For Zephyr RTOS you can enable following to show the error Message:
CONFIG_USBD_MSC_LOG_LEVEL_ERR=y

Additional context
SCSI commands description for example:
https://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068j.pdf
INQUIRY command page 92
REQUEST SENSE command page 195
TEST UNIT READY command page 230

The most software will ignore this problem, but not the new Zephyr USB Stack.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinginternal bug trackerIssue confirmed and reported into a ticket in the internal bug tracking system.mwMiddleware-related issue or pull-request.usbUSB-related (host or device) issue or pull-request

Type

Projects

Status

To release

Relationships

None yet

Development

No branches or pull requests

Issue actions