PDIUSBD12指令

PDIUSBD12指令

 

端点描述

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

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

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

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

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

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

 

模式1
端点号端点索引传输类型端点类型方向最大信息包规格(字节)
0和1同模式0
24同步输出同步输出1284

 

模式2
端点号端点索引传输类型端点类型方向最大信息包规格(字节)
0和1同模式0
24同步输入同步输入1284

 

模式3
端点号端点索引传输类型端点类型方向最大信息包规格(字节)
0和1同模式0
24同步输出同步输出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]该位必须设置为10
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无错
0001PID编码错误
0010PID未知:编码有效,但PID不存在
0011不是所期望的包
0100标志CRC错误
0101数据CRC错误
0110时间溢出错误
0111串扰错误
1000不期望的包结束
1001发送或接收NAK
1010发送停止,已接收到标志,但端点已停用。
1011溢出错误。
1101Bitstuff错误
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。该命令通常用于器件处于挂起状态时。

转载于:https://www.cnblogs.com/sheshiji/p/3599477.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值