USB2.0 赛普拉斯 USB 框架Streamer笔记

1. 赛普拉斯框架文件, fw.c
2. 描述符文件, dscr.a51
3. CyStream.c 文件
这些代码模块均是合适的,如下图所示。这种结构适用于所
有基于赛普拉斯固件框架的 FX2LP USB 应用。
1. CyStream 代码模块

 

fw.c
这个赛普拉斯编写的固件(即 Frameworks)用于处理 低级 USB 详细信息。该文件无需修改。 Fw.c 包含了项目的 main() 函数,启动时它将调用 TD_Init(),然后在操作过程 中重复调用 TD_Poll() 。该无限循环也会处理 CONTROL 端 点( EP0 SETUP 数据包。对于 GET_DESCRIPTOR 请 求,它使用 dscr.a51 中提供的描述符数据。对于其它主机 请求,将调用您的应用来执行各种操作,例如修改某个接口 的备用设置。该无限循环还会处理 USB 暂停和恢复事件 (睡眠)。
dscr.a51
它是一个包含用于特定 USB 器件的描述符数据的 8051 汇 编语言模块。该文件含有‘ .db’ define byte — 定义字 节)语句,按下面的顺序列出了描述符表格数据:
        1. 器件描述符
                a. USB 规范版本(2.0
                b. 器件标准类别(无)
                c. EP0 MaxPacketSize(64
                d. 供应商 ID = 0x04B4 = 赛普拉斯
                e. 产品 ID = 0x1003 = EZ-USB 示例 Streamer 器 件”。
                f. 制造商和产品字符串索引
                g. 配置数量 = 1
        2. 器件限定符:对于能够在全速或高速两种模式下运行的 器件,该选项为‘其它’(非当前)速度提供设置。
        3. 高速配置
                a. 接口数量 = 1
                b. 选择该配置的索引 = 1
                c. 七个接口- 端点描述符配对,同 3 中的七个备用 设置参数相对应。
        4. 全速配置
                a. 接口数量 = 1
                b. 选择该配置的索引 = 1
                c. 四个接口- 端点描述符配对,同 4 中的四个备用 设置参数相对应。
        5. 两个字符串描述符。
全速 / 快速操作概况
        当 USB 外设连接至主机时,主机上的内部 USB 集线器或外部集线器,如果存在)将与外设进行协商,以确定其 操作速度。实际上,主机从未选择一个工作速度,而它将使 用集线器报道的速度。只要器件仍保持连接状态,集线器报 道的工作速度便不发生变化。仅在器件断开并重新连接的情 况下,才重新开始确定速度的过程。 对于可在全速或高速模式下运行的器件,集线器报道的速度 为‘当前’速度,而它运行的速度是其他速度。由于拥有 两个配置描述符(每一个用于每一工作速度),主机可以在 器件插入不同端口的情况下确定器件支持其它速度。因此如果您将高速器件插入到全速端口上, Windows 将显示 2 中所示的信息。
        FX2LP 固件负责检测当前工作速度,并指定适当的配置描 述符(FS 或 HS)作为当前正在使用的速度,另一个作为 与非选定(其它)速度相应的。通过将正确的 bDescriptorType 值( CONFIG OTHERSPEED)插入每 个配置描述符的第二个字节,固件可以执行上述操作。

 

USB 总线 RESET (复位)后,器件将恢复 FS 操作。因 此,在 USB 复位中断服务子程序中,固件标出了描述符 ( 3 )。它也设置指向每个描述符的指针( pConfigDscr pOtherConfigDscr) ,供在枚举过程中使用。如果器件 被插入全速端口上,将保持此标号。
每当 USB 内核为高速度模式成功协商时, FX2LP 将接收一 个中断( ISR_Highspeed )。在该 ISR 中,固件将交换标号,如 4 所示,并且要设置相应的描述符指针。
wMaxPacketSize 的概况
用于高带宽端点的 wMaxPacketSize 入口的格式不是很明 显。很有吸引力的一点是一个端点在每个微帧能够处理三个 1024 字节的数据包,该端点具有一个最大大小为 3*1024 或 3072 字节的数据包。然而,这个内容不被定义在 USB 2.0 规范中,因为一个物理数据包的最大大小为 1024
节。规范中的内容定义了位 0- 10 maxPacketSize,最 大大小为 1024 ;位 11- 12 为每个微帧中的 额外数据包: 00 表示没有额外的数据包、 01 表示一个额外数据包、 10 表 示两个额外数据包。因此,按低字节优先的原则,使用 表 5 中的值填入高带宽端点描述符。

 

 CyStream.c

这是数据流程序。该模块中的应用代码是通过 USB Framework USB 框架)的帮助编写的:
        1. 根据应用的要求编写 TD_Init() TD_Poll 函数。
        2. 由于 Fw.c 将多个器件请求传到端点 0,它将调用您的 代码中的特定命名函数。赛普拉斯代码模板 (peripheral.c)通过提供包含了所有函数存根的代码 帧架保存创建函数的工作。只要对应用中需要使用的函 数进行编码。
        3. 您需要提供中断服务子程序来处理您的应用所使用的中断。大多数这些程序(用星号表示)是简单的确认内部工作;若不需要采取其他行为,不要修改它们。
        本部分的剩下内容描述了 CyStream.c 代码。
TD_Init()
        初始化程序执行以下操作:
        1. 将 IFCONFIG 寄存器设置为 0x40 ,以便选择 8051 48 MHz 时 钟 频 率 , 并 将 一 组 I/O 引 脚 配 置 为 端 口 ( GPIO )引脚(这些引脚可以作为从设备 FIFO,也可 作为 GPIF 接口引脚)。
        
        2. 关闭四个开发板上的 LED。注意,通过读取预定的存 储器位置可以打开和关闭开发板上的 LED
        
        3. 使能 EP2 ,会禁用所有其他 LED。然后,如果主机将 备用设置更改为使用 EP6-OUT 的设置,代码将在设置 更改的同时使能该端点。
        
        4. 使能帧开始( SOF )中断。 SOF ISR 处理 LED 闪炼时 序。
        5. 将 1024 数据字节填充到 EP2-IN FIFO 内,并准备执行 第一个 IN 传输。在 FIFO 中带有特定数据将便于使用 USB 总线分析仪查看数据包,但是此数据与该应用无 关。因此,该步骤是可选的。
TD_Poll()
        
        USB Frameworks 在无限循环中所调用的 TD_Poll()是很简 单的。它只需通过检查 FIFO 标志来确定端点 FIFO 需要重 新待命的时间点。该操作发生在两个相同的代码段内,其中 一个用于高速操作,另一个用于全速操作。每个代码段将执 行以下操作:
        
        1. 检查 EP2-IN FIFO 的未满( not FULL )状态。 该状态 表明主机已成功读取了 FIFO IN 数据,并且 FX2LP 逻 辑将 FIFO 控制权转给 8051 。如果它未满:
                a. 打开 IN LED ,并且设置 SOF 中断服务子程序 ( ISR )的时间常量( inblink)以便关闭它。通过加载与当前备用设置相匹配的尺寸加载到 EP2-IN字节计数寄存器内来重新准备执行下一个 IN 传输。这些值与 3(HS)和 4(FS)中最右侧一列相应。
        2. 检查 EP2-OUT FIFO 的非空( not EMPTY )状态。该 状态表明主机已经成功将 OUT 数据发送到 EP2-OUT FIFO 内,并且 FX2LP 逻辑将 FIFO 控制权转交给了 8051 。如果它为非空:
                a. 打开 OUT LED ,并设置 SOF ISR 的时间常量 ( outblink ),以关闭它。
                b. 通过将字节计数加载到 EP2BCL 寄存器内来重新 准备执行下一个 OUT 传输。实际字节计数值并不 重要,但必须将位 7 置位,以设置 SKIP 位。 SKIP 位允许忽略刚收到的数据包,并且它的缓冲 器立即可用于下一个 OUT 数据包。
        3. (适用于 HS )检查 EP6-OUT FIFO 的非空状态。该状 态表明主机已经成功将 OUT 数据发送到 EP6-OUT FIFO ,并且 FX2LP 逻辑将 FIFO 控制权转交给 8051。 如果它为非空,需要执行步骤 2a 2b,但是使用 EP6BCL 寄存器。
处理器件请求和 IRQ
大多数简单的器件请求是很明显的,如设置本机变量为配置 索引的 DR_SetConfiguration 以及返回索引的 DR_GetConfiguration 。简单的 ISR 只清除 IRQ 标志。
CyStream.c 函数
CyStream.c 执行其操作时要使用下面四个函数:
         ISR_Ures
         ISR_Highspeed
         DR_Set_Interface
         DR_SOF
        ISR_Ures
                在 USB 总线 RESET 事件完成后触发该 ISR 。高速器件从 全速模式中退出复位状态,所以 ISR FS 配置描述符设置为主描述符,并将 HS 配置描述符设置为 OTHERSPEED
描述符( 3 )。然后, ISR 将关闭 HS LED EVKIT 板上 的 D2 ),并使用‘ blinkmask ’为 LED D5 设置两秒周期。
        ISR_Highspeed
FX2LP 进入高速模式时将触发该 ISR 。配置描述符被替换 ( 4 ),高速 LED2 被打开,另外默认的 EP2-IN 被初始 化。设置变量‘blinkmask ’以用于在高速模式下的 1 秒 D2 闪炼周期。
        DR_SetInterface
USB 主机使用 Set_Interface 请求来更改某个接口的备用设 置。由于该设计只使用一个接口,所以无必要检查接口索 引。该代码需要检索 SETUP 数据包中表示所请求的备用设 置的第三个字节(SETUPDAT[2] )。 两个‘switch ’语句按照备用设置并使用 3 (高速模式) 和 4 (全速模式)中的参数来配置端点。‘ case ’语句将 执行以下操作:
         只使能设置项需要使用的端点
         对于 IN 端点,复位 FIFO 以便刷新任意过时数据。对 于 BULK IN 端点,将端点的数据切换复位为 0
         对于 OUT 端点,准备执行所需的 FIFO 数量
         更新 7 段显示屏,以便显示新的备用设置 0-6
        DR_SOF
        SOF 中断对时序事件(如 LED 闪炼频率)非常有用。 SOF 中断在每 1 mSec (全速模式)和每 125 微秒(高速模式) 发生一次。SOF ISR 将计数关闭时间,并在合适场合下关 闭活动 LED D5 IN LED D4 以及 OUT LED D3
文件来源于:
001-75393_AN4053_Streaming_Data_through_Isochronous_or_Bulk_Endpoints_on_EZ-USB_FX2_and_FX2LP_Datasheet_Chinese
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasir'sHardwareLogs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值