s3c2440的USB热插拔驱动问题

发布者:温柔心情最新更新时间:2024-08-05 来源: cnblogs关键字:s3c2440  驱动问题 手机看文章 扫描二维码
随时随地手机看文章

s3c2440的USB驱动在较新的LINUX内核中有比较好的支持,代码修改较少,但是也存在一些问题,修改记录如下:


一、编译选项中注意选上以下几项,其它的可以根据实际情况选取:


        [*]USB support- à


                      <*> support for Host-side USB


                      [*] USB device filesystem


                      [*] USB device class-devices(DEPRECATED)


                      <*>OHCI HCD support


                      <*>USB Mass storage support


二、修改drivers/usb/host/ohci-s3c2410.c(用于解决插入USB设备时的error -62)


#include

#include

unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03); //add static void s3c2410_start_hc函數中加入

while (upllvalue !=__raw_readl(S3C2410_UPLLCON))

{

__raw_writel(upllvalue, S3C2410_UPLLCON);

mdelay(1);



写S3C2410_UPLLCON寄存器将USB时钟UPLL设置为48MHz


如果还是有问题,参照 tpu老大的文章:


今天tpu拿出一块2440板子调试,发现尽管采取了种种措施,USBHOST总是会偶尔不工作.把UCLK通过CLKOUT0引出,用示波器查看,发现不工作的时候,UCLK根本就没有稳定下来.于是仔细思考,影响USB的有这几个地方:


1.外部晶振16.9344Mhz

2.LOCKTIME寄存器的UPLL LOCKTIME

3.UPLLCON

4.CLKSLOW寄存器的UPLL开关


接下来逐个排除:

1.晶振是MPLL和UPLL公用,从来没听说过MPLL不稳定的.

2.怀疑LOCKTIME太大(0xffff),但改小了没有效果.

3.在UCLK不稳定的时候,重复设置UPLLCON是没有用的.

4.在UCLK不稳定的时候,开关UPLL,有效果!在UCLK稳定的情况下,开关UPLL,同样会出现不稳定的情况.


那么就是说,UPLL在启动的时候,可能会同步失败.但是为什么呢?UPLL与MPLL应该是同样的结构,MPLL就从来不出问题.UPLL只是频率比MPLL低一些.那就从频率上再找找看.


现对UPLLCON设置了一个比较低的频率(比如7Mhz),此时无论如何开关UPLL,UCLK始终稳定不起来.好了,曙光已经出现了!然后设置了一个超高的频率(112Mhz),哈哈,不关如何开关UPLL,还是上电启动,UCLK都非常稳定.


问题于是可以这样描述了:UPLL在低频率下不能可靠的启动.

问题的解决办法:首先给UPLL一个较高的频率,待其稳定工作后,再设置所需的频率.

注意:如果要开关CLKSLOW里面的UPLL开关,也要遵循这个设置步骤.


这样改过之后,tpu开关电源一百多次,UCLK始终非常稳定.这只是2440的情况,但对2410应该同样适用.各位可以实际测试验证一下.


将 s3c2410_start_hc函數做如下改动:


static void s3c2410_start_hc(struct platform_device *dev, struct usb_hcd *hcd)

{

    struct s3c2410_hcd_info *info = dev->dev.platform_data;

    //--------------------------------

    unsigned long upllvalue = (0x69<<12)|(0x01<<4)|(0x02); //先设置较高频率

    while (upllvalue != __raw_readl(S3C2410_UPLLCON))

    {

        __raw_writel(upllvalue, S3C2410_UPLLCON);

        mdelay(1);

    }


    clk_enable(usb_clk);

    mdelay(11);

    clk_enable(clk);

    mdelay(2);   

    clk_disable(usb_clk);

    mdelay(11);


    upllvalue = (0x78<<12)|(0x02<<4)|(0x03); //改为48MHz

    while (upllvalue != __raw_readl(S3C2410_UPLLCON))

    {

        __raw_writel(upllvalue, S3C2410_UPLLCON);

        mdelay(1);

    }

    //--------------------------------

    dev_dbg(&dev->dev, 's3c2410_start_hc:/n');


    clk_enable(usb_clk);

    mdelay(2);            /* let the bus clock stabilise */


    clk_enable(clk);


    if (info != NULL) {

        info->hcd    = hcd;

        info->report_oc = s3c2410_hcd_oc;


        if (info->enable_oc != NULL) {

            (info->enable_oc)(info, 1);

        }

    }

}


问题解决,在这里向 tpu老大表示崇高的敬意,对知识的探求永无止境!

 

三、mount优盘时出错,说找不到设备,但是用ls /dev命令查看有sda1


一般是由于优盘的文件系统不支持,应在内核编译时加入对VFAT,NTFS的支持。

关键字:s3c2440  驱动问题 引用地址:s3c2440的USB热插拔驱动问题

上一篇:DNW下USB驱动故障的解决
下一篇:S3C2440实现dm9000网卡驱动程序移植

推荐阅读最新更新时间:2024-11-09 11:51

s3c2440裸机-spi编程-1-spi协议
1.spi概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 2、SPI优点 支持全双工通信(SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出) 数据传输速率快(I2c一般只能到100-400Khz, SPI高达上百Mhz) 3、缺点 没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。 4、特点 1):高速、同步、全双工、非差分、总线式 2):主从机通信模式 2.硬体框架 SPI协议,硬件框架如下: SCK:提供时钟 DO:
[单片机]
S3C2440时钟设置
S3C2440时钟设置 #define MDIV_405 0x7f 12 #define PSDIV_405 0x21 #define LOCKTIME_OFFSET 0x00 #define MPLLCON_OFFSET 0x04 #define CLKCON_OFFSET 0x0c #define CLKDIVN_OFFSET 0x14 #define CAMDIVN_OFFSET 0x18 /******************************************************************************************* * Referenc
[单片机]
基于微处理器S3C2440和WinCE嵌入式实时操作系统的视频数据采集
随着嵌入式技术的不断发展,各种嵌入式微处理器和控制器不断出现,并广泛应用于工控、通信、 PDA、安保等领域。基于ARM920t内核的嵌入式微处理器S3C2440,以其良好的数据处理能力、低功耗、小体积、支持多种嵌入式操作系统(如 WinCE、Linux)、集成多种外设(如I2C控制器、LCD控制器等)等优点,广泛应用于手持设备等。WinCE操作系统具有内核可剪裁、实时性好、支持多种通信、模块化设计、具有丰富的API等特点,广泛用于嵌入式实时操作系统。这里提出的嵌入式图像数据采集系统是某“纳米技术与微系统”实验室开发的“嵌入式传感测控系统”中实现图像采集功能的子系统,该系统是以S3C2440为硬件核心,以WinCE为软件平台,能实时
[单片机]
基于微处理器<font color='red'>S3C2440</font>和WinCE嵌入式实时操作系统的视频数据采集
s3c2440裸机-异常中断(四. irq之外部中断)
中断前: 中断产生后: 问题案例: 我们想实现一个按键点灯程序,我们知道有以下两种方案: 1.轮询方案:轮询检测按键的电平状态,当检测到被按下后,对应的gpio会拉低,点亮对应的led;(略) 2.中断方案:将按键配置成外部中断源,当有按键按下,触发中断,在中断服务程序(isr)中去完成点灯。 下面开始写代码: 一.中断初始化 1)中断源设置 我们用按键作为外部中断源,我们把按键对应的gpio配置成中断引脚,当按键按下,相应的gpio产生了电平跳变,就会触发外部中断。 我们想达到按下按键灯亮,松开按键灯灭这种效果(配成双边沿触发,按下的时候产生下降沿中断,进行点亮,松开产生上升沿中断,进行熄灭)。当然也可做成按一下
[单片机]
<font color='red'>s3c2440</font>裸机-异常中断(四. irq之外部中断)
基于S3C2440的LWIP-1.3.0和DM9000在UCOS-II-2.8.6上的移植
经常在Linux上跑,一时间跳到UCOS,感觉有点不习惯。首先是编译器,GCC是个不错的选择,但GDB调试太麻烦。ADS和仿真器结合是个十分不错的调试环境,于是,将代码就搬到ADS上,这下完全脱离Linux,整个开发过程都在Windows进行。其实是UCOS太简洁了,时钟、接口很多都需要自己开发…小弟对UCOS不是很熟,下面是移植过程的一些小结,希望对有需要的朋友带来些帮助。关于UCOS在S3C2440上的移植,可以参考《uCOS-II在S3C2440上的移植》一文。 1. 寻找最新代码,总结前辈经验,就是下载LWIP的源代码和Michael Anburaj基于S3C2410的移植版。 http://download.savann
[单片机]
基于<font color='red'>S3C2440</font>的LWIP-1.3.0和DM9000在UCOS-II-2.8.6上的移植
s3c2440裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)
1.SDRAM原理 black (1)SDRAM内部存储结构: (2)再看看与2440连接的SDRAM原理图: sdram引脚说明: A0-A12:地址总线 D0-D15:数据总线(位宽16,2片级联成位宽32) BA0-BA1:bank选择 nSCS:片选 nSRAS:行地址选择 nSCAS:列地址选择 nWE:写使能 SCLK:时钟 SCKE:时钟使能 (3)SDRAM的地址范围: 之前我们讲“二、不同位宽外设与CPU地址总线的连接”这一节的时候,我们留下了一个问题,SDRAM的地址范围是多少? 我们知道地址范围肯定是base_addr + size。我们根据片选接了nGCS6,base_addr=0x3000,0
[单片机]
<font color='red'>s3c2440</font>裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)
s3c2440裸机-内存控制器2-不同位宽外设与CPU地址总线的连接
不同位宽设备的连接 我们先看一下2440芯片手册上外设rom是如何与CPU地址总线连接的。 8bit rom与CPU地址线的连接 8bit*2 rom与CPU地址线的连接 8bit*4 rom与CPU地址线的连接 16bit rom与CPU地址线的连接 16bit*2 rom与CPU地址线的连接 从上面的图中,我们知道可以对2片位宽为8bit的外设扩展级联成1个16bit的外设,同理可用4片位宽为8bit的外设进行级联成1个32bit的外设... 从上面的图中,我们还看见一个规律: 当外设总线位宽为8bit时, 外设A0接CPU的地址总线ADDR , A - ADDR ...A - AD
[单片机]
基于S3C2440的Ethercat实现
  1 引言   工业以太网由于低成本、易于组网和具有相当高的数据传输速率、资源共享能力强以及易于Internet连接等特点,以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。以太网与IEEE802·3系列标准相类似。以太网最早由Xerox(施乐)公司创建,在1980年,DEC、lntel和Xerox三家公司联合开发成为一个标准。以太网是应用最为广泛的局域网,包括标准的以太网(10Mbit/s)、快速以太网(100Mb
[单片机]
基于<font color='red'>S3C2440</font>的Ethercat实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved