update host msc hil test

This commit is contained in:
hathach
2026-03-23 15:43:47 +07:00
parent f7cf6bc581
commit 3c2627e739
5 changed files with 31 additions and 17 deletions

View File

@ -47,8 +47,8 @@ static bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const
uint32_t const block_count = tuh_msc_get_block_count(dev_addr, cbw->lun);
uint32_t const block_size = tuh_msc_get_block_size(dev_addr, cbw->lun);
printf("Disk Size: %" PRIu32 " MB\r\n", block_count / ((1024*1024)/block_size));
printf("Block Count = %" PRIu32 ", Block Size: %" PRIu32 "\r\n", block_count, block_size);
printf("Disk Size: %" PRIu32 " %" PRIu32 "-byte blocks: %" PRIu32 " MB\r\n",
block_count, block_size, block_count / ((1024 * 1024) / block_size));
return true;
}

View File

@ -47,14 +47,14 @@ static bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const
}
// Print out Vendor ID, Product ID and Rev
printf("%.8s %.16s rev %.4s\r\n", scsi_resp.inquiry.vendor_id, scsi_resp.inquiry.product_id, scsi_resp.inquiry.product_rev);
printf("%.8s %.16s %.4s\r\n", scsi_resp.inquiry.vendor_id, scsi_resp.inquiry.product_id, scsi_resp.inquiry.product_rev);
// Get capacity of device
uint32_t const block_count = tuh_msc_get_block_count(dev_addr, cbw->lun);
uint32_t const block_size = tuh_msc_get_block_size(dev_addr, cbw->lun);
printf("Disk Size: %" PRIu32 " MB\r\n", block_count / ((1024 * 1024) / block_size));
printf("Block Count = %" PRIu32 ", Block Size: %" PRIu32 "\r\n", block_count, block_size);
printf("Disk Size: %" PRIu32 " %" PRIu32 "-byte blocks: %" PRIu32 " MB\r\n",
block_count, block_size, block_count / ((1024 * 1024) / block_size));
return true;
}

View File

@ -118,15 +118,15 @@ static bool inquiry_complete_cb(uint8_t dev_addr, const tuh_msc_complete_data_t
}
// Print out Vendor ID, Product ID and Rev
printf("%.8s %.16s rev %.4s\r\n", scsi_resp.inquiry.vendor_id, scsi_resp.inquiry.product_id,
printf("%.8s %.16s %.4s\r\n", scsi_resp.inquiry.vendor_id, scsi_resp.inquiry.product_id,
scsi_resp.inquiry.product_rev);
// Get capacity of device
const uint32_t block_count = tuh_msc_get_block_count(dev_addr, cbw->lun);
const uint32_t block_size = tuh_msc_get_block_size(dev_addr, cbw->lun);
printf("Disk Size: %" PRIu32 " MB\r\n", block_count / ((1024 * 1024) / block_size));
// printf("Block Count = %lu, Block Size: %lu\r\n", block_count, block_size);
printf("Disk Size: %" PRIu32 " %" PRIu32 "-byte blocks: %" PRIu32 " MB\r\n",
block_count, block_size, block_count / ((1024 * 1024) / block_size));
// For simplicity: we only mount 1 LUN per device
const uint8_t drive_num = dev_addr - 1;

View File

@ -456,17 +456,30 @@ def test_host_device_info(board):
return 0
def print_msc_info(lines):
"""Print MSC inquiry and disk size on a single line"""
def check_msc_info(lines, msc_devs):
"""Print MSC info and verify block_count/block_size against config"""
inquiry = ''
disk_size = ''
for l in lines:
if re.match(r'^[A-Za-z].*\s+rev\s+', l):
if re.match(r'^[A-Za-z].*\s+(rev\s+|[0-9])', l) and 'Disk Size' not in l:
inquiry = l.strip()
if 'Disk Size' in l:
disk_size = l.strip()
if inquiry or disk_size:
print(f'\r\n {inquiry} {disk_size} ', end='')
# Verify block_count and block_size from "Disk Size: COUNT SIZE-byte blocks: N MB"
if disk_size and msc_devs:
m = re.match(r'Disk Size:\s+(\d+)\s+(\d+)-byte blocks', disk_size)
if m:
actual_count = int(m.group(1))
actual_size = int(m.group(2))
for dev in msc_devs:
exp_count = dev.get('block_count')
exp_size = dev.get('block_size')
if exp_count and actual_count == exp_count:
assert actual_size == exp_size, (
f'MSC block_size mismatch: expected {exp_size}, got {actual_size}')
break
def test_host_cdc_msc_hid(board):
@ -525,7 +538,7 @@ def test_host_cdc_msc_hid(board):
if msc_devs:
assert b'MassStorage device is mounted' in data, 'MSC device not mounted on host'
assert b'Disk Size' in data, 'MSC Disk Size not reported'
print_msc_info(lines)
check_msc_info(lines, msc_devs)
# CDC echo test via flasher serial
if not cdc_devs:
@ -533,6 +546,7 @@ def test_host_cdc_msc_hid(board):
return
time.sleep(2)
ser.read(ser.in_waiting)
ser.reset_input_buffer()
def rand_ascii(length):
@ -540,7 +554,7 @@ def test_host_cdc_msc_hid(board):
packet_size = 64
# Echo test: 1KB random data, write random 1-packet_size chunks, only write next once echo matched
# Echo test: write random 1-packet_size chunks, wait for echo before sending next
echo_len = 1024
echo_data = rand_ascii(echo_len)
ser.reset_input_buffer()
@ -551,8 +565,8 @@ def test_host_cdc_msc_hid(board):
ser.flush()
# wait until this chunk is echoed back
echo = b''
t = 5.0
while t > 0 and len(echo) < chunk_size:
t_end = time.monotonic() + 5.0
while time.monotonic() < t_end and len(echo) < chunk_size:
rd = ser.read(chunk_size - len(echo))
if rd:
echo += rd
@ -591,7 +605,7 @@ def test_host_msc_file_explorer(board):
timeout -= 0.1
assert b'Disk Size' in data, 'MSC device not mounted'
lines = data.decode('utf-8', errors='ignore').splitlines()
print_msc_info(lines)
check_msc_info(lines, msc_devs)
# Send "cat README.TXT" and read response
time.sleep(1)

View File

@ -182,7 +182,7 @@
"dev_attached": [
{"vid_pid": "0403_6001", "serial": "0", "is_cdc": true},
{"vid_pid": "058f_6387", "serial": "A8BEE062633D", "is_msc": true,
"msc_disk_size": 3730, "msc_inquiry": "Generic Flash Disk rev 8.07"}
"block_size": 512, "block_count": 7639040, "msc_inquiry": "Generic Flash Disk 8.07"}
]
},
"flasher": {