chw75 发表于 2005-8-30 20:50:01

lumit4510下u盘源程序新鲜出炉

我花了差不多一个月的时间终于实现了u盘源程序。没有斑竹李明的支持,我不可能在这么短的时间内实现这个程序。在此对斑竹表示最诚挚的谢意!此外,也对zhaoic、gongxf、jtag、coryxie等的支持表示衷心的感谢。

本程序运行前提事项:
(1)硬件飞线 ( 最新版的硬件就不用飞线了 )
(2)卸载我前面移植zhaoic的驱动程序(卸载方法:可在运行该程序过程中,在设备管理器中卸载)
(3)安装ads1.2.

add by limingth:还有一点需要注意,就是 bootloader 请用 v1.1.0 版本的,不要用 1.4.0 版本,我试过似乎在新的 bootloader 上 usb 程序会跑不起来。:cry:

第1次运行u盘过程:
(1)运行tftp程序
(2)dn
(3)传送usbformat.uue
(4)go
(5)对u盘进行操作

以后每次运行u盘过程:
(1)运行tftp程序
(2)dn
(3)传送testusb.uue
(4)go
(5)对u盘进行操作

个人感觉运行速度还行。不足之处在于时间仓促,代码比较乱,请各位谅解!
                                        陈宏伟

limingth 发表于 2005-8-30 23:24:50

希望有开发板的网友都能测试一下,给出在不同机器和操作系统上的测试结果!   :mrgreen:

今年最开心的事情就是这个了, 虽然 u 盘程序最终不是自己调试出来的, 但我也和 chw75 一样感到欢欣鼓舞. 我能够体会到 u 盘程序跑通时那一刹那的兴奋和满足, 就好像回到半年之前, 我第一次看到液晶能够正常显示字符, 听到蜂鸣器开始播放出东方红.

lumit 是一个开放的平台, 希望我们这些嵌入式开发的初学者都能到这个平台上来, "想做就做, 要做的漂亮!"   借用时下流行的语言,和我们这次的超级 lumiter chw75 pk 一下, 呵呵:lol:

CoryXie 发表于 2005-8-31 00:17:34

恭喜啊!上一周我简直没有时间关心这件事,忙着找房子,现在又要搬家了!不过想像中应该CHW75能很快解决!今天偶然在家开电脑,果然看到了这个好消息!我记得当时到版主那里拿板子的时候,版主对我说了一句话,说这个东西等到别人做出来了就没什么意思了(意思是让我们大家都自己参加到开发当中去,感受自己开发成功的喜悦),可是今天看到CHW75成功,我也很高兴哦!今后可能有段时间晚上不能上网了,新家还没装ADSL呢!只有在公司偶尔偷看一下啦! :oops: 向你们学习!
我还是有个请求,希望CHW75能给代码添加一些必要的文档,以及整个代码的工作过程,用到了那些关键知识等,如何?这样我们学习开发才不至于走弯路!

chw75 发表于 2005-8-31 09:05:33

谢谢大家的鼓励。我在自家的两台机器上测试,一台操作系统是windows2000,一台操作系统是windows XP。运行结果正常!!

limingth 发表于 2005-8-31 10:37:39

文档的工作确实非常重要,软件工程里面是不是说写代码的时间和写文档的时间应该差不多啊?
希望 chw75 能够花一点时间做一些整理,期待看到 chw75 的技术文档!

aguijie 发表于 2005-9-1 10:11:39

一个月做出FAT, 不简单!!

chw75 发表于 2005-9-1 10:45:19

我没有做fat,只是做了格式化工作。其他的有关的fat代码是从网上download的,只是准备以后可能用到,放在这个工程里面。请楼上的不要误解!!

chw75 发表于 2005-9-1 10:50:00

在这个工程中,我所做的工作主要包括
(1)nandflash的读写操作
(2)对nandflash进行fat16文件系统格式化
(3)通过对s3c44b0 usb点灯程序的移植实现lumit4510上的usb通信
(4)在别人有的SCSI的代码基础上改造,实现u盘的功能

wxMidnight 发表于 2005-9-2 10:04:51

看了看D12及USB相关的文档,感觉对于FAT16的格式化应该可以不用做的,可以由windows来处理。

刚才又看了看你的代码,对于通过USB来写NANDFlash还没,是这样么?

嗯,简单的方法就是在每次写的时候,都先擦一遍然后再写上。只是这样这个设备同一个page就不知道要被写多少次了。另外通过USB的文档,感觉NANDFlash上的MTD层还是很有必要的,把坏块管理及擦除均衡都做出来。

chw75 发表于 2005-9-2 10:44:18

wxMidnight,
对FAT16的格式化工作在第一次得做,如果不做的话,windows无法识别你的u盘的大小,更谈不上对你的u盘进行操作了。
即使到后面windows对u盘进行格式化,也是对前面做的格式化内容的扩充,其基本参数还是第一次格式化的参数。
当然这是我个人的见解,也不知道对不对,你可以通过bushound去获取包数据,可以比较格式化前后DBR的区别。

wxMidnight 发表于 2005-9-3 14:14:28

哦,还有这种事情,SCSI协议中没有获取设备信息的消息么?我有时间查查

(BTW:如果在linux下把U盘格成ext2/3,然后拿到windows下去,windows是否能自动重新格呢?)

limingth 发表于 2005-10-11 18:00:09

测试过啦! u盘读写的速度有些慢,把 Delay() 函数里面循环的时间改短一些就 ok 了!
j=65535 -》 j=65 ,呵呵 :lol:

johnnyding 发表于 2005-10-13 11:46:20

wxMidnight,
对FAT16的格式化工作在第一次得做,如果不做的话,windows无法识别你的u盘的大小,更谈不上对你的u盘进行操作了。
即使到后面windows对u盘进行格式化,也是对前面做的格式化内容的扩充,其基本参数还是第一次格式化的参数。
当然这是我个人的见解,也不知道对不对,你可以通过bushound去获取包数据,可以比较格式化前后DBR的区别。

这样说是不对的, 如果你的mass storgae使用 Scsi command(SPC-2, SPC-3, SBC, SBC-2)的话,首先 host 发送 inquiry(0x12),得到device的信息,例如 device type(0 means direct access block device),vendor str/product str/reverse ver str等,还有一个重要的标志位 RMB(removable bit),用于决定该storage的host是 removeable disk还是 fixed disk.对于 direct access block device(flash/hard disk都是这类的 使用SBC/SBC-2命令集) host 会发 read capacity,读取 device的total block(sector) number,和 block(sector) size,这时host就知道该 direct access block device的总大小了(total block* block size)
对于CD/RW这类的device(使用MMC-4命令集),host会发read format capacity来读medium的容量.
所以对于direct access block device, 如果RMB为0(inpuiry的bit7为0),那么你甚至可以在windows(2K/XP)下用磁盘管理器进行分区操作

我看了楼主的帖子,发现楼主很多地方仅仅是一知半解,楼主的热情不错,但需要严谨的学风和作风呀

johnnyding 发表于 2005-10-13 12:00:58

补充一句,RMB=0时, 既然可以分区,那么格式化自然更没有问题, 如果RMB=1, 那么firmware必须先在MBR区(device的 first sector,也就是 absolute zero sector)将分区表先造好,这样mount到windows时 windows会告诉你,你的分区内没有格式化,会提示你格式化的.也就是说 RMB=1, OS就不会试图修改MBR,但分区是有OS来format的, firmware自己format当然也可以!
RMB=1, OS就不会试图修改MBR,并不代表我们在OS端的 app就不能修改MBR.事实上mass storage device在OS 端具有两层设备,首先是USB 的 storage class device,架构在usb storage class device 上的是一个 scsi disk的虚拟设备,那么既然是 disk device自然有办法访问并修改 absolute zero sector了,例如在window 2k/xp上可以用SPT,ASPI等方法直接给scsi disk下 wirte10来更改 MBR的数据

暂时就说这么多,如果大家有兴趣.欢迎交流
页: [1]
查看完整版本: lumit4510下u盘源程序新鲜出炉