USB·

DAPLink的USB数据发送过程

Hugh

Hugh

109 0

DAP数据发送过程: 1)当USB配置完成后,根据协议DAP主机发来IN事务,表示要从下载器获取数据,若DAP没有数据需要发送,则在数据阶段发送NAK告诉主机数据还没准备好; 2)当DAP有数据需要发送时,在主函数中调用usbd_ep_start_write(DAP_IN_EP, USB_Response[n], USB_RespSize[n]);,作用为:给USB DMA准备好数据以及长度,并使DAP USB设备回复ACK; 3)当主机的下一次IN事务来之后,随后进入中断USBD_IRQHandler中断处理函数,此时主机已经把一部分或者全部数据取走,后续流程会判断数据是否被完全取走; 4)中断函数中,首先将USB设备设置为NAK忙状态,更新下一次发送数据的地址,更新目前发送的总长度等; 5)再判断数据是否发送完成,或者已经到到了期望发送数据长度; 6)如果没有发送完成,设置USBACK继续接收,直到发送完成; 7)如果已经发送完成了,则进入usbd_event_ep_out_complete_handler(); 7)函数中实际调用dap_in_callback(uint8_t ep, uint32_t nbytes); 8)dap_in_callback函数先判读是否还有数据需要发给主机,过程中USB中断一直NAK,如果没数据了就跳过。如果有数据则调用usbd_ep_start_write(DAP_IN_EP, USB_Response[USB_ResponseIndexO], USB_RespSize[USB_ResponseIndexO]);准备好数据,并再允许USB ACK,等待主机发IN事务来取数据; 11)如此循环往复完成DAP数据发送。

整个过程看起来相当复杂,其实一点也不简单。

所属系列

从当前文章继续阅读它所在合集中的前后内容。

零基础入门USB 第 7 / 9 篇
查看合集

本作品集介绍USB基础知识,解析USB通信协议,学习USB工作原理,制作USB设备,编写USB上位机软件。

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人