TABLE OF CONTENTS Table 1. Current Types of USB . . . 1 Table 2. μPSD USB Family (February 2004). 1 IAP USB Demonstration Program . . . 5 Table 3. USB Demonstration Program Revision History 5 Hardware Design . . . 6 Figure 1. USB Input/Output Design inside the μPSD32xxA 6 Figure 2. Typical USB Connection Circuit for 5V (μPSD32xx) Systems. . . . 6 Possible Frequencies for μPSD with Low-speed USB 7 Table 4. μPSD32xx USB SFR Register Map. 7 Software Design 8 Table 5. List of Header Files . . . . . 8 Table 6. List of C Source Files . . . . 8 USB Communication Flow 8 Figure 3. USB Host/Device Detailed Communication Flow View 9 Endpoints Supported by μPSD32xx 9 Table 7. Supported Endpoints . . . 10 Data Structures and Data-flow . . 10 Table 8. USB Demonstration Program Data Structures . 10 USB Bus Level Interface . 10 Bus Enumeration . 11 Endpoint0 . 12 Endpoint1 (LCD display mirror) . 12 Table 9. Endpoint Packet Byte Function Assignment . 12 USB Setup Packet Handling – Standard Device Requests . 12 USB Requests in the USB Demonstration Program . . . . 13 Table 10. Descriptor Type (the high byte of wValue in the Get_Descriptor request) 13 Table 11. Valid Types of Class Descriptor. . . 13 Get_Descriptor Request . 13 Table 12. Components of a Get_Descriptor Request . . 14 Get_Report Request . . . . 14 Table 13. Components of a Get_Report Request . . . . . 14 SET_Report Request . . . . 14 Table 14. Components of a SET_Report Request . . . . 15 USB Descriptors . 15 Figure 4. USB and HID Descriptor Structure 15 GET_Descriptor Request Servicing Routine 16 Descriptors 16 Example of USB Descriptors for HID Class Devices 17 Table 15. Device Descriptor . . . . . 18 Table 16. Configuration Descriptor 19 Table 17. Interface Descriptor . . . . 19 Table 18. HID Descriptor . . 20 Table 19. Endpoint Descriptor . . . . 20 Table 20. Report Descriptor 21 High Level Interface . . . . 22 HID Level Interface . . . . . 22 SUSPEND Mode and RESUME Mode Handling Mechanism 23 USB Disconnect on Demand Feature . . . . 24 Important Rules when Starting to Design USB Applications with μPSD32xxA . 25 Differences between USB 1.1 Hosts and Some USB 2.0 High-speed Hosts 25 Figure 5. Traffic on USB (μPSD32xxA connected to USB1.1 Host, or to an Intel 82801DBx Type USB 2.0 Host) 25 Figure 6. Traffic on USB (μPSD32xxA connected to an NEC 720100A Type USB 2.0 Host) . . . . 26 USB Interrupt must have the Highest Priority Interrupt Level . 26 Table 21. Description of the IP Bits 27 Table 22. Description of the IPA Bits . 27 Length of USB Interrupt Service Routine . 28 Table 23. Oscillator Frequencies Suitable for Applications with USB . . . . . 28 Figure 7. USB Demonstration Program USB Drivers Immunity versus Length of USB ISR (with respect to Oscillator Frequency)28 Difference between Relative and Absolute Register Usage 28 Table 24. Suggested Assignment of Register Banks . . 30 USB may Generate Spurious Interrupts when the Device is Plugged in . . . 30 μPSD USB IP sometimes Triggers an Interrupt but no Bit of UISTA is Set . 30 μPSD USB IP Generates Interrupts with an Undocumented Flag. . . . . 30 USB State Machine does not Clear the STALL0 Bit when a SETUP Packet is Received . . . . 30 The Number of Data Bytes Received in a Data Packet can be Greater than Eight . . . 31 C Source and Assembler Output can have Different Functionality . . . 31 Question: So How Must I Write My Drivers? . 32 Question: Must I Enable and Service End-of-Packet Interrupt Requests? . 32 Question: Is the Length of USB ISR Limited? . . . . . 32 Limits Set by the Specification: . . . 32 Table 25. Examples of Limits set by USB Standards . . 32 Known limits: . . . 33 Conclusion: 33 Question: My Device with μPSD is not Properly Detected by Windows . . . 33 Figure 8. USB ISR Response Time . 33 Figure 9. USB ISR Response Time - Detail . 34 Problems with Windows98 and Multiple-function USB Devices 34 Symptoms . 34 Cause . . . . 34 Conclusion . 34 Status . . . . 34 More Information 35 Conclusion . . . 36 References . . . 36 APPENDIX A.USBISR 37 APPENDIX B.OnTransmitEP1 39 APPENDIX C.OnSetupPacket 40 APPENDIX D.OnGetDescriptor . . . . . 41 APPENDIX E.ReportDesc . . . 42 APPENDIX F.DeviceDesc . . . 43 APPENDIX G.Language, Manufacture and Product Strings . . . 45 APPENDIX H.High Level Interface . . 47 APPENDIX I. OnReportReceived . . . 48 APPENDIX J.OnUSBSuspend 49 APPENDIX K.ReConnectUSB 50 APPENDIX L.Glossary 51 Table 26. Terms and Abbreviations 51 Revision History . . . 53