This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Will a write to SIZE.EPOUT during an active HOST->EPOUT transfer start the next transfer as soon as the first transfer completes?

In other words, is it likely that the EasyDMA that's scheduled after the first HOST->EPOUT completes will copy bytes that have been overwritten by the second transfer?

I'm working on a fix for this and assuming that inadvertent writes to SIZE.EPOUT are the root cause of the corruption.

Thanks,

Kevin

Parents
  • Hi Kevin,

    I do not see exactly how this fits. However, there may be something here. It should be possible to write to SIZE.EPOUT register to accept further OUT traffic (ignoring current endpoint data and state), but that requires some special handling. If you refer to SDK 17.0.2 you can see a relevant section in nrfx_usbd.c line 810 - 825.

    Are you using the SDK driver or writing your own? As you can see from the SDK driver implementation there are quite a few workarounds required so using the provided driver is often better than having to duplicate the work allready done.

    Einar

Reply
  • Hi Kevin,

    I do not see exactly how this fits. However, there may be something here. It should be possible to write to SIZE.EPOUT register to accept further OUT traffic (ignoring current endpoint data and state), but that requires some special handling. If you refer to SDK 17.0.2 you can see a relevant section in nrfx_usbd.c line 810 - 825.

    Are you using the SDK driver or writing your own? As you can see from the SDK driver implementation there are quite a few workarounds required so using the provided driver is often better than having to duplicate the work allready done.

    Einar

Children
Related