У меня есть продукт, который представляет собой флэш-накопитель USB на базе микроконтроллера NXP LPC18xx. Я использую библиотеку, предоставленную производителем (LPCOpen), которая обрабатывает USB MSC и SD-карту (где я храню данные).
Вот проблема: Внутренне LPC18xx имеет 64-килобайтный (ограниченный аппаратно) буфер, используемый для кэширования операций чтения/записи, что означает, что он может кэшировать только до 128 блоков (512 Б) памяти. Команда SCSI Write-10 имеет поле total-blocks, которое может содержать до 256 блоков (128 КБ). При первоначальном тестировании продукта в Windows 7 он никогда не записывает более 128 блоков за раз, но при тестировании в Linux он иногда записывает более 128 блоков, что приводит к сбою микроконтроллера.
Есть ли способ сказать хост-ОС не запрашивать более 128 блоков? Я вижу ссылки [1] на команду Read-Block-Limit (05h), но, похоже, она широко не поддерживается. Кроме того, какую смысловую клавишу я должен вернуть в команду Write-10, чтобы сообщить Linux, что запись слишком велика? Я также вижу ссылки на страницу ограничения блока VPD в некоторых спецификациях устройств, но не могу найти много документации о том, как это реализовано.