zoukankan      html  css  js  c++  java
  • USB小白学习之路(1) Cypress固件架构解析

    Cypress固件架构彻底解析及USB枚举

    1. RAM的区别

    56pin或者100pincy7c68013A,只有内部RAM,不支持外部RAM

    128pincy7c68013ApinEA=0时为内部RAMpinEA=1时,为外部RAM

    2. USB描述符

    DESR.A51中放的是USB描述符表,包括:

    1、设备描述符

    2、设备限定描述符、

    3、配置描述符

    4、接口描述符

    5、端点描述符

    6、字符串描述符

    3. FW.C文件的解析

    1TD_init()初始化自己的配置

    2、判断设备描述符位于内部RAM区还是外部RAM区,如果位于外部RAM区,则移到内部RAM区中去

    3、初始状态设置

    4、进入主循环while(TRUE)

    *****************************************************************

    5if(GotSUD)等待SETUP令牌数据的到来,令牌数据到来时,在中断中将GotSUD置位,中断函数为ISR_Sudav(void)GotSUD为令牌包标志

    6SetupCommand(),处理SETUP的事务全在里面,用户可以自定义

    7GotSUD = FALSE 处理完后清零Setup标志

    *****************************************************************

    8if(Sleep),Sleep:USB的休眠标志,USB休眠后产生中断,在中断函数ISR_Susp(void)中将Sleep标志置位。

    9if(TD_Suspend()),在进入休眠之前加一个返回值为BOOL的函数,用户可以在此函数中进行相关操作

    10Sleep = FALSE Sleep标志

    11EZUSB_Susp();置处理器于空闲状态

    12while(!Rwuen && EZUSB_EXTWAKEUP());如果唤醒

    13EXUSB_Resume();从空闲状态恢复

    14TD_Resume();9中的TD_Suspend()相呼应,在唤醒之后,用户可以在此函数中做相关操作

    这里需要注意的是,在空闲模式中,处理器的时钟是没有的,有三种方法可以使处理器跳出空闲模式WAKEUP pin;②USB总线唤醒;③WU2 pin

    *****************************************************************

    在此处插入了博主对《USB原理与工程实践》这本书的理解

    详细介绍了从插入USB设备后的“枚举”以及“重枚举”过程,它们的动作如 3-1所示

    3-1 枚举和重枚举的对比

     

    处理设备请求

    Renum

    8051动作

    枚举

    EZUSB核心

    Renum=0

    Renum=1

    重枚举

    8051

    Renum=1

    重置Renum=0

     

    EZUSB”的核心只能处理端点0的请求。即使加载了“8051”的程序,也可以设置Renum=0,这样让“EZUSB核心”处理端点0的设备请求,而让“8051”完成具体的USB数据传输,这样做会大大简化8051固件代码。

    枚举和重枚举的过程是自动的。

    #ifndef NO_RENUM

    if(!(USBCS & bmRENUM))          //如果Renum位为0,则进行重枚举

    {

    EZUSB_Discon(TRUE);     //重枚举

    }

    #endif

    4. USB固件架构彻底解析

    1、开发工具解析

    2、以例程bulkloop进行讲解

    3fw.cUSB的固件根本,USB的协议方面的通信在此完成,新手尽量不要在此改动

    4bulkloop.c为用户自己的代码书写文件,自己的代码在这里书写,Cypress已经搭好了框架

    5、由于中断不够用,Cypress引入了自动向量的概念,软中断,扩展中断数量。

    6、特别是对于接收数据,一般都在中断中完成相应处理。中断中不要进行复杂的操作,复杂操作可以放在TD_PULL()函数中进行。

    7、中断的结尾要让中断复位,允许下一次中断。

    8dscr.a51USB描述符文件,包括各种描述符,新手不要改动就对了^o^

    9、几个文件的说明

    fx2.h:预定于宏及函数声明

    fx2regs.h68013寄存器地址定义

    syncdly.h:同步延时,经常调用的SYNCDELAY就是在这里定义

    ntrins.hC51一些数据类型及函数定义

    真正不羁的灵魂不会真的去计较什么,因为他们的内心深处有着国王般的骄傲。
  • 相关阅读:
    逆序对
    【模板】树状数组 1
    【模板】树状数组2
    发射站
    质量检测
    【模板】ST表
    winform ComBox绑定数据
    JavaScript CheckBox实现全选和部分选择
    webbrowser内容滚动(javascript内容无缝滚动)
    double? int?
  • 原文地址:https://www.cnblogs.com/kybyano/p/8093189.html
Copyright © 2011-2022 走看看