PDIUSBD12指令

mac2022-06-30  83

PDIUSBD12指令

 

端点描述

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

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

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

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

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

模式0端点号端点索引传输类型端点类型方向最大信息包规格(字节)00控制输出默认输出161控制输入默认输入1612普通输出普通输出163普通输入普通输入1624普通输出普通输出6445普通输入普通输入644

 

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

 

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

 

模式3端点号端点索引传输类型端点类型方向最大信息包规格(字节)0和1同模式024同步输出同步输出6445同步输入同步输入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]写入的值即为地址0ENABLE[7]1 = 使能该功能,0 = 禁止该功能0

 

设置端点使能

命令:D8H

数据:写1字节

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

写1字节内容:

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

 

设置模式

命令:F3H

数据:写2字节

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

写第一字节内容

位描述描述初始状态RESERVED[0]保留0NO LAZYCLOCK[1]1 = CLKOUT不会切换到lazyclock0 = CLKOUT在Suspend脚变高后切换到lazyclock总线复位不改变1CLOCK RUNNING[2]1 = 内部时钟和PLL即使在挂起状态下仍然运行0 = 不需要时,内部时钟、晶振和PLL停止运行总线复位不改变1INTERRUPT MODE[3]1 = 所有错误和NAK都将产生中断请求0 = 只有正确发送接收数据才产生中断请求总线复位不改变1SOFTCONNECT[4]1 = 若Vbus有效,会将上拉电阻连通0 = 上拉电阻被断开总线复位不改变0RESERVED[5]保留0ENDPOINT CONFIGURATION[7:6]00 = 模式0(非同步模式)01 = 模式1(同步输出模式)10 = 模式2(同步输入模式)11 = 模式3(同步输入输出模式)00

 

写第二字节内容

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

 

读中断寄存器

命令:F4H

数据:读2字节

读第一字节内容

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

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

读第二字节内容

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

 

选择端点

命令:00H-05H

数据:可选读1字节

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

读1字节内容

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

 

读最后处理状态寄存器

命令:40H-45H

数据:读1字节

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

读1字节内容

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

 

应答建立

命令:F1H

数据:无

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

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

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

 

发送恢复

命令:F6H

数据:无

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

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

相关资源:使用 PDIUSBD12的 USB 系统固件程序设计
最新回复(0)