[21IC首页] [21IC资料下载] [21IC器件搜索[alldatasheet网] [中国芯片手册网] [电子查询网] [磁动力工作室] [驱动程序开发网] [射频网络] [液晶之家] [可控硅应用技术网]

Computer○○的家当®

 
 
载入中...
   
                                                         设置为首页      [站长入口]    站点2: [EDN站点]   站点3:[61IC站点]  USB专区: [圈圈的USB专区]




载入中...

日志内容


52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
电脑圈圈 发表于 2006-3-3 14:27:00

IDE-USB文件包下载.rar

现在已经实现了主要功能:可以读取文件和复制文件。不支持格式化硬盘功能。
不过速度比较慢,我从本地硬盘复制文件到移动硬盘里去,速度只有50KBytes/S,
因为单片机速度不快,内存又少,USB1.1的速度也不快。另外,代码写得不够好。
 
注意:原理图中串口电平转换部分的C8和C10接反了,C11负端应接VDD。D12的SUSPEND(12脚)应该接地。USB接头的D+和D-跟芯的D+和D-之间应该串联22欧姆的匹配电阻。由于图得比较匆忙,所以没留意。右击选择图片另存为可以看到完整图片了.
 
 







阅读全文 | 回复(76) | 引用通告 | 编辑       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2008-6-22 10:01:00

computer00这个你可以直接用我的自定义的USB设备。在我的小组和BLOG里都有的。
自己去下载吧。
http://group.ednchina.com/93/8519.aspx

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
访客sx5Are(游客)发表评论于2008-6-21 0:47:00

访客sx5Are(游客)computer00:
你好啊,有没有VC通过USBD12与AT89S52通讯的实例程序啊,例如我在VC中要发送字符串"ABCDEFG",
而在AT89S52接收的也是"ABCDEFG"这些字符串.发到我邮箱:movetoporket@163.com.不胜感激啊!

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-10-24 22:08:00

computer00我试过,可以下载啊,你多试几下。可能服务器有点问题。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
szxcumt发表评论于2007-10-24 21:41:00

szxcumt00你好,uploadfile-/2007-10/1024741186.rar下不下来呀,麻烦你上传在资料库里
万分感谢!

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-10-24 14:38:00

computer00上传了一份IDE接口的资料,你下载去看看吧, 把这个看懂了,就知道该怎样用单片机去控制硬盘了.

http://computer00.21ic.org/uploadfile-/2007-10/1024741186.rar

另外,关于硬盘结构和FAT文件系统方面的,你可以看看这些资料:

http://group.ednchina.com/93/172.aspx

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
szxcumt(游客)发表评论于2007-10-23 11:09:00

szxcumt(游客)00你好,谢谢你的提示,确实是串口调试助手版本太低,另外你能不能给我们推荐一些单片机读写硬盘的资料(英文的也可),我上网搜了一段时间,没有搜到有价值的资料,我们矿大的图书馆因施工2个月没开了,学校没有图书馆确实不行啊!
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-10-15 23:09:00

computer00啊? 就照我的程序里面那样写就可以了啊. 只要你的串口调试助手支持就行了。windows自带的超级终端是支持的,你可以试试这个。只要能输出英文字符,那么汉字也是没问题的.可能是你的串口调试助手不支持汉字显示吧.
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
szxcumt(游客)发表评论于2007-10-15 21:11:00

szxcumt(游客)00你好,请教一个问题
在串口程序中,如何输出汉字?

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
xcc(游客)发表评论于2007-9-21 11:47:00

xcc(游客)哦,谢谢00啊,我等下去试试看
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-9-20 22:25:00

computer00是用PC电源供电的。你需要先调通硬盘部分。你先读硬盘的第1扇区,看它是否正确。只有调通了这一步之后,才能正确读写硬盘。我的代码我只在我的硬盘上试过成功,也许不同的硬盘还不一样,这个需要你自己调试一下。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
xcc(游客)发表评论于2007-9-20 19:11:00

xcc(游客)00那:
我是用普通的PC硬盘的,但是奇怪的是,我照你的电路图搭好板子,全部接通后,在设备管理器里可以看到这个Mass Storage类设备,但打开我的电脑,里面却没有显示存在一个Mass Storage类设备。等于说是有Mass Storage类设备连接上的提示,而实际却是没有显示出那个Mass Storage类设备。
而且PC有时候还不能正常枚举,set_usb_address函数我之前已经替换过了。
是不是有些细节需要注意?

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
xcc(游客)发表评论于2007-9-20 18:33:00

xcc(游客)00:
你那硬盘,是用电源适配器供电的吗?

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-9-20 16:42:00

computer00573是标准的数字门电路,这类IC的GND和VCC默认是要连到电源和地去的。在原理图上经常省略不画。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
xcc(游客)发表评论于2007-9-20 15:09:00

xcc(游客)00那:
你573的10跟20引脚都不用接GND跟VCC的吗?

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-9-20 1:11:00

computer00573和373的引脚排列不一样,功能是一样的。

30脚是接了地的,这里又漏画了。

我还没见过哪本书专门介绍大容量存储的,不过《计算机USB系统原理及其主/从机设计》这本书还不错.

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
xcc(游客)发表评论于2007-9-19 18:53:00

xcc(游客)00那:
有没本书,全面地介绍Mass Storage类设备以及其协议的啊?

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
xcc(游客)发表评论于2007-9-19 16:34:00

xcc(游客)00那:
你的IDE接口电路图,第30引脚不用接GND的吗?
我看你用的是573锁存器,我用373行的不?
我按照你的电路图接,但上电以后,D12工作,CLKOUT引脚有频率输出,只是GL引脚的LED灯不亮,这又是为什么?奇怪了。
代码还没来得及看。

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-8-25 11:26:00

computer00发现程序的一个BUG,有些朋友提到枚举不正常,可能是下面这个函数的问题,替换它再试试.

/***************************设置地址***************************************/
void set_usb_address(void)
{
usb_flags.flags.set_addr=1;
set_usb_addr(Control_Data.DeviceRequest.wValue);
while(select_endpoint(1)&0x01);
write_endpoint_buff(1,0,0);
while(select_endpoint(1)&0x01);
usb_flags.flags.usb_endp0_in=0;
usb_flags.flags.setup_packet_out=0;
}
/******************************************************************************/

个人主页 | 引用 | 返回 | 删除 | 回复       


单片机USB接口扩展
耿同学(游客)发表评论于2007-6-20 10:51:00

耿同学(游客)单片机USB接口扩展的汇编怎么写?
那个大好人能不能帮帮我。谢谢了。

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-5-29 1:44:00

computer00那个驱动我没有。因为我现在所做的这些设备都是windows自带的驱动,所以不需要驱动了。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
igood(游客)发表评论于2007-5-28 23:12:00

igood(游客)请问computer00
d12WINDOWS内的驱动你有吗?不知道怎么写.谢谢!

个人主页 | 引用 | 返回 | 删除 | 回复       


D12的SUSPEND(12脚)应该接地
computer00发表评论于2007-5-21 23:03:00

computer00D12的SUSPEND(12脚)应该接地
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2007-5-21 0:39:00

computer00不同的硬盘会不一样,这里的数据只是一个初始化的数据而已. 后面会从硬盘中读取实际的数据来代替它们.

对于磁盘容量,
unsigned char DISK_CAPACITY[8]= //磁盘容量
{
0x00,0x01,0xff,0x00,
0x00,0x00,0x02,0x00
};

前面一行表示总扇区数,后面一行表示每扇区字节数,所以总容量就是1FF00*200,为64M,这个是我当时做模拟U盘用的数据。

对于磁盘信息
unsigned char code DISK_INF[36]
= //磁盘信息
{
0x00, //外设类型. 0表示软磁盘设备
0x00, //最高位表示可移除介质,其它位不用
0x02, //各种版本信息
0x02, //响应的数据格式
0x1F, //附加数据长度
0x00,0x00,0x00, //保留
0x49,0x44,0x45,0xA1,0xFA,0x55,0x53,0x42, //厂商信息
0xD7,0xD4,0xBC,0xBA,0xD7,0xF6,0xB5,0xC4,0xD2,0xC6,0xB6,0xAF,0xD3,0xB2,0xC5,0xCC, /产品信息
0x31,0x2E,0x30,0x31 //版本号 这里为1.01的ASCII码
};


更详细的信息你还是看相关文档吧,很多东西我自己也记不清楚了,都是一边看文档一边做的。


http://computer00.21ic.org/user1/2198/archives/2006/9863.html

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片)
LJQ(游客)发表评论于2007-5-20 21:46:00

LJQ(游客)请问圈圈大哥,IDE转USB的程序里的:
unsigned char code DISK_INF[36]
= //磁盘信息
{
0x00,
0x00,
0x02,
0x02,
0x1F,
0x00,0x00,0x00,
0x49,0x44,0x45,0xA1,0xFA,0x55,0x53,0x42,
0xD7,0xD4,0xBC,0xBA,0xD7,0xF6,0xB5,0xC4,0xD2,0xC6,0xB6,0xAF,0xD3,0xB2,0xC5,0xCC,
0x31,0x2E,0x30,0x31
};

unsigned char DISK_CAPACITY[8]= //磁盘容量
{
0x00,0x01,0xff,0x00,
0x00,0x00,0x02,0x00
};

code unsigned char SENSE[0x12]= //模式探测返回数据
{
0x70, 0x00, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00
};



code unsigned char device_serial_number[18]= //设备序列号
{0x12,0x03,0x32,0x00,0x30,0x00,0x37,0x00,0x31,0x00,0x30,0x00,0x39,0x00,0x38,0x00,0x32,0x00};
这些是怎样算的?是不是所有的硬盘都一样的?能不能举个例子说明一下?谢谢先!!!!

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
阿普(游客)发表评论于2007-2-2 10:40:00

阿普(游客)00牛人,83年的啊,我很早就知道computer00了,没想到是你啊,强人
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-20 12:55:00

computer00自己去试试吧,我懒得想了。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
xiaoxiaohe(游客)发表评论于2006-12-20 0:09:00

xiaoxiaohe(游客)ale之后锁存数据没错,只要片选,以及读写信号没有过去,接受端不会有动作的.
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-19 18:55:00

computer00我没用过51的ALE,一般都是用IO口来模拟的.你想用它,自己去试试吧,你要注意的是,ALE信号是一直都有的,所以你每次改变P0口的数值后,ALE信号之后,锁存器输出的内容也会跟着改变.
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
xiaoxiaohe(游客)发表评论于2006-12-18 23:47:00

xiaoxiaohe(游客)圈圈看看这样好不好? P1口现在空了一个管脚, 将P1口这样分配,D12的片选可以P1口空闲出来的一个作片选,这样P1口还剩下6个与现在的接法一样,连接到IDE去,573连接到P0口,IDE的低8位数据从P0出,这样编程时,就不用管ALE信号了,自动出来了,程序能简单些啊!您看是不是这样的??
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-10 12:39:00

computer00//printf里面的内容
void printf(unsigned long int x)
{
signed char i;
unsigned char display_buffer[10];
display_buffer[10]=0;
for(i=9;i>=0;i--)
{
display_buffer[i]='0'+x%10;
x/=10;
}
for(i=0;i<9;i++)
{
if(display_buffer[i]!='0')break;
}
for(;i<10;i++)send_to_comport(display_buffer[i]);
}



51的速度本来就很慢,增加内存也没啥改善.如果要速度快的话,换成ARM或者更高速度的处理器。
我这个例子只是拿来学习用而已,用最低的成本学习USB和硬盘接口等,而并不是追求它的性能
能达到多高。

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
xiaoxiaohe(游客)发表评论于2006-12-10 0:02:00

xiaoxiaohe(游客)扩展一下ram应该可以提高不少的速度吧??把数据放到ram或者让cpld处理一部分数据,速度应该可以上来
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
xiaoxiaohe(游客)发表评论于2006-12-9 23:51:00

xiaoxiaohe(游客)版主的动作很快啊,谢谢,printf函数在IDE.c文件中用到了,见下代码::
((unsigned char *)&n_cylinders)[0]=IDE_Buffer_H;
((unsigned char *)&n_cylinders)[1]=IDE_Buffer_L;
// prints("柱面数: ",0);
// printf(n_cylinders);
// prints("",1);
read_IDE_data();//3th word
read_IDE_data();//4th word
((unsigned char *)&n_heads)[0]=IDE_Buffer_H;
((unsigned char *)&n_heads)[1]=IDE_Buffer_L;//第4个字的信息
// prints("磁头数: ",0);
// printf(n_heads);
// prints("",1);
read_IDE_data();//5th word
read_IDE_data();//6th word
read_IDE_data();//7th word
((unsigned char *)&n_sectors_per_track)[0]=IDE_Buffer_H;
((unsigned char *)&n_sectors_per_track)[1]=IDE_Buffer_L;//第7个word的信息
// prints("每道扇区数: ",0);
// printf(n_sectors_per_track);
// prints("",1);

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-9 2:06:00

computer00真是晕死了,这点代码都不能自己写啊?
我的程序中好象没有调用printf吧?printf要输出什么?自己写吧.

临时写了个serial.h,没编译过的,自己拿去试试吧.

//serial.h

#ifndef __SERIAL_H__
#define __SERIAL_H__

void init_comport(unsigned long int bit_rate);
void send_to_comport(unsigned char temp);
void prints(unsigned char * temp);
void printc(unsigned char temp);

#endif

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
xiaoxiaohe(游客)发表评论于2006-12-9 0:30:00

xiaoxiaohe(游客)是的,谢谢版主,还有printf函数的定义和serial.h文件没有啊,建议版主把他们都加入到压缩包中去,这样方便进行调试啊,谢谢
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-8 20:03:00

computer00//太长了,不让发,只好分两次了

void send_to_comport(unsigned char temp) //往串口发送一字节数据
{
sending=1;
SBUF=temp;
while(sending);
}

///////输出一个字符串
void prints(unsigned char * temp)
{
while((*temp)!=0)
{
send_to_comport(*temp);
temp++;
}
}

//把temp按16进制格式输出
void printc(unsigned char temp)
{
unsigned char j;
for(j=0;j<2;j++)
{
switch(temp>>4)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: send_to_comport((temp>>4)+'0');break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15: send_to_comport((temp>>4)+'A');break;
default: break;
}
temp<<=4;
}
send_to_comport(' ');
}

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-8 20:00:00

computer00这些串口操作的应该都很容易吧,自己写个就行了。至于在哪里增加调试信息,那就是你自己的事了,
我一般是加一个,如果调试通过了,我就会删掉它,不会保留的。你估计哪里可能会出问题,就可以在
哪里输出调试信息.

//这个是serial.c文件中的内容,自己添加进去并做函数声明即可

unsigned char sending;

void init_comport(unsigned long int bit_rate) //串口初始化函数,使用22.1184M晶体
{
unsigned char temp;
EA=0;
TMOD=0x21; //定时器0工作在模式1,定时器1工作在模式2
SCON=0x50; //串口工作在模式1
TCON=0x05;
switch(bit_rate)
{
case 300: temp=0x40;break;
case 600: temp=0xA0;break;
case 1200: temp=0xD0;break;
case 2400: temp=0xE8;break;
case 4800: temp=0xF4;break;
case 9600: temp=0xF4;break;
case 11520: temp=0xF6;break;
case 12800: temp=0xF7;break;
case 14400: temp=0xF8;break;
case 19200: temp=0xFA;break;
case 23040: temp=0xFB;break;
case 28800: temp=0xFC;break;
case 38400: temp=0xFD;break;
case 57600: temp=0xFE;break;
case 115200: temp=0xFF;break;
default : temp=0xF4;PCON=0x80;break;
}
if(bit_rate>4800)PCON=0x80; //串口波特率加倍
TH1=temp;
TL1=temp;
ES=1; //串行中断允许
TR1=1; //启动定时器1
REN=1; //允许接收
EA=1; //允许中断
}

//******************************* 串口中断处理 ***********************************
void serial_port(void) interrupt 4
{
EA=0;
if(RI)
{
RI=0; //表示接收到数据
EA=1;
return;
}
else
{
TI=0;
sending=0; //清正在发送标志
}
EA=1;
}
//*****************************************************************************************

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
xiaoxiaohe(游客)发表评论于2006-12-7 23:57:00

xiaoxiaohe(游客)打印信息能不能不注释掉??这些对于调试很有帮助啊,请版主提供一下"serial.h"的文件,还有prints,printf的具体定义,谢谢
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
computer00发表评论于2006-12-5 1:03:00

computer00USBD12只是一个接口芯片,它本身不需要上位机的驱动程序.上位机的驱动程序是针对你所枚举的设备安装的,而设备枚举是通过你的MCU控制的。

例如,如果你通过D12发送数据到PC,枚举为一个U盘,那么PC机就会安装U盘的驱动程序,由于U盘的驱动程序windows2000以上自带了,所以你不用安装,系统会自动帮你安装它.或者你也可以把它枚举成一个USB鼠标,或者USB键盘,PC机就会相应的安装这些驱动程序。如果你把它枚举成一个windows没有自带驱动程序的设备,那么它就不能正常工作了,这时你就必须要自己提供一个驱动程序给它安装了。

个人主页 | 引用 | 返回 | 删除 | 回复       


Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片)
sam(游客)发表评论于2006-12-4 16:07:00

sam(游客)请问圈圈:PDIUSBD12是不是必须要上位机安装驱动程序?可以把D12初始化好了之后,PC自动安装它的驱动?谢谢
个人主页 | 引用 | 返回 | 删除 | 回复       


回复:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源
computer00发表评论于2006-10-17 1:23:00

computer00

密码在注释里面有.用computer00.


个人主页 | 引用 | 返回 | 删除 | 回复       

发表评论:
载入中...

 
 

 

用户信息

载入中...

    
    
 
家当信息
载入中...

站长简介:  

    Computer00,男。B型血,天蝎座。爱好电子技术及计算机技术。21IC中国电子网[技术交流]版版主。

 

最新回复

载入中...

圈圈公告 
载入中...

最新家当

载入中...

友情链接 

 

家当主题

载入中...

最新留言

载入中...

搜我的家当 

          chunyang工作室
        为您提供无线通讯模块