打印
[微控制器/MCU]

LPC1343 USB海量存储驱动方法,实现内部32k flash 读写操作

[复制链接]
2170|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
年轻不在|  楼主 | 2010-7-27 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;

相关帖子

沙发
年轻不在|  楼主 | 2010-7-27 21:18 | 只看该作者
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);



(*rom)->pUSBD->connect(TRUE);  连接USB

使用特权

评论回复
板凳
年轻不在|  楼主 | 2010-7-27 21:18 | 只看该作者
7、设置USB中断



void USB_IRQHandler(void)



{



  (*rom)->pUSBD->isr();



}



8、等待USB中断



while (1)



      __WFI();                                /* Loop forever */



}

使用特权

评论回复
地板
年轻不在|  楼主 | 2010-7-27 21:18 | 只看该作者
符和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.

文件的内容在最后,请大家对照码表,修改就行了。我已经在附件程序里标明了。

我更改的盘符:

使用特权

评论回复
5
手写识别| | 2010-7-28 12:28 | 只看该作者
最终将内容是存储在哪了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

106

主题

447

帖子

1

粉丝