求助2440 USB HOST功能
我用2440裸奔,想实现USB HOST读写U盘,好像官方资料也没有给出裸奔下的USB HOST功能库文件呀,大家有没有这样用过? 也在研究中。。。。。。 从网上下载到有人调试OK的USB HOST程序,好像可以读U盘,但是我用的是ADS环境,移植进去还是死活都不行,我把下载的这个资料传上来,可能会对有用到的人有帮助,也请有2440的板子的朋友验证一下看这个程序是不是能够调试成功点击此处下载 ourdev_491953.rar(文件大小:653K) (原文件名:2440 usb host.rar) 在顶一下,看看能不能等到希望 下周一测试一下,板子现在不在身边 我也在搞这个东西,一个用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上啊,如位对齐的问题。 fsmcu,我也是佛山人啊。。同乡,,你在哪啊? 这里也有一个2440 的usb host 不过我用mini2440的板子运行不了,现在还在改。。。
http://www.pudn.com/downloads179/sourcecode/embed/detail835182.html 我在佛山南海桂城,你在哪里?
我也发现你说的这个数据对齐问题了,所以后来干脆也移植到MDK下面编译试一下,结果现象跟你的一样,能够识别USB设备插入,但是下命令去枚举USB设备时,无法读回设备传回来的数据,郁闷几天了,不知道你提供的这个ADS下的列子能不能成功,再尝试一下看看 panruising 能把你的修改好的程序发上来吗?最近也在看2410 的USB HOST 还没有什么进展? mark先! 点击此处下载 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.) 上网找MBR的时候,发现,MBR是可以改的,改了以后可以U盘启动,还有什么系统启动的。。。。现在这个USB-host越搞越烦。。。我就只是想读U盘而已嘛。。。。。。。 怎么我做MMU映射后,开启cache功能后,就读不到U盘了,panruising有没有测试过这样的情况 没试过,因为我不会MMU,是不是有些中断,或标志为之类的东西,被你的MMU程序给冲突掉了啊。 我觉得现在的重点,应该是把这个usb-host可以读到全部U盘先吧。MMU的事情应该放在一边。 终于可以读到,我公司全部人的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) 下一步,看BIN文件结构。。再把usb_host套到bootloader,这样就可以U盘升级。。。 再顶一下,看看有没有人研究出开了mmu的情况下也可以读U盘啊? 发现有个问题,我无法读到大于4096字节的内容,表现是,放地址的表(通用的名字不会)有问题。。 把表格做成static或者extern的试试呢? 我用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语句, mark fsmcu
开了mmu的情况下读U盘问题解决了没有啊?我也郁闷中啊... 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; 我解释为什么开MMU不能读U盘。我没试过这个程序,而是直接移植uboot的程序。我的开发环境是ubuntu,因此改动不大。但是我试过,如果开了MMU的话,程序是在SDRAM里面走的。在OHCI协议里似乎规定了像HCCA这些数据结构要定义到非缓存空间。因此,不开MMU程序可以转。而开了MMU,程序就会死掉。把这些数据结构定义到非缓存区就可以了。或者把SDRAM分一部分区域,不使用cache。最好是像lpc2478这样,带有片内USB RAM。不知道我理解的对不对,大家也可以试验一下。 我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行,郁闷的要死 mark 回复【27楼】ep1c3
-----------------------------------------------------------------------
mark 我要慢慢看,收藏一下 收藏。。。 mark! 在学习中 嘿嘿 向大家学习 mark
mmu让很多事情不同了 正用得上,Mark之,方便以后查找 不懂,mark! mark 好东西一定要顶要标记{:smile:} fsmcu 发表于 2010-1-29 16:52 static/image/common/back.gif
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行 ...
Mark. 哪位大侠可以说下分散加载的具体操作嘛? 兄弟能请教一下分散加载的问题吗,好几天了,都没睡的好觉啊 fsmcu 发表于 2010-1-29 16:52 static/image/common/back.gif
我是这样搞定的,利用分散加载,将USB HOST程序搬到非缓存空间运行,已经OK了,开始也是想了好多办法都不行 ...
能否给点,迷惘的小兄弟们一点意见啊 fsmcu 发表于 2009-10-15 19:16 static/image/common/back.gif
从网上下载到有人调试OK的USB HOST程序,好像可以读U盘,但是我用的是ADS环境,移植进去还是死活都不行,我 ...
能否加我的QQ: 178047004交流了一下,2440开MMU之后 USBHOST 读写不了的问题,比较急,谢谢!!!
页:
[1]