PDIUSBD12指令
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指令的更多相关文章
- iOS逆向工程之Hopper中的ARM指令
虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...
- 步入angularjs directive(指令)--点击按钮加入loading状态
今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...
- 浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...
- [Django]用户权限学习系列之User权限基本操作指令
针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...
- 机器指令翻译成 JavaScript —— No.5 指令变化
上一篇,我们通过内置解释器的方案,解决任意跳转的问题.同时,也提到另一个问题:如果指令发生变化,又该如何应对. 指令自改 如果指令加载到 RAM 中,那就和普通数据一样,也是可以随意修改的.然而,对应 ...
- ARM的栈指令
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...
- IL指令详细表
名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...
- Angular学习-指令入门
1.指令的定义 从用户的角度来看,指令就是在应用的模板中使用的自定义HTML标签.指令可以很简单,也可以很复杂.AngularJS的HTML编译器会解析指令,增强模板的功能.也是组件化未来的发展趋势, ...
随机推荐
- [LC] 238. Product of Array Except Self
Given an array nums of n integers where n > 1, return an array output such that output[i] is equ ...
- Java IO: RandomAccessFile
原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) RandomAccessFile允许你来回读写文件,也可以替换文件中的某些部分.FileIn ...
- 吴裕雄--天生自然HTML学习笔记:HTML 统一资源定位器(Uniform Resource Locators)
URL 是一个网页地址. URL可以由字母组成,如"runoob.com",或互联网协议(IP)地址: 192.68.20.50.大多数人进入网站使用网站域名来访问,因为 名字比数 ...
- maven依赖找不到,快速解决
以微信支付依赖为例子 wxpay-sdk-3.0.9.jar1.阿里云仓库搜索地址https://maven.aliyun.com/mvn/search 2.搜索你要找的依赖,对号入座 3.确保mav ...
- JAVA递归、非递归遍历二叉树
前序遍历:1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历:1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历:1.后序遍历左子树 2.后序遍历右子树 3.访问根节点-- ...
- EL表达式详细教程
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- Android中的AlertDialog和ProgressDialog用法
手机APP对话框是很多APP都有的下面来看下怎么实现的吧, 打开Android studio 然他自动创建好布局和类; 下面我们修改activity_main.xml中的代码 <?xml ver ...
- LoraLU
一.定义动画过程中形成的状态用transform transform 分为2D 和 3D,主要包含以下几种变换:旋转rotate.扭曲skew.缩放scale和移动 translate以及矩阵变形ma ...
- 在虚拟机单机部署OpenStack Grizzly
安装过程 安装Ubuntu 我手头有的是Ubuntu Server 12.04 64位版,就直接用了,默认安装即可,配置的时候很简单,如下 内存:1G 硬盘:20G 处理器:2 网络:NAT 装好以后 ...
- 冒泡排序算法(C#、Java、Python、JavaScript、C、C++实现)
一.介绍 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从Z到A)错误就把他们交换过来. 走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排 ...