SDPAUTO (Setup Data Pointer Auto Mode) bit

Question: What is the purpose of SDPAUTO (Setup Data Pointer Auto Mode) bit?



To send a block of data using the Setup Data Pointer. The block's starting address is loaded into SUDPTRH:L. The block length must previously have been set; the method for accomplishing this depends on the state of the SDPAUTO bit.

SDPAUTO = 0 (Manual Mode): Used for general purpose block transfers. Firmware writes the block length to EP0BCH:L.

SDPAUTO = 1 (Auto Mode): Used for sending Device, Configuration, String, Device Qualifier, and Other Speed Configuration descriptors only. The block length is automatically read from the length field of the descriptor itself; no explicit loading of EP0BCH:L is necessary.

Writing to SUDPTRL starts the transfer; the EZ-USB automatically sends the entire block, packetizing as necessary.

Note When SDPAUTO = 0, writing to EP0BCH:L only sets the block length; it does not arm the transfer (the transfer is armed by writing to SUDPTRL). Therefore, before performing an EP0 transfer which does not use the Setup Data Pointer (such as, one which is meant to be armed by writing to EP0BCL), SDPAUTO must be set to '1'. For more information refer "Section 15 - Registers" of the EZ-USB technical reference manual in the link