fix USB transfer
this ASFv4 USB library change fixes USB transfer. two transfer-size issues existed: - on multi-packet transfer if the last packet was less than the USB transfer packet size, the packet would be received but not acknowledged - during normal transfer the packet size of a previous packet set the size of the current packet, ignoring the actual transfer size transfer with a combination of partial or full USB single packet, USB multi-packet, max transfer, and control endpoint sizes was successfully tested (in bytes): 4, 32, 64, 128, 129, 512, 516, 544, 576, 640, 641, 1024, 1028 Change-Id: Ic4e64168e865362e12e0b76386f964895b8b6c20master
parent
26037ab23b
commit
f278032e9f
|
@ -1135,6 +1135,7 @@ static void _usb_d_dev_out_next(struct _usb_d_dev_ep *ept, bool isr)
|
|||
/* Short packet. */
|
||||
ept->flags.bits.need_zlp = 0;
|
||||
ept->trans_count += last_trans;
|
||||
_usbd_ep_set_out_trans(epn, 0, ept->size, 0);
|
||||
} else {
|
||||
/* Full packets. */
|
||||
ept->trans_count += trans_size;
|
||||
|
@ -1154,9 +1155,6 @@ static void _usb_d_dev_out_next(struct _usb_d_dev_ep *ept, bool isr)
|
|||
if (trans_next > ept->size) {
|
||||
if (trans_next > USB_D_DEV_TRANS_MAX) {
|
||||
trans_next = USB_D_DEV_TRANS_MAX;
|
||||
} else {
|
||||
/* Must expect multiple of ep size. */
|
||||
trans_next -= trans_next & size_mask;
|
||||
}
|
||||
} else if (trans_next < ept->size) {
|
||||
/* Last un-aligned packet should be cached. */
|
||||
|
|
Loading…
Reference in New Issue