usbmsd_rom例程解析:
1、将指针映射到片上驱动程序表中:
ROM ** rom = (ROM **) 0x1fff1ff8;
2、设置设备类型和信息:
MscDevInfo.idVendor = USB_VENDOR_ID;
MscDevInfo.idProduct = USB_PROD_ID;
MscDevInfo.bcdDevice = USB_DEVICE;
MscDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0];
MscDevInfo.MSCInquiryStr = (uint32_t)&InquiryStr[0];
MscDevInfo.BlockSize = MSC_BlockSize;
MscDevInfo.BlockCount = MSC_BlockCount;
MscDevInfo.MemorySize = MSC_MemorySize;
MscDevInfo.MSC_Read = MSC_MemoryRead;
MscDevInfo.MSC_Write = MSC_MemoryWrite;
3、初始化 USB:
DeviceInfo.DevType = USB_DEVICE_CLASS_STORAGE;
DeviceInfo.DevDetailPtr = (uint32_t)&MscDevInfo;
4、使能 32位定时器 1(CT32B1)和IOCONFIG 模块
LPC_SYSCON->SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG);
5、初始化 USB 时钟和引脚:
(*rom)->pUSBD->init_clk_pins();
6、
(*rom)->pUSBD->init(&DeviceInfo); USB 初始化
init_msdstate(); 初始化海量存储状态机
#define init_msdstate() *((uint32_t *)(0x10000054)) = 0x0 (*rom)->pUSBD->connect(TRUE);
7、设置USB中断
void USB_IRQHandler(void)
{
(*rom)->pUSBD->isr();
}
8、等待USB中断
while (1)
__WFI(); /* Loop forever */
}
盘符和README.TXT文件,可以直接修改,但重新连接USB后,又恢复原样。如果想真正修改盘符,或改写README.TXT文件内容,可以打开DiskImg.c文件,里面定义一个数组DiskImage[MSC_MemorySize],盘符及READMA的文件名,内容都在里面,找到连续数值0x4C,0x50,0x43,0x31,0x33,0x34,0x78,0x20,0x55,0x53,0x42,0x28,这就是盘符,0x4C,0x50,0x43 就是LPC 的内码,0x31,0x33,0x34,0x78 大家一看就知道是 134x ,依次往下0x20 是空格,0x55,0x53,0x42,是USB.
文件的内容在最后,请大家对照码表,修改就行了。我已经在附件程序里标明了。
我更改的盘符: