资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
-读写U盘的资料,龙人提供读写U盘的资料准备充分和完毕,龙人在此征求大家的意见。我是把资料一下共享出来,还是开个版块,从硬件的选材开场,一步步讲解这个工程的过程,同时附上代码。我个人赞成后面一种。因为论坛创立的目的就是为了想帮助初为技术的朋友们,不想人迷惑,让学生朋友们都能学到精华和好的东西。我曾经也做过弯路,学过周*人的东西,简直是垃圾!学了等于没学。龙人就是看不管这些创立论坛。立志为初为技术的朋友,一开场就能站在一个较高和实用的角度,不要去走那些花拳绣腿费钱费力的路。既然是学习肯定得要有资料和必要的指引,在此龙人每晚辛苦2-3个小时,做出总结和指引帮助所有的人在10-15天全部掌握这个东西,更重要的是通个这个学到单片机开发的思想,为以后的路作.同时也想你们在这里认识一帮朋友,学到做人做事的真道理,多点关爱和奉贤精神!不多说了,大家积极投票,特别是学生朋友们,踊跃投票!在2天之做决定,一切征求大家的意见。在做这个工程之前,我想提醒大家,硬件不怎么难,关键是软件的问题。所以大家只要努力,多用时间调试,最后就一定能够走通。我这里只是向大家指条好路,记住千万不要直接COPY,否则学不到什么东西,什么事情,亲自动手后,然后搞定后者提问才是最好的方法。另外,我想说明的是,我在这里讲的一般代码,大概最后速度有几十K,龙人最核心的800多K的东西,需要一定的板子费才给大家。希望大家能够理解。不罗嗦了,进入正题。首先,硬件选用最常见的8为51系列或者16位的也可以。主控芯片当然用sl811hst。然后要有扩展存,32K62256就可以了反向器,811的晶体最好用48M有源的,为了调试方便设置几个必要的LED,为了在电脑上仿真,接个232口,好了硬件选材根本就是这些。必要工具:开关电源:最好选用纹波少点的,否则容易读写出错;示波器;仿真器。我讲讲整个工程开发的流程,不熟悉的人可以快去补补相关东西。画原理图我上面说的器件做PCB。然后开场看USB1.1协议中的主机局部,811数据手册,SCSI协议BULK,看FAT文件协议有条件的可以看点U盘开发资料。等于心中有个数后就可以开场投入写代码和调试了。这个软件分为3大层次来写,首先是81和CPU的通信遍写,无非就是读和写了,注意811和周边外围器件的地址分配;之后是对811实现USB数据流的转换完成对USB的配置,为U盘设备设置,通信地址。在这个USB流传送中主要是用了CONTROL传输。这个东西CYPRESS有完全的代码可以参考,只需要修改一下地址或者不用修改就能直接运行,建议最好把,查询方式改成中断方式,这样有利于提高CPU效率。之后该是对U盘枚举和设置了,根据SCSI协议只有对U盘进展设置和配置后才是可用的。到这里就可以完成对U盘的读写了,不过此时你读写的数据流,可能什么作用也不起,因为你没有文件系统,在WINDOWS里,你看不见任何东西,必须做一个事实的文件系统来管理具体的数据。*data BYTE SL811_ADDR_PORT_at_ 0*8000; *data BYTE SL811_DATA_PORT_at_ 0*8100;e*tern unsigned char *data DBUFBUFFER_LENGTH;unsigned char SL811Read(unsigned char idata a)SL811_ADDR_PORT=a; return (SL811_DATA_PORT); void SL811Write(unsigned char idata a, unsigned char idata d)/SL811_ADDR_PORT = a; SL811_DATA_PORT = d;void SL811BufRead(unsigned char addr, unsigned char *s, unsigned char c) unsigned char idata i=c;SL811_ADDR_PORT = addr; while (i-) *s = SL811_DATA_PORT;s+;void SL811BufWrite(unsigned char addr, unsigned char *s, unsigned char c) unsigned char idata i=c;SL811_ADDR_PORT = addr; while (i-) SL811_DATA_PORT = *s;s+;811和CPU通信的代码,最地层的东西,新手在这个地方一定要注意地址的定义,不要笑,这个东西有些新人肯定不通。操作811之类的东西最好用地址来操作,速度快。不要用位控,速度慢,并且时序控制起来也烦人。大家不要嫌我罗嗦这个东西可是最根本的,到这里来的我希望都是新人,我讲的知识也是针对新人,所以应该根底一点。你在自己制作811的时候函数可以就用这个了,但是地址可以根据具体情况换成响应的就可已了。还不明白的把电路贴出来,龙人帮你算。今天讲讲811如何把数据流转成USB的数据流,使其能和主机通信。先说说大的流程:根据我自己编写的如件,其实也和CYPRESS提供的那个差不多,只是把它的查询方式改成了中断方式U盘一插上后,CPU是怎么知道有设备接入的:这是通过811的中断告诉CPU的,同时当U盘拔出去时也是通过中断告诉CPU的。那CPU是怎么判断 是插入还是拔出呢.可以通过读函数SL811Read(IntStatus)读取中断存放器的值注意,在读中断存放器的值必须对811进展初始化,SL811Write(IntEna,0*20);SL811Write(IntStatus,INT_CLEAR);SL811Write(cSOFt,0*ae);初始中断存放器,然后清0,翻开SOF可以开始传输数据流)根据值我们就可以来控制软件的流程:1,如果是插入盘,则就可以给U盘分配地址,获取配置描述符中的具体数据,然后根据数据来设置实际的U盘包端点大小。最后根据具体设备类来设置配置值,然后配置接口。到此时,整个USB枚举配置就完成了。给个配置的大体框架流程就是,希望大家不要深究具体的细节要宏观上把握,这样布局好了,即使不对改也好改,加也好加。鉴于这些代码CUPYESS都有所以我就不贴了,我只是点一下流程。流程只要不对第一步的USB枚举就一定能通过_可以使用仿真器观察一下存变量的值搞单片机一定得有有个仿真器如果通不过,设下断点看停在那里。根据我的经历只要你不抄错CYPRESS的代码就一定通过,当然也有通过的,怎么办.找龙人呀!首先单独测试你的读写函数几十次看有没有错,确保最地层的东西。如果不正确,则就出在你的硬件了,别慌,不要乱改硬件,新手们注意一下看自己的读写地址设置正确了没有,如果确保没错,则就是硬件了。经历之一,用示波器看看SOF是不是1MS,如果不是注意晶体了,问题多半在他。如果不是,则检查数据地址线,看有没有断路的,烦人!_龙人最讨厌折腾班子了。如果前面的工序都检查完了,则问题还没有解决,赶快到龙人论坛.8dragon.提问,最好贴出你的代码,龙人帮你解决。提醒大家抄CYPRSS代码的时候最好仔细点,我觉察好多人都粗心的,最后好我一看就是很简单的错误。今天讲到这,由于大家都有CPYRESS的代码,龙人也是抄它的,所以就不贴出了。要想学东西,赶快动手自己写一面,然后运行调试,看看结果。哇,结果正确!龙人恭喜你了!失望,结果不正确呀,我们都是学生,从头来呀,没什么的,坚持坚持!我相信高手就是从这里开场有分水岭了。失望透顶,还是解决不了,没关系,不要忘记了还有桃龙源呀,龙人一定会帮你的!_!提出的问题,贴出你的错误,龙人熬夜帮你搞顶!好,今天说到这,赶快调试哦。明天第3讲!unsigned char EnumUsbDev(unsigned char usbaddr)GetDesc()!SetAddress(usbaddr)return FALSE;uAddr = usbaddr; if (!GetDesc()return FALSE; 今天讲讲811如何把数据流转成USB的数据流,使其能和主机通信。先说说大的流程:根据我自己编写的如件,其实也和CYPRESS提供的那个差不多,只是把它的查询方式改成了中断方式U盘一插上后,CPU是怎么知道有设备接入的:这是通过811的中断告诉CPU的,同时当U盘拔出去时也是通过中断告诉CPU的。那CPU是怎么判断是插入还是拔出呢.可以通过读函数SL811Read(IntStatus)读取中断存放器的值注意,在读中断存放器的值必须对811进展初始化,SL811Write(IntEna,0*20);SL811Write(IntStatus,INT_CLEAR);SL811Write(cSOFt,0*ae);初始中断存放器,然后清0,翻开SOF可以开始传输数据流)根据值我们就可以来控制软件的流程:1,如果是插入盘,则就可以给U盘分配地址,获取配置描述符中的具体数据,然后根据数据来设置实际的U盘包端点大小。最后根据具体设备类来设置配置值,然后配置接口。到此时,整个USB枚举配置就完成了。给个配置的大体框架流程就是,希望大家不要深究具体的细节要宏观上把握,这样布局好了,即使不对改也好改,加也好加。鉴于这些代码CUPYESS都有所以我就不贴了,我只是点一下流程。流程只要不对第一步的USB枚举就一定能通过_可以使用仿真器观察一下存变量的值搞单片机一定得有有个仿真器如果通不过,设下断点看停在那里。根据我的经历只要你不抄错CYPRESS的代码就一定通过,当然也有通过的,怎么办.找龙人呀!首先单独测试你的读写函数几十次看有没有错,确保最地层的东西。如果不正确,则就出在你的硬件了,别慌,不要乱改硬件,新手们注意一下看自己的读写地址设置正确了没有,如果确保没错,则就是硬件了。经历之一,用示波器看看SOF是不是1MS,如果不是注意晶体了,问题多半在他。如果不是,则检查数据地址线,看有没有断路的,烦人!_龙人最讨厌折腾班子了。如果前面的工序都检查完了,则问题还没有解决,赶快到龙人论坛.8dragon.提问,最好贴出你的代码,龙人帮你解决。提醒大家抄CYPRSS代码的时候最好仔细点,我觉察好多人都粗心的,最后好我一看就是很简单的错误。今天讲到这,由于大家都有CPYRESS的代码,龙人也是抄它的,所以就不贴出了。要想学东西,赶快动手自己写一面,然后运行调试,看看结果。哇,结果正确!龙人恭喜你了!失望,结果不正确呀,我们都是学生,从
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号