USB DMA传输错误与同步端点操作详解

需积分: 45 28 下载量 16 浏览量 更新于2024-08-06 收藏 18.87MB PDF 举报
"LPC178x系列微控制器的USB DMA传输机制与同步端点操作" 在LPC178x微控制器中,USB设备的DMA(直接内存访问)传输机制是高效处理数据的关键部分。当涉及到USB通信,尤其是在IN和OUT端点之间传输大量数据时,DMA可以显著减少CPU的介入,提高系统的整体性能。 首先,让我们关注"错误结束"的情况。如果在数据包传输过程中,由于某些原因导致数据未完全传输至DMA缓冲区,DD(DMA描述符)会被写回存储器,其DD_retired位置位,DD_status设置为DataOverrun状态。此时,端点的EOT中断产生,清除USBEpDMASt寄存器的相关位。当再次使用USBEpDMAEn寄存器使能EPxx_DMA_ENABLE时,未完全传输的数据包会从端点缓冲区重新发送,确保数据完整传输。 接下来,我们讨论"No_Packet DD"的情况。在IN传输中,如果系统暂时无数据可发送,可以设置No_Packet DD来响应NDDR中断。通过将DD的Max_packet_size和DMA_buffer_length字段设为0,系统可以在没有实际数据包的情况下清零USBDMARSt中对应端点的DMA请求位。这种状态下,DD退出,状态编码为NormalCompletion。设备将对IN令牌包以NAK信号回应,直到有数据包的DD被设置并由DMA传输至端点缓冲区。 关于同步端点的操作,它们的独特之处在于每个包的长度可能不同,每个同步端点在每帧信息传输时都有一个数据包。设置DMA传输时,软件需将DD的同步端点位设为1,并初始化Isochronous_packetsize_memory_address字段。同步端点的DMA_buffer_length和Present_DMA_count字段以帧数而非字节数表示。 在处理DMA请求时,DMA引擎会提取描述符,如果Isochronous_endpoint位置位,它将从DD的第5个字中提取Isochronous_packetsize_memory_address。数据传输完成后,Present_DMA_count的值会递增。 对于OUT端点,每帧信息传输后,软件将数据包大小写入 Isochronous_packet_size_memory_address 指定的地址,并将该地址值加4。而对于IN端点,只需使用Packet_length字段指定数据包大小,USB设备会在每个帧信息传输时向主机发送指定大小的数据包,传输结束后,Isocronous_packet_size_memory_address的值加4。若Packet_length为0,设备则发送空包。 LPC178x的USB DMA机制提供了灵活且高效的数据处理方式,能够适应不同类型的端点操作,特别是同步端点,保证了实时性和传输的准确性。E2PROM存储器和外部存储器控制器(EMC)虽然未在本次讨论中详述,但它们同样在LPC178x的系统架构中扮演着重要角色,提供了额外的存储解决方案。