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

Computer○○的家当®

《圈圈教你玩USB》
网上购书点

当当网    淘宝网
中国互动出版社
卓越亚马逊
更多网点...
 
 
载入中...
   
                             设置为首页      [站长入口]    站点2: [EDN站点]   站点3: [与非站点]   站点4: [电子园站点]   我的USB专区: [圈圈的USB专区]

 




载入中...

日志内容


89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
电脑圈圈 发表于 2006-3-3 14:09:00

USB-D12文件包下载.rar

这是一个用89S52加PDIUSBD12模拟的一个U盘,里面涉及到USB接口,USB大容量存储设备,FAT16文件系统等内容。插入电脑后,可显示移动磁盘盘符及一个文本文件。

       需要说明一下的是,这个包中的原理图,IDE接口部分、74HC573、以及RS232串口等部分,是作为这个实验板的一部分。在这个模拟U盘的程序中,是没有用到的。在下一个“移动硬盘”的例子中,就用到了IDE接口跟74HC573了。至于RS232,那时笔者在调试程序时用的。如果您不需要通过串口调试程序,RS232部分可以不管它。
 
注意:原理图中串口电平转换部分的C8和C10接反了,C11负端应接VDD。D12的SUSPEND(12脚)应该接地。USB接头的D+和D-跟芯的D+和D-之间应该串联22欧姆的匹配电阻。由于图得比较匆忙,所以没留意。右击选择图片另存为可以看到完整图片了.
 

 
 
 
 




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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-20 20:03:00

computer00是的。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
问题(游客)发表评论于2008-9-20 14:12:00

问题(游客)code unsigned char DBR[512]中的磁头数与每道扇区数、每簇扇区数这三个参数好像没用哦。因为要计算U盘容量只要两个参数就够了:扇区字节数*扇区数。
问题1:既然没有用,可否设定为其他值?


要计算LBA地址,只需要每FAT扇区数、FAT副本数共两个参数就够了。
读取数据的时候,电脑向U盘发送的是LBA地址——该LBA地址有电脑的windows自动计算完成,是不是这样?
问题2:LBA的取值范围实际就是disk_CAPACITY[8]中前四个字节表示的值?


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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-11 15:31:00

computer00解压出错可能是你下载时不完整,使用下载工具下载试试。

关于LBA如何计算,请参看网上的一篇文章《4.5万透视FAT32系统.doc》以及FAT文件系统相关文档。

详细怎么计算我一时跟你说不清楚,得花成千上万字的篇幅。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
有点迷茫(游客)发表评论于2008-9-11 13:02:00

有点迷茫(游客)程序中 if(LBA==0x40)
if(count<=(sizeof(FILE_DATA)-1))pData=FILE_DATA+count;

意思就是LBA==0x40则发送TEXT.txt文件(实际就是FILE_DATA的内容)到电脑;



现在问题是:LBA如何计算?LBA==0x40为什么代表TEXT.txt的逻辑地址?如果想发送TEXT1.txt文件,那么LBA==?
要将多个文件发送到电脑怎么办?假定有100个文件,显然不能用if(LBA==XXXX)语句,太麻烦了。

谢谢指点迷津!

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
有点迷茫(游客)发表评论于2008-9-11 13:01:00

有点迷茫(游客)


'T', 'E', 'S', 'T', '1', ' ', ' ', ' ', 'T', 'X', 'T', //文件名
0x01, //文件属性,表示磁盘标卷
0x00, //保留
0x00, //创建时间毫秒时间戳
0x00, 0x40, //文件创建时间
0x41, 0x31, //文件创建日期
0x42, 0x31, //最后访问日期
0x00, 0x00, //起始簇号高位字节,FAT12/16必须为0
0x00, 0x40, //最后写时间
0x42, 0x31, //最后写日期
0x02, 0x00, //起始簇低位字节
LSB(sizeof(FILE_DATA)-1),MSB(sizeof(FILE_DATA)-1), 0x00, 0x00, //文件长度

};

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
有点迷茫(游客)发表评论于2008-9-11 12:49:00

有点迷茫(游客)假定有3个文件,则ROOT_DIR应修改为
code unsigned char ROOT_DIR[32*3]= //根目录
{
.....

'T', 'E', 'S', 'T', '0', ' ', ' ', ' ', 'T', 'X', 'T', //文件名
0x01, //文件属性,表示磁盘标卷
0x00, //保留
0x00, //创建时间毫秒时间戳
0x00, 0x40, //文件创建时间
0x41, 0x31, //文件创建日期
0x42, 0x31, //最后访问日期
0x00, 0x00, //起始簇号高位字节,FAT12/16必须为0
0x00, 0x40, //最后写时间
0x42, 0x31, //最后写日期
0x02, 0x00, //起始簇低位字节
LSB(sizeof(FILE_DATA)-1),MSB(sizeof(FILE_DATA)-1), 0x00, 0x00, //文件长度

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


Re:关于LBA的计算问题
有点迷茫(游客)发表评论于2008-9-11 12:46:00

有点迷茫(游客)问题1:
磁盘容量DISK_CAPACITY好像没什么用?该数组与64M好像没有关系?



问题2:
关于LBA的计算问题。每个文件的LBA如何计算?

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-5 17:30:00

CL(游客)您的那个例子我下了的`` 一解压就报错`````````` 我现在没有专业的板子` 我现在就一面包板子`````````` 呵呵` 连好后 POWER灯亮` 其它没什么状况了` 您能不能告诉我些检查的方法
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-5 15:45:00

computer00当然要有正确的固件才会识别出设备了。建议你还是用HID设备吧,
可以参考这个例子:http://group.ednchina.com/93/8769.aspx
硬件应该就我们小组里面的USB学习板。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-5 11:27:00

CL(游客)我从网上当的 pdiusbd12简单实例 这个您应该看过吧` 整个应该是没有问题的 有驱动 有硬件程序 有上位机程序 现在连好了电路 插上USB接口 没有什么反映 有时候会出现 异常电泳的问题` 要如何才能提示安装驱动呢`? 上位机程序 需要设置些什么呢? 就这样打开那程序 总报找不到设备 那程序改如何用啊? 您知道那程序吗? 就是通过上位机通过d12控制89S52的灯` 您如果没有这个程序 我发一份给您 您帮我看看 有没有问题 好吗? 不胜感激`
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-5 10:14:00

CL(游客)OO大侠 请教一下` 电路连对了之后 是不是就会现在有USB插入~? 还是固件要写好才会出现?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-4 1:19:00

computer00使用DDK那是要自己开发驱动了,也可以看小组里的文章,我有写过一个简单的驱动。

使用HID设备就不用自己开发驱动了,直接只有VC就可以编译。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-3 17:52:00

CL(游客)说错了  是DDK 呵呵`  我可以用这个build吗~?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-3 17:50:00

CL(游客)我现在就一DKK 可以用这个编译吗~? 怎么写驱动用什么工具过程能说详细点吗?~
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-3 12:44:00

computer00可以用HID设备的,你看看这个帖:http://group.ednchina.com/93/8769.aspx
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-3 11:23:00

CL(游客)OO大侠 请教一下 驱动写在哪啊?~ 我下了个程序 有固件这块,有上位机的,还有驱动的 vc++写的 怎么用呢?~ 驱动要烧到芯片还是 怎么用啊~? 菜鸟一只 见笑了!
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-2 18:41:00

CL(游客)还要几个月啊~? 我等不鸟那么长时间了啊 OO大侠! 您能不能搞个简单的pc通过AT89S52和D12通讯的简单例子我啊?~ 急啊!!!! 油箱 clhh123@163.com 谢谢啊!!!!!!! 图和原码最好都有的!!! 最好再多点注释~~~ 呵呵` 以后一定力挺OO大侠的书和bolg
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-2 15:26:00

computer00快了,再等几个月吧……
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-2 14:29:00

CL(游客)您的USB书什么时候出来啊?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-9-1 20:50:00

computer00用11.0592M的晶体也可以,就是波特率要改,如果不改,那么波特率只有一半。
IDE PORT是接IDE硬盘的,你没有可以不管它。
ZLG那本书我也看过一下,不是太容易懂。你可以等我的USB书出来看看有没有帮助了。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-1 19:37:00

CL(游客)再补充一句啊`` 嘿嘿` 我有本周力功的 固件编程与驱动开发` 不知道你看过没有`` 我看着像天书!OO你如果看过` 请指教一下` 着重看哪些` 怎么看这本书 怎么入手 或者有好的入门书 资料分享给我 谢谢! 最好是那种手把手教的呵呵! 我的油箱:clhh123@163.com 发地址我下载也可以 谢谢
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
CL(游客)发表评论于2008-9-1 19:15:00

CL(游客)晶震用11.0592的可以吗?需要调整哪些地方` 我一出道小菜鸟``` 还有那IDE PORT就是OO你说的IDE接口.怎么用呢? 我没有你那样的板子,我就用的面包板,已经完成了89S52于计算机的通讯了 现在想加入USBD12 需要注意些什么? 望OO明示!
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-8-30 21:04:00

computer00是的,根据DBR以及FAT协议,可以推测出FAT的LBA。LBA通常有两个,后面一个为备份。是大,最大簇数为65536,但实际上没这么多的,有些簇号是保留的。文件的首簇号由目录项指定,文件首簇的数据肯定不会在根目录中。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
无根(游客)发表评论于2008-8-29 12:51:00

无根(游客)请教圈圈:

if(LBA==0)return DBR;
if(LBA==2)return FAT;
if(LBA==0x40)return ZERO;
if(LBA==0X0A)return FAT;
LBA是怎么来的,FAT16规范规定的吗?LBA==2表示FAT,为什么LBA==0X0A也表示FAT呢?

再问:
对应于FAT16文件系统,FAT理论最大值为(簇数×每醋字节数):65536*2=128K,对不对?



又问:
文件的首簇(第一簇)位于根目录中,第二簇~最后一簇位于FAT表中,对不对?


谢谢!

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-7-20 9:36:00

computer00不会吧?是不是你的板子没焊好?这个电路图比较老的,有些地方有更正,并且程序也有bug,你对照我新版的原理图,以及新版的程序试试看。

你可以来这里找到新版的全部相关资料。http://group.ednchina.com/93/8519.aspx

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
usb(游客)发表评论于2008-7-18 22:57:00

usb(游客)圈圈啊,求救了,按照你的电路图做了好几块板,每次都是无法识别啊!led亮四五下,然后就出现unkown deveice
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-7-16 15:37:00

computer00用AT89C5131 U盘可以是可以,不过不划算,现在有专门的做U盘的芯片。
这个芯片我没用过,下载程序的方法应该在数据手册中有说明。
应该会支持ISP下载功能,或许还可以通过USB口下载程序。或许还支持用编程器烧录。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
anny(游客)发表评论于2008-7-16 14:23:00

anny(游客)我想请问如果用AT89C5131可以做U盘吗?是怎么把程序下载到AT89C5131呢?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-5-15 2:59:00

computer00IDE port它不是个什么芯片,是硬盘接口。IDE接口应该听说过吧?
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
访客uYPc62(游客)发表评论于2008-5-15 2:33:00

访客uYPc62(游客)printf是为了串行口输出,由于调试USB枚举吧?
我想问一下,IDE PORT具体用的是什么型号的芯片啊?

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2008-5-7 20:15:00

computer00能发现新硬件了,应该没坏吧。用BUS HOUND抓数据看看,都返回了些啥。
仔细检查D12是否焊接好了,用我的EDN USB板第一个测试程序读ID看看是否正确。

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


我的D12芯片是不是坏了啊?
lancewood(游客)发表评论于2008-5-7 10:09:00

lancewood(游客)我参照您的电路仿制了一块,S52晶振用的是20M,接在开发板上的,D12枚举后电脑上就是UNKNOW DEVICE,不正常啊?怎么才能插入电脑后,可显示移动磁盘盘符及一个文本文件。是不是D12坏了啊?

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
访客wBRe7H(游客)发表评论于2008-2-28 13:23:00

访客wBRe7H(游客)SUSPEND
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2007-9-9 12:50:00

computer00在WIN XP下,BUS HOUND是不能看到设置地址之前的数据包.
在2000下,好象可以看到所有的数据包。

你所看到的MP3,你还要看看它的端点0大小.如果它的端点0比18字节大,那么它一包就可以全部返回18字节了。
但是D12不一样,D12的端点0只有16字节,所以必须分成两包返回。但是在设置地址之前,主机只会读第一包,
剩下的就不理了。就会进入设置地址阶段。

如果你在返回第一包之后,就检测不到动作了,那么可能是你根本没有正确返回这个数据包。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
ulr(游客)发表评论于2007-9-9 10:13:00

ulr(游客)谢谢:)
恩,这个我看到了,pc第一次发送get_descriptor是为了确认是否真的有usb设备连接到总线上。可是,我插上买来的mp3用bushound抓包,发现每次第一次获取的描述符就是0x12个字节,我的pc装的是win2k,我在其他地方也看到有资料说,第1次是为了确认usb设备的真正连接,但是看到的不太一样,无法判断哪个是实际的过程,大胆的怀疑一下:会不会是bushound没有记录全部的过程?
第2个困难是接收到setup包后,我发送了16个设备描述符,但是之后没有ep0-tx中断发生,也没有其他的标准请求中的任何中断发生,枚举无法进行下去了,正常情况下,这时usb主机会发送其他的中断的,如设置地址,是这样的吗?

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2007-9-8 21:12:00

computer00这个问题我已经回复过好几次了,在未设置地址之前,只需要返回前16(事实上只有8个就够了)个即可,主机不会再去读剩下的2字节. 等设置地址之后,才会读完整的设备描述符. 你在我的其它帖子看看,应该有更详细的说明。
个人主页 | 引用 | 返回 | 删除 | 回复       


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
ulr(游客)发表评论于2007-9-8 20:36:00

ulr(游客)哦,我看到了:)
还有个问题,就是接收到主机发送过来的
setup_packet : 80 06 0001 0000 4000 后,我在get_descriptor()里发送了16个字节的
0x12 0x01 0x01 0x10 0xdc 0x00 0x00 0x10 0x04 0x71 0x06 0x91 0x01 0x00 0x00 0x00设备描述符,之后就一直什么中断都没有了,没有ep0-tx的中断,这样就没有办法继续下去了呀,我很不清楚为什么会没有ep0-tx的中断,这个中断的触发是需要pc上的usb-host发出的吧?可是他没有发出来不知道是为什么呀?

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
computer00发表评论于2007-9-8 3:11:00

computer00回 wahaha: 管它呢,一直为低就低了。反正等下进到主循环中会去处理的。

回 ulr: 那是定义在一个联合(共用体)里面的,我是将整个中断寄存器的值读回,然后通过这个联合,将它分配到一个结构体的位段中去.你找找这个联合的定义。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
ulr(游客)发表评论于2007-9-7 23:26:00

ulr(游客)oo你好,我还有一个问题,在你的main中,调用ep0-in的条件是
if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;}
但是我没有找到对
Interrupt_Register.Interrupt.control_in_port的附值和初始化操作,所以不太清楚它对调用ep0-in的影响。

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


Re:89S52加USBD12模拟的一个U盘(源码+原理图+实物照片)
wahaha(游客)发表评论于2007-9-7 19:46:00

wahaha(游客)
以下引用computer00在2007-9-7 17:03:00发表的评论:
不用加了吧。后面那么多读的了。现在都跑得好好的了,加个多麻烦。


不是 就是在程序刚开始的时候
如果你不读的话 INT就一直是低吧

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

发表评论:
载入中...

 
 

 

用户信息

载入中...

    
    
 
家当信息
载入中...

站长简介:  

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

 

最新回复

载入中...

圈圈公告 
载入中...

最新家当

载入中...

友情链接 

 

家当主题

载入中...

最新留言

载入中...

搜我的家当 

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