|
日志内容
| 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 |
这个你可以直接用我的自定义的USB设备。在我的小组和BLOG里都有的。 自己去下载吧。 http://group.ednchina.com/93/8519.aspx
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
访客sx5Are(游客)发表评论于2008-6-21 0:47:00 |
computer00: 你好啊,有没有VC通过USBD12与AT89S52通讯的实例程序啊,例如我在VC中要发送字符串"ABCDEFG", 而在AT89S52接收的也是"ABCDEFG"这些字符串.发到我邮箱:movetoporket@163.com.不胜感激啊!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-10-24 22:08:00 |
我试过,可以下载啊,你多试几下。可能服务器有点问题。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
szxcumt发表评论于2007-10-24 21:41:00 |
00你好,uploadfile-/2007-10/1024741186.rar下不下来呀,麻烦你上传在资料库里 万分感谢!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-10-24 14:38:00 |
上传了一份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 |
00你好,谢谢你的提示,确实是串口调试助手版本太低,另外你能不能给我们推荐一些单片机读写硬盘的资料(英文的也可),我上网搜了一段时间,没有搜到有价值的资料,我们矿大的图书馆因施工2个月没开了,学校没有图书馆确实不行啊!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-10-15 23:09:00 |
啊? 就照我的程序里面那样写就可以了啊. 只要你的串口调试助手支持就行了。windows自带的超级终端是支持的,你可以试试这个。只要能输出英文字符,那么汉字也是没问题的.可能是你的串口调试助手不支持汉字显示吧.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
szxcumt(游客)发表评论于2007-10-15 21:11:00 |
00你好,请教一个问题 在串口程序中,如何输出汉字?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xcc(游客)发表评论于2007-9-21 11:47:00 |
哦,谢谢00啊,我等下去试试看
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-9-20 22:25:00 |
是用PC电源供电的。你需要先调通硬盘部分。你先读硬盘的第1扇区,看它是否正确。只有调通了这一步之后,才能正确读写硬盘。我的代码我只在我的硬盘上试过成功,也许不同的硬盘还不一样,这个需要你自己调试一下。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xcc(游客)发表评论于2007-9-20 19:11:00 |
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 |
00: 你那硬盘,是用电源适配器供电的吗?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-9-20 16:42:00 |
573是标准的数字门电路,这类IC的GND和VCC默认是要连到电源和地去的。在原理图上经常省略不画。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xcc(游客)发表评论于2007-9-20 15:09:00 |
00那: 你573的10跟20引脚都不用接GND跟VCC的吗?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-9-20 1:11:00 |
573和373的引脚排列不一样,功能是一样的。 30脚是接了地的,这里又漏画了。 我还没见过哪本书专门介绍大容量存储的,不过《计算机USB系统原理及其主/从机设计》这本书还不错.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xcc(游客)发表评论于2007-9-19 18:53:00 |
00那: 有没本书,全面地介绍Mass Storage类设备以及其协议的啊?
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xcc(游客)发表评论于2007-9-19 16:34:00 |
00那: 你的IDE接口电路图,第30引脚不用接GND的吗? 我看你用的是573锁存器,我用373行的不? 我按照你的电路图接,但上电以后,D12工作,CLKOUT引脚有频率输出,只是GL引脚的LED灯不亮,这又是为什么?奇怪了。 代码还没来得及看。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-8-25 11:26:00 |
发现程序的一个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 |
那个驱动我没有。因为我现在所做的这些设备都是windows自带的驱动,所以不需要驱动了。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
igood(游客)发表评论于2007-5-28 23:12:00 |
请问computer00 d12WINDOWS内的驱动你有吗?不知道怎么写.谢谢!
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| D12的SUSPEND(12脚)应该接地 |
|
computer00发表评论于2007-5-21 23:03:00 |
D12的SUSPEND(12脚)应该接地
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:52跟D12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2007-5-21 0:39:00 |
不同的硬盘会不一样,这里的数据只是一个初始化的数据而已. 后面会从硬盘中读取实际的数据来代替它们. 对于磁盘容量, 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 |
请问圈圈大哥,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 |
自己去试试吧,我懒得想了。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xiaoxiaohe(游客)发表评论于2006-12-20 0:09:00 |
ale之后锁存数据没错,只要片选,以及读写信号没有过去,接受端不会有动作的.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2006-12-19 18:55:00 |
我没用过51的ALE,一般都是用IO口来模拟的.你想用它,自己去试试吧,你要注意的是,ALE信号是一直都有的,所以你每次改变P0口的数值后,ALE信号之后,锁存器输出的内容也会跟着改变.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xiaoxiaohe(游客)发表评论于2006-12-18 23:47:00 |
圈圈看看这样好不好? 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 |
//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 |
扩展一下ram应该可以提高不少的速度吧??把数据放到ram或者让cpld处理一部分数据,速度应该可以上来
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
xiaoxiaohe(游客)发表评论于2006-12-9 23:51:00 |
版主的动作很快啊,谢谢,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 |
真是晕死了,这点代码都不能自己写啊? 我的程序中好象没有调用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 |
是的,谢谢版主,还有printf函数的定义和serial.h文件没有啊,建议版主把他们都加入到压缩包中去,这样方便进行调试啊,谢谢
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2006-12-8 20:03:00 |
//太长了,不让发,只好分两次了 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 |
这些串口操作的应该都很容易吧,自己写个就行了。至于在哪里增加调试信息,那就是你自己的事了, 我一般是加一个,如果调试通过了,我就会删掉它,不会保留的。你估计哪里可能会出问题,就可以在 哪里输出调试信息. //这个是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 |
打印信息能不能不注释掉??这些对于调试很有帮助啊,请版主提供一下"serial.h"的文件,还有prints,printf的具体定义,谢谢
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
computer00发表评论于2006-12-5 1:03:00 |
USBD12只是一个接口芯片,它本身不需要上位机的驱动程序.上位机的驱动程序是针对你所枚举的设备安装的,而设备枚举是通过你的MCU控制的。 例如,如果你通过D12发送数据到PC,枚举为一个U盘,那么PC机就会安装U盘的驱动程序,由于U盘的驱动程序windows2000以上自带了,所以你不用安装,系统会自动帮你安装它.或者你也可以把它枚举成一个USB鼠标,或者USB键盘,PC机就会相应的安装这些驱动程序。如果你把它枚举成一个windows没有自带驱动程序的设备,那么它就不能正常工作了,这时你就必须要自己提供一个驱动程序给它安装了。
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| Re:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源代码+实物图片) |
|
sam(游客)发表评论于2006-12-4 16:07:00 |
请问圈圈:PDIUSBD12是不是必须要上位机安装驱动程序?可以把D12初始化好了之后,PC自动安装它的驱动?谢谢
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
| 回复:AT89S52跟PDIUSBD12搭的IDE→USB转接板(原理图+源 |
|
computer00发表评论于2006-10-17 1:23:00 |
 密码在注释里面有.用computer00.
|
| 个人主页 | 引用 | 返回 | 删除 | 回复
|
|
用户信息
载入中...
|