主题 : 用2440的USB从设备口通过SD卡模拟U盘设备写特慢的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 38426
精华: 0
发帖: 13
金钱: 75 两
威望: 15 点
综合积分: 26 分
注册时间: 2011-02-25
最后登录: 2011-08-16
楼主  发表于: 2011-07-24 15:09

 用2440的USB从设备口通过SD卡模拟U盘设备写特慢的问题

大家好!
我最近一直在做2440模拟U盘设备。
现在遇到了一个很麻烦的问题,就是写数据到SD卡特别的慢。
有时候是只写了个文件名,根本没有数据。
而根据一个朋友的笔记做了修改,也还是一样。请问大家有解决了的没有?
或者有人帮我按这种方式在自己的板子上试试,是不是也有同样的问题呢?
1.修改arch/arm/plat-s3c24xx/common-smdk.c

/*USB device上拉电阻处理 */

static void smdk2410_udc_pullup(enum s3c2410_udc_cmd_e cmd)

{

   u8 *s3c2410_pullup_info[] = {

        " ",

        "Pull-up enable",

        "Pull-up disable",

        "UDC reset, in case of"

   };

  printk("smdk2410_udc: %s\n",s3c2410_pullup_info[cmd]);   s3c2410_gpio_cfgpin(S3C2410_GPG(9), S3C2410_GPIO_OUTPUT);

switch (cmd)

{

case S3C2410_UDC_P_ENABLE :

s3c2410_gpio_setpin(S3C2410_GPG(9), 1); //set gpg9 output HIGH break; case S3C2410_UDC_P_DISABLE :

s3c2410_gpio_setpin(S3C2410_GPG(9), 0); //set gpg9 output LOW break; case S3C2410_UDC_P_RESET :

//FIXME!!!

break;

default:

break;

}

}

static struct s3c2410_udc_mach_info smdk2410_udc_cfg __initdata = {

.udc_command = smdk2410_udc_pullup,

};

static struct platform_device *smdk2410_devices[] __initdata = {

…,

&s3c_device_usbgadget, /*USB gadget device设备登记*/

};

在void __init smdk_machine_init(void)函数中添加

s3c24xx_udc_set_platdata(&smdk2410_udc_cfg); /* 初始化*/

2.修改drivers/usb/gadget/file_storage.c

在static int fsg_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)函数中

- fsg->ep0req->zero = rc < w_length;

+ fsg->ep0req->zero = rc < w_length \

&& (rc % gadget->ep0->maxpacket) == 0;

3.修改drivers/usb/gadget/s3c2410_udc.c

在static void s3c2410_udc_handle_ep(struct s3c2410_ep *ep)函数中

struct s3c2410_request *req;

int is_in = ep->bEndpointAddress & USB_DIR_IN;

u32 ep_csr1;

u32 idx;

+ handle_ep_again:

……

if ((ep_csr1 & S3C2410_UDC_OCSR1_PKTRDY) && req) {

s3c2410_udc_read_fifo(ep,req);

+ if (s3c2410_udc_fifo_count_out())

+   goto handle_ep_again;

}

4.修改内核配置

<*> USB Gadget Support --->

  USB Peripheral Controller (S3C2410 USB Device Controller) -->       S3C2410 USB Device Controller

[] S3C2410 udc debug messages

<M>USB Gadget Drivers

<M>File-backed Storage Gadget

5.编译及加载

#make zImage

#make modules

# insmod g_file_storage.ko file=/dev/mmcblk0p1 stall=0 removable=1
弄透彻
级别: 新手上路
UID: 38426
精华: 0
发帖: 13
金钱: 75 两
威望: 15 点
综合积分: 26 分
注册时间: 2011-02-25
最后登录: 2011-08-16
1楼  发表于: 2011-07-24 15:11
大家有研究MTD,文件系统的朋友,可以和我联系,一起讨论。
弄透彻
级别: 新手上路
UID: 38426
精华: 0
发帖: 13
金钱: 75 两
威望: 15 点
综合积分: 26 分
注册时间: 2011-02-25
最后登录: 2011-08-16
2楼  发表于: 2011-07-24 15:38
希望大家能一起讨论。再详细说明下具体的问题:
你好,我也遇到了同样的问题,就是写文件太慢,有时就是写不进去。我具体说下我的做法:
1)我是用SD卡作为gadget的存储。
2)通过这个命令insmod g_s3c2410_udc.ko
insmod g_file_storage.ko file=/dev/mmcblk0p1 stall=0 removable=1
3)插上USB线,pc可以发现这个SD卡U盘设备
4)读是很快的,但是写就是老报:
g_file_storage gadget: full speed config #1
5)又时候写个8K的文件,只是建了个文件名,文件的内容为空。
6)我把这个SD卡系统启动时就挂载在了/mnt/sd目录下。 而通过usb从设备写了个8k的文件后,
ls /mnt/sd看不见这个空的文件名
7)umount /mnt/sd
mount /dev/mmcblk0p1 /mnt/sd后能看到这个文件,但是大小为0.
弄透彻
级别: 新手上路
UID: 38426
精华: 0
发帖: 13
金钱: 75 两
威望: 15 点
综合积分: 26 分
注册时间: 2011-02-25
最后登录: 2011-08-16
3楼  发表于: 2011-07-24 19:06
版主,帮我看看我的问题啊?谢谢!
真怀疑这个问题是不是大家早就抛出来了,但都没实际解决呢?
弄透彻
级别: 新手上路
UID: 38426
精华: 0
发帖: 13
金钱: 75 两
威望: 15 点
综合积分: 26 分
注册时间: 2011-02-25
最后登录: 2011-08-16
4楼  发表于: 2011-07-25 10:00
版主,帮我看看这个情况啊?记得你在一篇帖子上说已经试过了,写文件没问题啊?
那我和你的有那个区别呢?
弄透彻