.NET Micro Framework (MF) 原生 USB 驅動不支援 Mass Storage,需:
SectorCache 間接存取 Flash/SD,兼具快取加速與裝置抽象化。功能限制:單一邏輯單元 (LUN=0)、不支援 PC 端格式化(需本地介面)、檔案系統固定 FAT32。

int UsbMassStorage_Start(UINT32 interval_us); // 啟動,關閉舊介面、載入新 Config、啟動定時中斷
int UsbMassStorage_Stop(); // 停動,關閉中斷、還原預設 USB 介面
namespace YFSoft
{
public static class MassStorage
{
[MethodImpl(MethodImplOptions.InternalCall)]
extern static public int Start(UInt32 value);
[MethodImpl(MethodImplOptions.InternalCall)]
extern static public int Stop();
}
}
呼叫 Start() 前務必先 VolumeInfo.FlushAll() 確保快取寫入。
在 EP0_ISR() 中新增:
if (Setup->bmRequestType == 0xA1 && Setup->bRequest == 0xFE) // GET_MAX_LUN
{
usb.FIFO[0] = 0; // 單一 LUN 回傳 0
usb.Indexed.PERI_CSR0 = TXPKTRDY | DATAEND;
return;
}
if (Setup->bmRequestType == 0x21 && Setup->bRequest == 0xFF) // MASS_STORAGE_RESET
{
usb.Indexed.PERI_CSR0 = TXPKTRDY | DATAEND;
return;
}
僅需兩個 Bulk 端點:EP1 (IN)、EP2 (OUT),符合 MF 預設驅動。
| 欄位 | 說明 |
|---|---|
| dCBWSignature | 0x43425355 ('USBC') |
| dCBWTag | 主機發送標籤,CSW 需原樣回傳 |
| dCBWDataTransferLength | 預期傳輸長度,0 表示無資料階段 |
| bmCBWFlags | Bit7: 0=Out/1=In |
| bCBWLUN | 邏輯單元號 (0) |
| bCBWCBLength | CBWCB 有效長度 (1~16) |
| CBWCB | SCSI/UFI 指令區塊 |
| 欄位 | 說明 |
|---|---|
| dCSWSignature | 0x53425355 ('USBS') |
| dCSWTag | 對應 CBW 的 dCBWTag |
| dCSWDataResidue | 實際與預期傳輸長度差值 |
| bCSWStatus | 0=Pass, 1=Fail, 2=Phase Error |


