打印
[Atmel]

每天跟我读点资料:SAM D21数据手册(241)

[复制链接]
649|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
31.6.2.7管理输出传输

    当一个输出令牌被检测到,并且令牌包的设备地址不和DADD.DADD匹配,这个包将丢弃并且USB模块返回

空闲模式并且等待下一个令牌包。

    如果地址匹配,USB模块检查是否接收的端点数量在地址端点的EPCFG中使能。如果所指地址端点是失能

的,包将丢弃并且USB模块返回空闲模式,等待下一个令牌包。

    当端点是使能的,USB模块就检查地址输出端点的端点配置寄存器(EPCFG)。如果端点类型

(EPCFG.EPTYPE0)没有设到输出,USB模块将返回到空闲并且等待下一个令牌包。

    USB模块然后返回从指定地址端点的描述符中的数据缓冲的地址。并且等待DATA0或DATA1的地址。如果

PID错误或任何其它PID比DATA0或DATA1先检测到,USB模块返回空闲模式并且等下一个令牌包到来。

    如果EPSTATUS.STALLRQ0在EPSTATUS被设置,进入的数据被丢弃。如果端点不是等时性的,一个拖延握手

信号返给主机并且在EPINTFLAG(EPINTFLAG.TRFAIL0)传输拖延Bank 0中断比特置1。

    对一个等时端点,数据从DATA0和DATA1两者都可接收包。对于别的端点类型除了PID还要核对

EPSTATUS.DTGLOUT。如果一个PID不匹配发生,进来的数据被丢弃,一个ACK握手返回到主机。

    如果EPSTATUS.BK0RDY被设置,进入的数据被丢弃,在EPINTFLAG中的传输失败0中断比特和状态比特被置

位。如果端点是非等时的,一个NAK握手返到主机。

    进入的数据写到数据缓冲通过数据缓冲地址(ADDR)所指的地址。如果接收的数据比特超过PCKSIZE.SIZE

所定义的装载的最大数据,剩余的接收的字节被丢弃。包将仍然被检查比特满和CRC错误。如果比特满或CRC

错误在包中被检测到,USB模块返回空闲并且等待下一个令牌包。

    如果端点是等时性的并且在进入的数据中有比特满或CRC错误,接收到的数据字节数量,除了CRC,被写

到PCKSIZE.BYTE_COUNT。最后EPINTFLAG.TRFAIL0和CRC错误在所指地址的端点的设备Bank状态寄存器

(STATUS_BK.CRCERR)被置位。

    如果数据成功,一个ACK握手信号返回到主机如果端点不是等时性的,接收数据的字节数量,除了CRC,

被写到PCKSIZE.BYTE_COUNT。如果接收数据字节数是PCKSIZE.SIZE所指定的最大载入数,CRC数据将不写在数

据缓冲。如果接收的数据字节数是PCKSIZE.SIZE所指定的最大装载数少1,只有第一个CRC数据字节写入到数

据缓冲。如果接收的数据字节数是PCKSIZE.SIZE所指定的最大装载数少2,则两个CRC数据字节都写入到数据

缓冲。

    最后在EPSTATUS为指定地址的输出端点,EPSTATUS.BK0RDY被设置并且在端点是非等时EPSTATUS.DTGLOUT

被切换。在指定端点EPINTFLAG中的传输完成0中断标志(EPINTFLAG.TRCPT0)被设置。





相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6950

帖子

67

粉丝