fsmcu 发表于 2009-9-22 09:57:46

求助2440 USB HOST功能

我用2440裸奔,想实现USB HOST读写U盘,好像官方资料也没有给出裸奔下的USB HOST功能库文件呀,大家有没有这样用过?

jackarm 发表于 2009-9-23 22:45:16

也在研究中。。。。。。

fsmcu 发表于 2009-10-15 19:16:20

从网上下载到有人调试OK的USB HOST程序,好像可以读U盘,但是我用的是ADS环境,移植进去还是死活都不行,我把下载的这个资料传上来,可能会对有用到的人有帮助,也请有2440的板子的朋友验证一下看这个程序是不是能够调试成功
点击此处下载 ourdev_491953.rar(文件大小:653K) (原文件名:2440 usb host.rar)

fsmcu 发表于 2009-10-17 11:12:04

在顶一下,看看能不能等到希望

52robot 发表于 2009-10-17 12:47:39

下周一测试一下,板子现在不在身边

panruising 发表于 2009-10-18 12:26:37

我也在搞这个东西,一个用gcc编译,名字叫 青虹usb_host(mmu)070302-1 的2410程序。我改为2440,用ADS编译。改完以后发现,它只能读到自己的host root,和识别有usb设备插了进去,但是不能读取到其他信息。我觉得问题也许出在
_align(8) struct td
{
    U32 hwINFO;
    U32 hwCBP;                /* Current Buffer Pointer */
    U32 hwNextTD;        /* Next TD Pointer */
    U32 hwBE;                /* Memory Buffer End Pointer */
    U8 unused;
    U8 index;
    struct ed *ed;
    struct td *next_dl_td;
    struct usb_device *usb_dev;
    int transfer_len;
    U32 data;
    U32 unused2;
}
/*__attribute((aligned(32)))*/;
typedef struct td td_t;

原来是在GCC编译的时候是__attribute((aligned(32))),ADS没有32位对齐这么多,所以我改为_align(8),8位对齐。其它结构也有类似情况。。

我想问的是GNU的项目怎样转到ADS上啊,如位对齐的问题。

panruising 发表于 2009-10-18 12:29:25

fsmcu,我也是佛山人啊。。同乡,,你在哪啊?

panruising 发表于 2009-10-18 12:30:46

这里也有一个2440 的usb host 不过我用mini2440的板子运行不了,现在还在改。。。
http://www.pudn.com/downloads179/sourcecode/embed/detail835182.html

fsmcu 发表于 2009-10-18 14:55:45

我在佛山南海桂城,你在哪里?
我也发现你说的这个数据对齐问题了,所以后来干脆也移植到MDK下面编译试一下,结果现象跟你的一样,能够识别USB设备插入,但是下命令去枚举USB设备时,无法读回设备传回来的数据,郁闷几天了,不知道你提供的这个ADS下的列子能不能成功,再尝试一下看看

chaplin1999 发表于 2009-10-18 23:00:33

panruising 能把你的修改好的程序发上来吗?最近也在看2410 的USB HOST 还没有什么进展?

superyongzhe 发表于 2009-10-19 22:26:36

mark先!

panruising 发表于 2009-10-20 13:39:18

点击此处下载 ourdev_493741.rar(文件大小:1.77M) (原文件名:2440_usb_host.pass.rar)

注意:1.是青虹usb_host(mmu)070302-1,修改以后是usb_host;在usb_host里面有两个文件夹,一个是2410_usb_host,这是用VS2005建的工程文件,(本人喜欢用VS的编写环境);另一个是2440_usb_host,ADS的工程。两个工程都是指向同一个东西的。我只是用VS写,ADS编译而已。

2.改过的地方就只是把它原来的init.s 改为了2440init.s,它里面没用到MMU所以我没加上去。
3.还把__attribute((aligned(16)));这样的GNU改为__aligned(16).我现在才知道,原来ADS不能在定义结构的时候就规定对齐的方法,写了也是无效的。如:
__aligned(16)
struct ed
{
    U32 hwINFO;
    U32 hwTailP;
    U32 hwHeadP;
    U32 hwNextED;
    struct ed *ed_prev;
    U8 int_period;
    U8 int_branch;
    U8 int_load;
    U8 int_interval;
    U8 state;
    U8 type;
    U16 last_iso;
    struct ed *ed_rm_list;
    struct usb_device *usb_dev;
    U32 unused;
};
/*__attribute((aligned(16)));*/
typedef struct ed ed_t;

这是没有的。只能在创建这个结构的对象(对象这个说法不知道标不标准),才能规定对齐的方法。如:
__aligned(16) ed_t t;

4.原来,在ADS里,__aligned(256)也可以的。

5.这个usb-host,改了以后,是可以读到某些U盘的文件的。我试了5个U盘,5个都可以读到U盘的厂家,名字的一些信息。但是只有两个可以读到里面的文件。这两个是SanDisk 的U3 4G,另一个写着SONY的银色的可以转的U盘。不行3个有:MEIZU miniplayer 2G,PNY 2G(一个很薄,很小的U盘),金士顿 2G(很老的那种)。

金士顿 2G不行的表现是,无论我把它格式化为FAT16,还是FAT32,读出来的MBR,第0x36-0x3A字节,都是显示FAT16.但是第1EE-1FD是的显示的分区的系统类型,FAT32时为0x0B,FAT16时为0x06.(如果不明我说什么,请上网找MBR.)

panruising 发表于 2009-10-20 13:42:26

上网找MBR的时候,发现,MBR是可以改的,改了以后可以U盘启动,还有什么系统启动的。。。。现在这个USB-host越搞越烦。。。我就只是想读U盘而已嘛。。。。。。。

fsmcu 发表于 2009-10-21 12:42:14

怎么我做MMU映射后,开启cache功能后,就读不到U盘了,panruising有没有测试过这样的情况

panruising 发表于 2009-10-21 13:03:23

没试过,因为我不会MMU,是不是有些中断,或标志为之类的东西,被你的MMU程序给冲突掉了啊。

panruising 发表于 2009-10-21 13:04:57

我觉得现在的重点,应该是把这个usb-host可以读到全部U盘先吧。MMU的事情应该放在一边。

panruising 发表于 2009-10-21 14:21:32

终于可以读到,我公司全部人的U盘了,修改的地方有:
part_dos.c的get_partition_info_extended()
fat.c的fat_egister_evice()
有by simon 2009.10.21 的标注

点击此处下载 ourdev_494197.rar(文件大小:1.22M) (原文件名:2440_usb_host.pass(可以读到大部分U盘了).rar)

panruising 发表于 2009-10-21 14:23:53

下一步,看BIN文件结构。。再把usb_host套到bootloader,这样就可以U盘升级。。。

fsmcu 发表于 2009-10-23 15:53:53

再顶一下,看看有没有人研究出开了mmu的情况下也可以读U盘啊?

panruising 发表于 2009-10-30 14:52:59

发现有个问题,我无法读到大于4096字节的内容,表现是,放地址的表(通用的名字不会)有问题。。

zhiyuan1106 发表于 2009-10-30 20:33:43

把表格做成static或者extern的试试呢?

bo115891 发表于 2009-12-4 11:35:49

我用2440板子测试了一下,扫描不到U盘,
跟我之前用UBOOT的效果是一样的,看了一下代码和UBOOT完全一样,
不知 panruising 老兄是怎样操作的,恳请指点指点。
QQ 416964119
if (dev->descriptor.bDeviceClass != 0 ||
                        iface->bInterfaceClass != USB_CLASS_MASS_STORAGE ||
                        iface->bInterfaceSubClass < US_SC_MIN ||
                        iface->bInterfaceSubClass > US_SC_MAX) {
                /* if it's not a mass storage, we go no further */
                return 0;
        }

        memset(ss, 0, sizeof(struct us_data));

        /* At this point, we know we've got a live one */
        USB_STOR_PRINTF("\n\nUSB Mass Storage device detected\n");

程序跑不过IF语句,

zzwuyu 发表于 2010-1-5 15:25:39

mark

zjm3712 发表于 2010-1-12 18:34:39

fsmcu
开了mmu的情况下读U盘问题解决了没有啊?我也郁闷中啊...

maxbiger 发表于 2010-1-14 00:29:50

to :panruising

我现在才知道,原来ADS不能在定义结构的时候就规定对齐的方法,写了也是无效的。如:
__aligned(16)
struct ed
{
   /*此处省略*/
};
/*__attribute((aligned(16)));*/
typedef struct ed ed_t;

这是没有的。只能在创建这个结构的对象(对象这个说法不知道标不标准),才能规定对齐的方法。如:
__aligned(16) ed_t t;
-----------------------------------------------------------
那么请问panruising 大侠:如果在定义的时候不能指定对齐方式

sizeof(ed_t) 的结果是什么??
还有我这样定义两个变量行不行:

__aligned(8) ed_t aa;
__aligned(16) ed_t bb;

zzwuyu 发表于 2010-1-25 21:51:54

我解释为什么开MMU不能读U盘。我没试过这个程序,而是直接移植uboot的程序。我的开发环境是ubuntu,因此改动不大。但是我试过,如果开了MMU的话,程序是在SDRAM里面走的。在OHCI协议里似乎规定了像HCCA这些数据结构要定义到非缓存空间。因此,不开MMU程序可以转。而开了MMU,程序就会死掉。把这些数据结构定义到非缓存区就可以了。或者把SDRAM分一部分区域,不使用cache。最好是像lpc2478这样,带有片内USB RAM。不知道我理解的对不对,大家也可以试验一下。

fsmcu 发表于 2010-1-29 16:52:17

我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行,郁闷的要死

ep1c3 发表于 2010-5-4 10:34:37

mark

li21104 发表于 2010-5-11 23:39:57

回复【27楼】ep1c3
-----------------------------------------------------------------------

mark

KANGYD 发表于 2010-5-11 23:52:07

我要慢慢看,收藏一下

yuhui 发表于 2010-9-17 15:28:57

收藏。。。

tds510 发表于 2010-9-18 09:38:05

mark!

wdooy 发表于 2011-1-4 10:47:12

在学习中 嘿嘿 向大家学习

flagyan 发表于 2011-2-6 23:56:56

mark
mmu让很多事情不同了

jusan520 发表于 2011-10-13 15:45:52

正用得上,Mark之,方便以后查找

b159 发表于 2011-12-6 14:48:35

不懂,mark!

dull_man 发表于 2011-12-14 15:49:33

mark

WOTASOM 发表于 2013-3-24 02:56:30

好东西一定要顶要标记{:smile:}

jordonwu 发表于 2013-3-24 11:04:53

fsmcu 发表于 2010-1-29 16:52 static/image/common/back.gif
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行 ...

Mark.   

cjx19891212 发表于 2013-5-16 15:25:27

哪位大侠可以说下分散加载的具体操作嘛?

changjin 发表于 2013-5-24 17:22:30

兄弟能请教一下分散加载的问题吗,好几天了,都没睡的好觉啊

changjin 发表于 2013-5-24 17:23:26

fsmcu 发表于 2010-1-29 16:52 static/image/common/back.gif
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行 ...

能否给点,迷惘的小兄弟们一点意见啊

changjin 发表于 2013-6-1 13:24:04

fsmcu 发表于 2009-10-15 19:16 static/image/common/back.gif
从网上下载到有人调试OK的USB HOST程序,好像可以读U盘,但是我用的是ADS环境,移植进去还是死活都不行,我 ...

能否加我的QQ: 178047004交流了一下,2440开MMU之后 USBHOST 读写不了的问题,比较急,谢谢!!!
页: [1]
查看完整版本: 求助2440 USB HOST功能