阅读:2226回复:8
做完了U盘、USB Host的开发,把部分源码和一些资料和大家分享一下!!
不知道怎么贴多个附件,只好贴了2个C文件。还有其他文件,和一些我愿意公开的代码。
需要的和我联系 qq:55226306 main.c里面的东东: ///////////////////////////////////////////////// extern unsigned long xdata DirStartCluster,DirStartCluster32; extern unsigned char xdata UARTBUF[UARTBUF_LENGTH]; extern Command_Def xdata Command; extern SYS_INFO_BLOCK xdata DeviceInfo; extern FILE_INFO xdata ThisFile; ////////////////////////////////////////// void Init_SpecialInterrupts(void) { IT0 = 0; EX0 = 1; } void Init_Port() { P0 = 0xFF; P1 = 0xFF; P2 = 0xFF; P3 = 0xFF; SL811_CS=0; } /*Serial Port */ /*Mode = 1 /8-bit UART Serial Port Interrupt = Disabled */ /*Receive = Enabled */ /*Auto Addressing = Disabled */ void Init_COMM(void) { TMOD=0x11; SCON = 0x53; PCON = 0x80 | PCON; T2CON=0x30; RCAP2H=0xFF; // 57600 @ 21.1184MHz: 24000000/(32*(65536-(RCAP2H,RCAP2L))) RCAP2L=0xF4; TI=0; RI=0; TR2=1; ES = 1; } void main(void) { unsigned char temp; unsigned int time_count; SL811_RST=0; DelayMs(250); SL811_RST=1; Init_SpecialInterrupts(); Init_Port(); Init_COMM(); SL811_Init(); bFlags.bits.bUartInDone=0; DirStartCluster=0; DirStartCluster32=0; for(temp=0;temp<64;temp++) DBUF[temp]=0; ENABLE_INTERRUPTS; while(TRUE) { time_count++; if (time_count>1000) { DISABLE_INTERRUPTS; time_count = 0; ENABLE_INTERRUPTS; check_key_LED(); } if(bFlags.bits.SLAVE_FOUND){ DISABLE_INTERRUPTS; bFlags.bits.SLAVE_FOUND=FALSE; DelayMs(250); if(EnumUsbDev(1)) // enumerate USB device, assign USB address = #1 { bFlags.bits.SLAVE_ENUMERATED = TRUE; // Set slave USB device enumerated flag DirStartCluster=0; DirStartCluster32=0; ThisFile.FatSectorPointer=0; MCU_LED1=0; } ENABLE_INTERRUPTS; } if(bFlags.bits.SLAVE_REMOVED){ DISABLE_INTERRUPTS; bFlags.bits.SLAVE_REMOVED=FALSE; bFlags.bits.SLAVE_ENUMERATED = FALSE; bFlags.bits.SLAVE_IS_ATTACHED = FALSE; MCU_LED1=1;MCU_LED2=1; ENABLE_INTERRUPTS; } if(bFlags.bits.bUartInDone){ DISABLE_INTERRUPTS; bFlags.bits.bUartInDone=0; if(DeviceInfo.FAT) //FAT32 UartHandler32(); else UartHandler(); //FAT16 ENABLE_INTERRUPTS; } if(bFlags.bits.bMassDevice){ DISABLE_INTERRUPTS; bFlags.bits.bMassDevice=FALSE; if(EnumMassDev()) { bFlags.bits.SLAVE_IS_ATTACHED = TRUE; MCU_LED2=0; } else { bFlags.bits.SLAVE_IS_ATTACHED = FALSE; temp=SL811Read(IntStatus); if(!(temp & 0x40)) bFlags.bits.SLAVE_FOUND=TRUE; } ENABLE_INTERRUPTS; } } } 不知道怎么贴多个附件,只好贴了2个C文件。还有其他文件,和一些我愿意公开的代码。 需要的和我联系 qq:55226306 |
|
|
沙发#
发布于:2005-05-10 17:37
没有QQ!MSN可以吗?templa_0520@hotmail.com
另有问题请教,大侠愿意教吗? |
|
板凳#
发布于:2005-05-13 22:06
谢谢楼主
|
|
|
地板#
发布于:2005-05-14 21:24
不错,对肯公开东东这一点值得称赞。不过你这个代码和CYPRESS的没本质上的区别,主要存在以下缺陷:1.不能进行写操作;2.速度慢,不超过64K/s;3.错误的异常处理
:D |
|
地下室#
发布于:2005-05-15 14:34
楼上的大侠, 看了你的回复 厉害!! 小弟在做毕业设计,PC机和单片机的USB通信, 用AT89S52和D12做的板子也加了串口(做调试用) 参考的资料是周立功的<<PDIUSBD12固件编程与驱动开发>>,但是那本书程序中的许多函数是没有给出来的,有许多要求回答的数据是用变量给出来的 ,估计是要买他的那个板子才会把 头文件给你, 对D12的操作,以及中断的处理估计问题不大,(毕竟看到了许多高手的经验谈) 现在我遇到的最大的问题就是标准请求的数据格式和怎么回答,以及回答的描述符的数据的具体内容. (我的程序是用汇编在写),当然,哪位高手能提供 C 也没有关系, 还忘大侠指点啊 我的邮箱是 zdanywn10000@163.com 电话028-87724691 |
|
5楼#
发布于:2005-05-15 23:56
支持,我为人人,人人为我。
|
|
6楼#
发布于:2005-05-16 08:39
linguohui大侠说得很对,这3个问题已经害了很多人,我就是之一!可是为什么没有人将解决的方法告诉大家呢,看历史贴就知道:很多人在开始编程时就遇到这些问题。想linguohui大侠肯定知道解决方案,就算替菜鸟们扫扫盲吧,给些提示也好啊。我花了个把月才开始怀疑CYPRESS的源码,之前我还把它当圣经了呢!
|
|
7楼#
发布于:2005-05-16 14:35
楼主和3楼的大侠都好厉害啊!能帮我解决下问题吗?我的毕业设计要求用PD12+AT89C51,写一个固件程序让主机能识别出一个大容量存储设备.不要求对Flash进行读写.就相当于做个空壳子,让主机以为这是个u盘就可以了.但是我始终调试不出来.不知道是描述符不对还是程序有问题.我用的SST89C58仿真器和PD12.还有就是调试的时候不知道怎么才能一步一步调.调的时候用keil c把程序下到仿真器里运行时不知道该怎么看运行过程,也就不知道我的程序到底那里不对?感觉应该用bus hound,但是又不会用.求大侠指点!如果大侠有现成资料,我愿意出资购买!
|
|
8楼#
发布于:2005-05-17 14:53
7 楼的老兄,我也是用MCS51和D12做U盘,现在已经做好了,跟市场上的U盘完全一样,很好用的,如果你的问题还没有得到解决,我可以给你 提供各方面的技术,我QQ:43225058
|
|