单片机读写U盘资料
www.8dragon.com
龙人课堂
在做这个项目之前,我想提醒大家,硬件不怎么难,关键是软件的问题。所以大家只要努力,多用时间调试,最后就一定能够走通。我这里只是向大家指条好路,记住千万不要直接COPY,否则学不到什么东西,什么事情,亲自动手后,然后搞定后者提问才是最好的办法。另外,我想说明的是,我在这里讲的一般代码,大概最后速度有几十K,龙人最核心的800多K的东西,需要一定的板子费才给大家,龙人有现成的板子优惠提供给大家点击看看http://www.8dragon.com (插播的广告^_^)。希望大家能够理解。不罗嗦了,进入正题。
一、硬件选材
硬件选用最常见的8位51系列或者16位的也可以。主控芯片当然用sl811host。然后要有扩展内存,32K(62256就可以了)反向器,811的晶体最好用48M有源的,为了调试方便设置几个必要的LED,为了在电脑上仿真,接个232口,好了硬件选材基本就是这些。
二、必要工具:
开关电源(最好选用纹波少点的,否则容易读写出错)示波器、仿真器。我讲讲整个项目开发的流程,不熟悉的人可以快去补补相关东西。
首先当然是画原理图(我上面说的器件)做PCB。然后开始看USB1.1协议中的主机部分,811数据手册,SCSI协议(BULK),看FAT文件协议(有条件的可以看点U盘开发资料)等心中有个数后就可以开始投入写代码和调试了。这个软件分为3大层次来写。一是811和CPU的通信编写,就是读和写,注意811和周边外围器件的地址分配;二就是811实现USB数据流的转换,完成对USB的配置,为U盘设备设置通信地址。在这个USB流传送中主要是用了CONTROL传输。这个东西CYPRESS有完全的代码可以参考(提供链接在我们的网上下载),只需要修改一下地址或者不用修改就能直接运行,建议最好把查询方式改成中断方式,这样有利于提高CPU效率。三是对U盘枚举和设置了,根据SCSI协议只有对U盘进行设置和配置后才是可用的。到这里就可以完成对U盘的读写了,不过此时你读写的数据流,可能什么作用也不起,因为你没有文件系统,在WINDOWS里,你看不见任何东西,必须做一个事实的文件系统来管理具体的数据。
xdata BYTE SL811_ADDR_PORT _at_ 0x8000;
xdata BYTE SL811_DATA_PORT _at_ 0x8100;
extern unsigned char xdata DBUF[BUFFER_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++;
}
}
桃龙源 龙人提供
技术论坛www.8dragon.com