static USBHALStruct s_usbHAL;
static USBDeviceStruct s_usbDevice;
static InterfaceMSDStruct s_usbMSD;
void usb_msd_init(void)
{
USBHALStruct* hal = &s_usbHAL;
USBDeviceStruct* device = &s_usbDevice;
uint32_t t0 = xTaskGetTickCount();
/* 设置 USB 中断优先级(见 USB_MSD_IRQ_PRIORITY 注释) */
NVIC_SetPriority(USB_ZOFFY1_IRQ, USB_MSD_IRQ_PRIORITY);
NVIC_DisableIRQ(USB_ZOFFY1_IRQ);
NVIC_ClearPendingIRQ(USB_ZOFFY1_IRQ);
/* USB HAL 初始化 */
USBCoreZoffyConstractor(hal, USB_ZOFFY1_BASE);
hal->Init(hal);
/* USB 设备描述 */
USBDeviceConstractor(device);
device->Manufacturer = L"JW02";
device->Product = L"JW02 Photo U-Disk";
device->ConfigurationName = L"Default";
device->MaxPower = 100; /* 100mA */
device->Attributes.SelfPowered = true;
/* 固定序列号 */
s_usbSerialNumber[0] = 'J'; s_usbSerialNumber[1] = 'W';
s_usbSerialNumber[2] = '0'; s_usbSerialNumber[3] = '2';
s_usbSerialNumber[4] = 'U'; s_usbSerialNumber[5] = 'D';
s_usbSerialNumber[6] = '0'; s_usbSerialNumber[7] = 0;
device->SerialNumber = s_usbSerialNumber;
device->Init(device, hal, 0x0D28, 0xCCDD, 0x0001);
usbMSDSetup(device);
device->Start(device);
printf("[USB] MSD init OK, total=%lums\n",
(unsigned long)(xTaskGetTickCount() - t0));
/* 保存 device 指针供 UsbMsd_Poll() 查询枚举态(U盘模式互斥信任源) */
s_usbDev = device;
}