Search code examples
embeddedusbhostbare-metal

Is Data toggling in USB protocol specific to an Endpoint?


I am writing USB as a host, baremetal I am facing some data toggling issues, my question is - is data toggling specific to an Endpoint

What I mean is consider BULK transfer, you got a BULK IN endpoint and a BULK OUT endpoint. Now if I am to read a block, I send the read(10) request to the BULK OUT and then accept the data read on BULK IN.

Now, if i send maybe a write(10) request to BULK OUT endpoint then what would the value for the data toggle be?? Would it be that obtained after the first request to BULK OUT(DATA0->DATA1) or would it be that after accepting the data read from first BULK IN(DATA0->DATA1->DATA0)

PS: I am implementing using the OpenHCI host controller protocol


Solution

  • Yes, data toggling is specific to an endpoint.

    Your BULK IN endpoint and your BULK OUT endpoint will not share data toggles. Instead, there are two separate data toggles, one for each endpoint.