CY68013学习分享(USB芯片)

一.源码结构

 

 

Fw.c:

    需要首先完成特定的USB处理,然后才开始进行用户代码。

顺序执行以下操作

     1.初始化变量,休眠模式,远程唤醒和自供电

     2.初始化用户USB设备

     3.固件程序中的定向USB描述符(用于指定usb设备的描述符)

4.使能usb各种中断

5.固件进行重列举(用于软件断开USB连接,然后以新的设备描述符来列举)

6.主循环,等待usb主机的请求

  主循环中开始就是检测令牌指针标志位是否置位,然后进行数据请求解析和具体操作。主要的请求就是进行描述符的获取。用户请求处理操作。

Dscr.a51:主要是定义设备描述符的信息。在USB协议中,USB标准设备描述符包括设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,设备限定描述符合其他速率配置描述符。Dscr.a51详细描述符配置见附1.1.(感觉和程序其他宏定义没啥区别,都是赋值,然后在主程序中调用)

YJ.c:中断处理函数

I2c.c:IIC配置函数

 

 

USB软件主流程图如下所示:

 

USB控制传输分为三个阶段:

1. 建立阶段

2. 数据阶段

3. 状态阶段

注:每个阶段由特定的事务组成。每个事务又由三种类型的包组成。(令牌包,数据包,握手包)。令牌包可分为(IN包,OUT包,STEP包)。

    

整个控制传输流程如下图:

 

1.建立阶段

 

 

 

 

如果设备已收到主机要执行取得设备描述符的命令,设备就以握手封包来加以响应。因 此须注意的是,如果设备已准备接收的话就以ACK握手封包响应;如果尚未就绪就使用NAK握手封包响应;如果发生错误而停滞,就使用STALL握手封包响 应。

STEUP 8字节DATA数据:

 

bmRequestType:这个字节在本项目中定义为:0x00(方向为主机到设备,标准请求,接收方是设备)

bRequest:为请求码,自定义请求码(0xB3 准备向FPGA写数据 0xB4 停止写数据),其他获取描述符功能码没变。

wLength:指示数据阶段所需传输的字节数,此值不能为零。

 

 

2.数据阶段

输出事务处理(OUT):表示上位机把一个数据包输出到usb设备中的过程。多数据包需要DATA0  DATA1切换发送。每个数据包最大为64字节(因为ep0buf最大为64字节)

 

3. 状态阶段

状态阶段:用来表示整个传输的过程已完全结束。

   状态阶段传输的方向必须与数据阶段的方向相反,此程序中数据阶段的方向是是OUT令牌封包,这个阶段应为IN令牌封包,状态用DATA1发送

下图为一个OUT令牌实例:

 

附1.1:

1.设备描述符用于表示USB设备的总体信息包括设备类和设备子类。一个USB设备只能有一个设备描述符。经常需要更改的就是PID和VID。电脑端驱动,PID VID必须一致,不然会安装失败,win8,win10,在安装驱动时需要打开权限,才能安装成功。

 

 

2.配置描述符用于表示设备的配置信息,一个设备可以有多个配置,每个配置都必须包含一个配置描述符。

 

 

3.字符串描述符,用于保存一些供应商的名称,产品序列号等文本信息。

4.接口描述符,用于标书在USB设备中各个接口的特性包括接口号,端点个数,所属的设备类和子类。

5.端点描述符,这个描述符操作的比较多,在使用相应端点的时候都要先配置端点描述符。

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值