搜索
bottom↓
回复: 42

求助2440 USB HOST功能

[复制链接]

出0入0汤圆

发表于 2009-9-22 09:57:46 | 显示全部楼层 |阅读模式
我用2440裸奔,想实现USB HOST读写U盘,好像官方资料也没有给出裸奔下的USB HOST功能库文件呀,大家有没有这样用过?

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2009-9-23 22:45:16 | 显示全部楼层
也在研究中。。。。。。

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-10-17 11:12:04 | 显示全部楼层
在顶一下,看看能不能等到希望

出0入0汤圆

发表于 2009-10-17 12:47:39 | 显示全部楼层
下周一测试一下,板子现在不在身边

出0入0汤圆

发表于 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[2];
}
/*__attribute((aligned(32)))*/;
typedef struct td td_t;

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

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

出0入0汤圆

发表于 2009-10-18 12:29:25 | 显示全部楼层
fsmcu,我也是佛山人啊。。同乡,,你在哪啊?

出0入0汤圆

发表于 2009-10-18 12:30:46 | 显示全部楼层
这里也有一个2440 的usb host 不过我用mini2440的板子运行不了,现在还在改。。。
http://www.pudn.com/downloads179/sourcecode/embed/detail835182.html

出0入0汤圆

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

出0入0汤圆

发表于 2009-10-18 23:00:33 | 显示全部楼层
panruising 能把你的修改好的程序发上来吗?最近也在看2410 的USB HOST 还没有什么进展?

出0入0汤圆

发表于 2009-10-19 22:26:36 | 显示全部楼层
mark先!

出0入0汤圆

发表于 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[3];
};
/*__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.)

出0入0汤圆

发表于 2009-10-20 13:42:26 | 显示全部楼层
上网找MBR的时候,发现,MBR是可以改的,改了以后可以U盘启动,还有什么系统启动的。。。。现在这个USB-host越搞越烦。。。我就只是想读U盘而已嘛。。。。。。。

出0入0汤圆

 楼主| 发表于 2009-10-21 12:42:14 | 显示全部楼层
怎么我做MMU映射后,开启cache功能后,就读不到U盘了,panruising有没有测试过这样的情况

出0入0汤圆

发表于 2009-10-21 13:03:23 | 显示全部楼层
没试过,因为我不会MMU,是不是有些中断,或标志为之类的东西,被你的MMU程序给冲突掉了啊。

出0入0汤圆

发表于 2009-10-21 13:04:57 | 显示全部楼层
我觉得现在的重点,应该是把这个usb-host可以读到全部U盘先吧。MMU的事情应该放在一边。

出0入0汤圆

发表于 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)

出0入0汤圆

发表于 2009-10-21 14:23:53 | 显示全部楼层
下一步,看BIN文件结构。。再把usb_host套到bootloader,这样就可以U盘升级。。。

出0入0汤圆

 楼主| 发表于 2009-10-23 15:53:53 | 显示全部楼层
再顶一下,看看有没有人研究出开了mmu的情况下也可以读U盘啊?

出0入0汤圆

发表于 2009-10-30 14:52:59 | 显示全部楼层
发现有个问题,我无法读到大于4096字节的内容,表现是,放地址的表(通用的名字不会)有问题。。

出20入0汤圆

发表于 2009-10-30 20:33:43 | 显示全部楼层
把表格做成static或者extern的试试呢?

出0入0汤圆

发表于 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语句,

出0入0汤圆

发表于 2010-1-5 15:25:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-12 18:34:39 | 显示全部楼层
fsmcu
开了mmu的情况下读U盘问题解决了没有啊?我也郁闷中啊...

出0入0汤圆

发表于 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;

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2010-1-29 16:52:17 | 显示全部楼层
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行,郁闷的要死

出0入0汤圆

发表于 2010-5-4 10:34:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-11 23:39:57 | 显示全部楼层
回复【27楼】ep1c3
-----------------------------------------------------------------------

mark

出0入0汤圆

发表于 2010-5-11 23:52:07 | 显示全部楼层
我要慢慢看,收藏一下

出0入0汤圆

发表于 2010-9-17 15:28:57 | 显示全部楼层
收藏。。。

出0入0汤圆

发表于 2010-9-18 09:38:05 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-1-4 10:47:12 | 显示全部楼层
在学习中 嘿嘿 向大家学习

出0入0汤圆

发表于 2011-2-6 23:56:56 | 显示全部楼层
mark
mmu让很多事情不同了

出0入0汤圆

发表于 2011-10-13 15:45:52 | 显示全部楼层
正用得上,Mark之,方便以后查找

出0入0汤圆

发表于 2011-12-6 14:48:35 | 显示全部楼层
不懂,mark!

出0入0汤圆

发表于 2011-12-14 15:49:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-3-24 02:56:30 | 显示全部楼层
好东西一定要顶要标记

出0入0汤圆

发表于 2013-3-24 11:04:53 | 显示全部楼层
fsmcu 发表于 2010-1-29 16:52
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行 ...

Mark.     

出0入0汤圆

发表于 2013-5-16 15:25:27 | 显示全部楼层
哪位大侠可以说下分散加载的具体操作嘛?

出0入0汤圆

发表于 2013-5-24 17:22:30 | 显示全部楼层
兄弟能请教一下分散加载的问题吗,好几天了,都没睡的好觉啊

出0入0汤圆

发表于 2013-5-24 17:23:26 | 显示全部楼层
fsmcu 发表于 2010-1-29 16:52
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行 ...

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

出0入0汤圆

发表于 2013-6-1 13:24:04 | 显示全部楼层
fsmcu 发表于 2009-10-15 19:16
从网上下载到有人调试OK的USB HOST程序,好像可以读U盘,但是我用的是ADS环境,移植进去还是死活都不行,我 ...

能否加我的QQ: 178047004  交流了一下,2440开MMU之后 USBHOST 读写不了的问题,比较急,谢谢!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表