CYPRESS的USB外设控制器CY7C68013A是一款广泛应用于USB打印机,手机,存储设备,USB测试等多个领域的经典产品。该产品符合USB2.0协议规范,支持full speed和high speed两种速度模式,并且配有8051的MCU,带有IO,IIC,UART,定时器等功能。由于该芯片是市场上唯一支持high speed模式的芯片,所以一上市后,就获得了广泛的关注。

关于CY7C68013A的开发,CYPRESS提供了完整的程序架构,一般的应用只需要理解了它的软件架构以及寄存器的含义,然后根据自己的需求修改寄存器初始化值,并且修改USB的相关描述符即可实现。并且CYPRESS提供了较多的例程以及上位机,方便参考和调试,加快了开发的进度。

但是在开发的过程中,如果你想实现将你的CY7C68013A设备速度模式变为可切换,那你可能就要纠结和痛苦了。因为你查遍了它的DATASHEET和TRM手册也不会发现有相关的介绍。

但是请不要急,看完这篇帖子,你就能够实现了。

首先,在CY7C68013A的所有例程中,默认情况下,都是将设备枚举成高速模式的。那么如果想实现将其默认枚举成全速设备的话,应该怎么做呢?那就需要修改其中的寄存器值了。怎么改,改哪里呢?CY7C68013A的实现方法有点weird。因为他不是像别的MCU那样在程序中配置了某个寄存器的值就可以实现的,他是通过修改KEIL软件的配置实现的。准确的说是在KEIL调用Hex2bix文件,实现将HEX的文件转换为IIC文件时通过修改转换的参数来实现的。即将KEIL配置中的命令改成

c:\cypress\usb\bin\hex2bix -c 0x80 -i-f 0xC2 -o bulkloop.iic bulkloop.hex。

如果不加-c 0x80命令,那么CY7C68013A就会默认枚举成高速,加上-c 0x80就默认枚举成全速。

那么在实现将设备默认枚举为全速后,如果在程序中将USB断开了一次,CY7C68013A又会变成了高速模式,此时想要切换速度模式,又需要怎么做呢?很简单,只需要这样(大招来了):

USBCS |= bmDISCON;      // just disconnect from USB

CT1&=0x02;     //0x02保证程序重启后可以保持在全速,//0x00保证在高速

EZUSB_Delay(1500);

USBCS&=~bmDISCON;      // reconnect USB

USBCS|=  bmRENUM;          //EZUSB_Discon(TRUE);

即修改寄存器CT1的值就好了。这个寄存器就是控制速度模式的寄存器。但是翻遍了TRM手册,也没有关于这个寄存器的介绍,为什么呢?那是因为这个寄存器是不合法的,准确说是这个寄存器是CYPRESS公司开发的时候,在TEST时候使用的。所以没有公布。以上内容希望对大家有帮助。(本段代码只能参考例程中关于寄存器的文件fx2regs.h)

USB学习笔记连载(二十):FX2LP如何实现高速和全速切换(转载)的更多相关文章

  1. USB学习笔记连载(十五):USB固件更新以及安装驱动

    前几篇博客已经把如何更改固件程序和更改USB驱动名称,那么接下来就要把之前生成的 .iic 文件烧录到EEPROM里面去,实现USB的C2启动(笔者使用的是此类型,C2启动). 打开Cypress U ...

  2. USB学习笔记连载(十二):USB描述符

    USB设备是端口,接口,配置的集合,USB协议是以各种USB描述符来表征USB设备的功能.计算机通过这些描述符来获得USB设备的功能. USB描述符包括: USB标准设备描述符,USB集线器描述符.H ...

  3. USB学习笔记连载(十六):USB数字签名

    转载:http://blog.chinaaet.com/crazybingo/p/34487 曾记得在最开始安装驱动程序的时候出现过这个错误....但是最近我在别的电脑安装的时候又不出现这个错误了.. ...

  4. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  5. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

  6. Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法

    CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...

  7. Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色

    上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...

  8. Dynamic CRM 2013学习笔记(二十九)报表设计:reporting service 报表开发常见问题

    在报表开发过程中,经常会遇到各种各样的问题,比如The report cannot be displayed. (rsProcessingAborted),一点有意义的提示都没有:再就是分页问题,经常 ...

  9. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

随机推荐

  1. 史上最全PHP正则表达式实例汇总

    收集了一份php正则表达式的实例教程,真心不错,记录下. 正则表达式用于字符串处理.表单验证等场合,实用高效. 一些常用的表达式: $str = preg_replace("/(<a. ...

  2. [svc]nginx优化

    nginx的25条优化

  3. 采用alluxio提升MR job和Spark job性能的注意点

    1. 介绍 2. 实验说明 2.1 实验环境 2.2 实验方法 2.3 实验负载 3. MapReduce on alluxio 3.1 读取10G文件(1G split) 3.2 读取20G文件(1 ...

  4. 【delphi】ClientDataSet详细解读

    TClientDataSet的基本属性和方法 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds/.xml,是基于文件型数据存储和操作的控件. 该控件封装了对 ...

  5. 【转】一件有趣的事:我用 Python 爬了爬自己的微信朋友

    偶然了解到 Python 里的 itchat 包,它已经完成了 wechat 的个人账号 API 接口,使爬取个人微信信息更加方便. 于是乎玩心一起,打算爬一下自己的微信. 步骤核心: 网页启动not ...

  6. RelativeLayout.LayoutParams

    通过id设置相对兄弟元素对齐. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  7. C# JAVA 记录代码运行时间

    C# System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 // cod ...

  8. SVN下载时提示“已经锁定”

    问题现象:同事让我提交代码,我就先下载后提交,但下载时提示“D:\ABC”已经锁定. 问题原因:原因不明. 问题处理:向上退一级,右击目录->SVN->"清理"-> ...

  9. C#学习笔记(20)——使用IComparer(自己写的)

    说明(2017-7-25 10:38:37): 1. 参照了上一篇百度文库里的文章. 2. 总结来看,Icomparer就是sort方法的一个参数,用来自定义一个排序规则. 3. 使用方法是,定义一个 ...

  10. C#学习笔记(16)——C#中重写(override)和覆盖(new)的区别

    说明(2017-7-17 23:04:45): 原文: C#中重写(override)和覆盖(new)的区别 重写 用关键字 virtual 修饰的方法,叫虚方法.可以在子类中用override 声明 ...