在学习2440的USB配置时钟中,发现它的时钟需要设置成48MHz固定的,这个我就来兴趣了,为什么这里面USB的时钟一定要是48M呢?在网上找了众多文章,都是讲解如何配置2440的MPLL和UPLL,根据外部晶振来设置不同的参数,先配置UPLLCON,再配置MPLLCON,

 

但我需要的不是这个,是它背后的原因。于是,开始了找寻答案的旅程。

 

先还是从datasheet中找:

对UPLLCON的配置,都是采用固定值:

从下面来时钟配置来看:

UPLL实际产生固定96MHZ的频率,二分频给USB主机使用,一分频给Camera采样使用

从寄存器默认值设置来看:  

从datasheet上面种种介绍来看,S3C2440内部的USB控制器模块时钟使用的频率固定为 48MHz。

从6410上面的USB Host时钟设置上来看,也是如此:

这里,问题就来了,为什么要设置成固定的48MHz,这个数据对于USB传输来说,有什么意义?

 

通过网上了解USB速度相关的知识:

USB 1.1

            低速(low-speed) 传输速率 1.5Mbps

            全速(full-speed) 传输速率 12Mbps

            标准脉冲时钟为12MHz,总线脉冲时钟为1KHz,也就是说,每个1ms,USB主机控制器在USB线缆上产生一个时钟脉冲序列,这个为帧开始数据包(SOF)

USB 2.0 在USB 1.1 的基础上,向下兼容,并增加高速模式

USB 2.0

            低速(low-speed) 传输速率 1.5Mbps

            全速(full-speed) 传输速率 12Mbps

            高速 (high-speed)传输速率 480Mbps

 

USB 3.0  在USB2.0的基础上,向下兼容,增加了超高速模式(super speed)

USB 3.0

            低速(low-speed) 传输速率 1.5Mbps

            全速(full-speed) 传输速率 12Mbps

            高速 (high-speed)传输速率 480Mbps

            超高速(Super Speed)传输速度4.8Gbps

 

上述速度均为理论传输最高数值,单位为Mbps,如需化为MB/S,需要除以8. 在实际使用中,需要兼容其他系统的速度,往往会打个8折。

 

上网翻来USB2.0规范,在 5.12.2 节 USB Clock Model 和7.1.17 Cable Attenuation l一节中,发现一点有用的东西,先摘录如下:

USB的时钟模型:

UBS的电缆衰减:

结合USB传输规定,线缆的最大长度不超过5米,USB级联不能超过5级。同时,在一个USB系统中,USB device 和USB Hub总数不能超过127个,所有的USB device都连接在USB Hub。一个USB HOST总是与一个USB Root Hub相连,USB Hub为每个端口提供 100mA电流供设备使用。

另外,这里也寻找了一些答案:

http://www.edaboard.com/thread91063.html

USB控制器接收部分的数字部分工作在60MHz,8位模式。当接收到高达480Mbps的数据时,为了从数据线中恢复时钟信号和数据信号,USB使用Delay-locked loop(DLL)来产生采样时钟,将采样的数据保存到弹性缓冲器中,弹性缓冲器再将数据以60MHz的时钟导出到数字部分。

 

最后在这里找到一些有用的回答:http://electronicdesign.com/boards/480-mbitss-signal-integrity-becomes-issue-usb-20-designs

 

最后总结一下:

USB总线时钟设置为48MHz,一部分是传输电缆本身的衰减因素,另一部分,为了兼容USB1.1的低速传输,还有的就是规范上的一些限制吧。

目前,就网上的资料就找到这么多,在找寻答案的同时,发现如下一些好文章,现在给出来:

 

这篇文章里面,介绍了USB Connector相关知识:

http://www.beyondlogic.org/usbnutshell/usb2.shtml

 

这篇文章总结了常用总线频率,很不错。

常用总线频率介绍

Technorati 标签: USB 总线时钟

USB时钟为什么是48MHz的更多相关文章

  1. Cotex-M3内核STM32F10XX系列时钟及其配置方法

    一.背景 最近做个项目,需要使用STM32,还是以前一样的观点,时钟就是MCU心脏,供血即时钟频率输出,想要弄明白一个MCU,时钟是一个非常好的切入点.言归正传,网上已经有太多大神详述过STM32的详 ...

  2. stm32f407以太网及USB OTG快速开发

    stm32f407以太网及USB OTG快速开发 引言 想要快速完成网络协议栈和USB OTG功能,使用ST自家的工具STM32CubMx再好不过的了.如果你还不会使用,别着急下面我会一步一步的用图片 ...

  3. c8051f320学习,单片机不外乎时钟、IO、串口、USB等外设用法

      时钟 IO(输入.输出,如何配置) IO   数字和模拟资源可以通过25个I/O 引脚(C805 1F3 2 0 ),每个端口引脚都可以被定义为 通用I/O(GPIO)或 0 模拟输入 所有端口I ...

  4. [转] STM32各种时钟的区别

    [原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是 ...

  5. STM32时钟理解

    转载自 http://blog.sina.com.cn/s/blog_6ebd49350100q6xw.html STM32时钟理解 一.硬件上的连接问题 如果使用内部RC振荡器而不使用外部晶振,请按 ...

  6. Cotex-M3内核LPC17xx系列时钟及其配置方法

    一.背景: 最近正在接手一个项目,核心芯片既是LPC17XX系列MCU,内核为ARM的Cotex-M3内核. 想要玩转一个MCU,就一定得搞定其时钟! 时钟对MCU而言,就好比人类的心脏.由其给AHB ...

  7. stm32时钟分析

    转载自http://blog.chinaunix.net/uid-21658993-id-3129667.html   在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. 其实是 ...

  8. (六)STM32的时钟系统

    在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL (1) HSI是高速内部时钟,RC振荡器,频率为8MHz: (2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外 ...

  9. linux 时钟源初步分析linux kernel 时钟框架详细介绍

    初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB ...

随机推荐

  1. C# Socket基础(一)之启动异步服务监听

    本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualRe ...

  2. 在加载模块时出现cannot insert '*.ko': Device or resource busy错误

    制作了一个模块,在加载是出现了cannot insert '*.ko': Device or resource busy错误. 原因: 是由于模块使用的是静态分配设备号,而这个设备号已经被系统中的其他 ...

  3. mybatis 关于 Parameter Maps collection does not contain value for

    当*mapper.XML 文件中出现任何错误,该xml文件都不能使用.也就是说不管出错的那个标签是不是你当前调用的,都会报错误 .Parameter Maps collection does not ...

  4. iOS-UISearchBar和UISearchController(参考网友来练习一下)

    #import "ViewController.h" #import "TestCell.h" @interface ViewController ()< ...

  5. Cache的原理、设计及实现

    Cache的原理.设计及实现 前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构.指令结构.信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特 ...

  6. [JavaEE] Hibernate OGM

    Hibernate Object/Grid Mapper (OGM)这个项目能够为NoSQL数据库提供Java Persistence(JPA)支持.它复用了Hibernate Core引擎将实体持久 ...

  7. [Arduino] 逗号分隔文本到数组的两种方法

    以下是今日练习通过逗号来分割字符数组/字符串的2个例子和方法" 1.通过indexOf函数 /* *Splitsplit sketch *split a comma-separated st ...

  8. CentOS6.5 64bit 运行Mono程序

    前几日和一技术友聊天,认为转Java好,java可以在Linux下运行,貌似c#不可以哦,就做了个尝试,运行控制台程序和窗口程序(界面编程,Linux下Java好像也比较烦吧) 现在贴环境: 参考:C ...

  9. Hadoop学习笔记(2) ——解读Hello World

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  10. 使用hibernate配置多数据源链接MySQL和Oracle数据库

    最近做项目要将读取到的数据同时插入到MySQL数据库和Oracle数据库当中,以前都是使用一个数据库,没有用过多数据源的情况,现在把这个问题搞定了,写下来希望对大家有点帮助,可能我所使用的方法不是最好 ...