PDIUSBD12指令

端点描述

PDIUSBD12的端点适用于不同类型的设备,端点可通过[Set mode]命令配置为4种不同的模式,分别为:

  • 模式0(NON-ISO模式):非同步模式

  • 模式1(ISO-OUT模式):同步输出传输

  • 模式2(ISO-IN模式) :同步输入传输

  • 模式3(ISO-IO模式) :同步输入输出传输

模式0
端点号 端点索引 传输类型 端点类型 方向 最大信息包规格(字节)
0 0 控制输出 默认 输出 16
1 控制输入 默认 输入 16
1 2 普通输出 普通 输出 16
3 普通输入 普通 输入 16
2 4 普通输出 普通 输出 644
5 普通输入 普通 输入 644
模式1
端点号 端点索引 传输类型 端点类型 方向 最大信息包规格(字节)
0和1 同模式0
2 4 同步输出 同步 输出 1284
模式2
端点号 端点索引 传输类型 端点类型 方向 最大信息包规格(字节)
0和1 同模式0
2 4 同步输入 同步 输入 1284
模式3
端点号 端点索引 传输类型 端点类型 方向 最大信息包规格(字节)
0和1 同模式0
2 4 同步输出 同步 输出 644
5 同步输入 同步 输入 644

命令描述

有3种基本类型命令:初始化、数据流和通用命令。

初始化命令
命令名 接收者 编码 数据
设置地址/使能 设备 D0H 写1字节
设置端点使能 设备 D8H 写1字节
设置模式 设备 F3H 写2字节
设置DMA 设备 FBH 写/读1字节
数据流命令
命令名 接收者 编码 数据
选择端点 控制输出 00H 读1字节(可选)
控制输入 01H
端点1输出 02H
端点2输入 03H
端点2输出 04H
端点2输入 05H
读最后处理状态 控制输出 40H 读1字节
控制输入 41H
端点1输出 42H
端点2输入 43H
端点2输出 44H
端点2输入 45H
设置端点状态 控制输出 40H 写1字节
控制输入 41H
端点1输出 42H
端点2输入 43H
端点2输出 44H
端点2输入 45H
读中断寄存器 设备 F4H 读2字节
读缓冲区 选择的端点 F0H 读n字节
写缓冲区 选择的端点 F0H 写n字节
应答设置 选择的端点 F1H
缓冲区清零 选择的端点 F2H
使缓冲区有效 选择的端点 FAH
普通命令
命令名 接收者 编码 数据
发送恢复 F6H
读当前帧数目 F5H 读1或2字节

设置地址/使能

命令:D0H

数据:写1字节

描述:该命令用于设置USB分配的地址和使能功能

写1字节内容:

位描述 描述 初始状态
ADDRESS [6:0] 写入的值即为地址 0
ENABLE [7] 1 = 使能该功能,0 = 禁止该功能 0

设置端点使能

命令:D8H

数据:写1字节

描述:通过设置地址/使能命令后才可使能普通/同步端点。

写1字节内容:

位描述 描述 初始状态
GENERIC/ISOCHRONOUS ENDPOINTS [0] 1 = 使能普通/同步端点 0
RESERVED [7:1] 保留 X

设置模式

命令:F3H

数据:写2字节

描述:设置模式命令后跟2个写入的数据,第一个字节包含配置字节信息,第二个字节是时钟分频因素字节。

写第一字节内容

位描述 描述 初始状态
RESERVED [0] 保留 0
NO LAZYCLOCK [1] 1 = CLKOUT不会切换到lazyclock
0 = CLKOUT在Suspend脚变高后切换到lazyclock

总线复位不改变
1
CLOCK RUNNING [2] 1 = 内部时钟和PLL即使在挂起状态下仍然运行
0 = 不需要时,内部时钟、晶振和PLL停止运行

总线复位不改变
1
INTERRUPT MODE [3] 1 = 所有错误和NAK都将产生中断请求
0 = 只有正确发送接收数据才产生中断请求

总线复位不改变
1
SOFTCONNECT [4] 1 = 若Vbus有效,会将上拉电阻连通
0 = 上拉电阻被断开

总线复位不改变
0
RESERVED [5] 保留 0
ENDPOINT CONFIGURATION [7:6] 00 = 模式0(非同步模式)
01 = 模式1(同步输出模式)
10 = 模式2(同步输入模式)
11 = 模式3(同步输入输出模式)
00

写第二字节内容

位描述 描述 初始状态
CLOCK DIVISION FACTOR [3:0] 时钟分频系数。假设值为N,那么CLKOUT端的频率等于48MHZ/(N+1)。
通过设置该值,可以获得不同频率的CLKOUT时钟输出
1011
RESERVED [5:4] 保留 XX
SET_TO_ONE [6] 该位必须设置为1 0
SOFT-ONLY INTERRUPT MODE [7] 1 = 只有当帧起始(SOF)时,中断信号才产生。 1

读中断寄存器

命令:F4H

数据:读2字节

读第一字节内容

通过读端点最后处理状态寄存器将端点中断位(0~5)清零,其它位在读中断寄存器后被清零。

位描述 描述 初始状态
CONTROL OUT ENDPOINT [0] 1 = 控制输出中断 0
CONTROL IN ENDPOINT [1] 1 = 控制输入中断 0
ENDPOINT 1 OUT [2] 1 = 端点1输出中断 0
ENDPOINT 1 IN [3] 1 = 端点1输入中断 0
MAIN OUT ENDPOINT [4] 1 = 主端点输出中断 0
MAIN IN ENDPOINT [5] 1 = 主端点输入中断 0
BUS RESET [6] 1 = 总线复位后发出中断 0
SUSPEND CHANGE [7] 1 = 挂起状态改变后发出中断 0

读第二字节内容

位描述 描述 初始状态
DMA EOT [0] 1 = DMA操作已经完成 0
RESERVED [7:1] 保留 XXXXXXX

选择端点

命令:00H-05H

数据:可选读1字节

选择端点命令将内部指针初始化到选择的缓冲区起始位置。可选的,该命令可跟一个返回的字节。

读1字节内容

位描述 描述 初始状态
FULL/EMPTY [0] 1 = 缓冲区已满,0 = 缓冲区为空 0
STALL [1] 1 = 该端点处于停止状态 0
RESERVED [7:2] 保留 XXXXXX

读最后处理状态寄存器

命令:40H-45H

数据:读1字节

读最后处理状态寄存器命令后跟一个数据返回端点最后处理的状态。该命令同时复位中断寄存器中的相应位并将状态清零表示已经读取。在每次新的通信之后会将原来的状态信息覆盖。

读1字节内容

位描述 描述 初始状态
DATA RECEIVE/TRANSMIT SUCCESS [0] 1 = 数据成功接收或发送。 0
ERROR CODE [4:1] 见下表 0000
SETUP PACKET [5] 1 = 接收到的为SETUP包(对IN缓冲区进行读总为0) 0
DATA 0/1 PACKET [6] 1 = 接收到的是DATA1包,0 = 接收到是DATA0包 0
PREVIOUS STATUS NOT READ [7] 1 = 前一状态没有读取,而且已经被覆盖 0
错误代码 结果
0000 无错
0001 PID编码错误
0010 PID未知:编码有效,但PID不存在
0011 不是所期望的包
0100 标志CRC错误
0101 数据CRC错误
0110 时间溢出错误
0111 串扰错误
1000 不期望的包结束
1001 发送或接收NAK
1010 发送停止,已接收到标志,但端点已停用。
1011 溢出错误。
1101 Bitstuff错误
1111 错误的DATA PID

读缓冲区

命令:F0H

数据:读多个字节(最大130)

读缓冲区命令后,返回一系列从选择的端点数据缓冲区读出的数据。每读一字节,内部缓冲区指针自动加一。读缓冲区命令不会将缓冲区指针复位到缓冲区起始端。这意味着可被其它的命令所中断(选择端点命令除外)。

缓冲区数据结构如下:

字节1:保留

字节2:数据字节的长度

字节3:数据字节1

字节4:数据字节2

… …

写缓冲区

命令:F0H

数据:写多个字节(最大130)

写缓冲区命令后跟一系列需要写入的端点缓冲区的数据。数据的结构必须与前面描述的读缓冲区命令一样。

清缓冲区

命令:F2H

数据:

当一个包完全接收之后,内部端点缓冲区满标志置位。所有后续的包将被返回的NAK拒绝。当缓冲区清空后,新的包可被接收。

使缓冲区有效

命令:FAH

数据:

当微控制器已将数据写入IN缓冲区,它应当通过缓冲区有效命令设置缓冲区满标志。这表示缓冲区内的数据有效并可在接收到下一个IN标志时将其送入主机。

设置端点状态

命令:40H-45H

数据:写1字节

当一个停止的控制端点接收到SETUP包时自动解除停止,而不管包的内容是什么。如果端点应当处于停止状态,微控制器可以重新停止它。

当一个停止的端点解除了停止状态后(通过设置端点命令或接收到一个SETUP包),它同时被重新初始化。将缓冲区刷新,如果是OUT缓冲区就等待一个DATA0 PID,如果是IN缓冲区就写入一个DATA0 PID。即使在解除停止时,将设置端点状态写为0也将初始化端点。

位描述 描述 初始状态
STALLED [0] 1 = 端点处于停止状态 0
RESERVED [7:1] 保留 XXXXXXX

应答建立

命令:F1H

数据:

接收到SETUP包时将刷新IN缓冲区并且禁用IN和OUT端点的使能和清空缓冲区这两条命令。

这样就确保最后一个SETUP包一直留在缓冲区中,而且没有其他包可以发送到主机,直到微控制器通过应答建立命令来重启这些命令。

微控制器必须对IN和OUT端点都发送应答建立命令。

发送恢复

命令:F6H

数据:

发送一个上行数据流恢复信号10ms。该命令通常用于器件处于挂起状态时。

PDIUSBD12指令的更多相关文章

  1. iOS逆向工程之Hopper中的ARM指令

    虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...

  2. 步入angularjs directive(指令)--点击按钮加入loading状态

    今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...

  3. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  4. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  5. [Django]用户权限学习系列之User权限基本操作指令

    针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...

  6. 机器指令翻译成 JavaScript —— No.5 指令变化

    上一篇,我们通过内置解释器的方案,解决任意跳转的问题.同时,也提到另一个问题:如果指令发生变化,又该如何应对. 指令自改 如果指令加载到 RAM 中,那就和普通数据一样,也是可以随意修改的.然而,对应 ...

  7. ARM的栈指令

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  8. IL指令详细表

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  9. Angular学习-指令入门

    1.指令的定义 从用户的角度来看,指令就是在应用的模板中使用的自定义HTML标签.指令可以很简单,也可以很复杂.AngularJS的HTML编译器会解析指令,增强模板的功能.也是组件化未来的发展趋势, ...

随机推荐

  1. jenkins使用(4)-发邮件

    邮箱配置 邮件触发器:达到条件就会发邮件 对单独的服务设置邮件 系统设置如下 回到单个任务的设置 配置中的主题设置如下: 回到单个任务的设置 配置中如下: 选择工作空间中的一个文件 发送多个附件: 邮 ...

  2. 吴裕雄--天生自然python学习笔记:Python3 网络编程

    Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...

  3. 通过银行卡的Bin号来获取银行名称

    /** * 通过银行的Bin号 来获取 银行名称 * @author 一介草民 * */ public class BankUtil { public static void main(String[ ...

  4. Navicat导入导出数据表

    当我们对mysql数据库进行了误操作,造成某个数据表中的部分数据丢失时,肯定就要利用备份的数据库,对丢失部分的数据进行导出.导入操作了.Navicat工具正好给我们提供了一个数据表的导入导出功能. 1 ...

  5. 云服务器之——Linux下配置JDK环境

    在Linux下jdk的安装已经操作了很多次,每次发现自己还是会忘记之前的操作,所以今天就简单的来做个记录. 第一步:下载jdk安装包 登录oracle官网:https://www.oracle.com ...

  6. 那些被刻意“阉割”的名人名言

    "天才是百分之一的灵感,百分之九十九的汗水",这句名言大家都知道的吧!不过还有好多人不知道的是这句名言还有后半句:"但百分之一的灵感甚至比百分之九十九的汗水更重要.&qu ...

  7. 当async: true 时,ajax请求是异步的

    方法beforeSend,用于在向服务器发送请求前添加一些处理函数.   type:"GET",//通常会用到两种:GET,POST.默认是:GET      url:" ...

  8. javascript学习内容

    http协议 犀牛书 MDN js单线程 let只在代码块内有效 es5只有全局作用域 const变量指向的内存地址不得改动,值不能保证不变 全局变量不加var node.js 更改连接到服务器的方式 ...

  9. 来自澳洲的数据秀场:记KDD 2015大会

    作者:微软亚洲研究院实习生 王英子 南半球最大城市和数据挖掘界顶级会议的浪漫碰撞 悉尼,作为澳大利亚第一大城市及新南威尔士州首府,澳大利亚的经济.金融.航运和旅游中心,同时还是南半球最大的城市和重要的 ...

  10. 蚂蚁金服招聘-无线测试开发(20k-36k/月)

    蚂蚁金服-支付宝国际事业部-高级测试开发工程师/测试专家 工作年限:三年以上学历要求:本科期望层级:P6/P7工作地点:上海,杭州,深圳等为什么选择加入我们? 我们的岗位有何不同?1.国际化远景:随着 ...