SLAA457B September 2013 – October 2018 MSP430F5500 , MSP430F5501 , MSP430F5502 , MSP430F5503 , MSP430F5504 , MSP430F5505 , MSP430F5506 , MSP430F5507 , MSP430F5508 , MSP430F5509 , MSP430F5510 , MSP430F5513 , MSP430F5514 , MSP430F5515 , MSP430F5517 , MSP430F5519 , MSP430F5521 , MSP430F5522 , MSP430F5524 , MSP430F5525 , MSP430F5526 , MSP430F5527 , MSP430F5528 , MSP430F5529 , MSP430F5630 , MSP430F5631 , MSP430F5632 , MSP430F5633 , MSP430F5634 , MSP430F5635 , MSP430F5636 , MSP430F5637 , MSP430F5638 , MSP430F5658 , MSP430F5659 , MSP430F6630 , MSP430F6631 , MSP430F6632 , MSP430F6633 , MSP430F6634 , MSP430F6635 , MSP430F6636 , MSP430F6637 , MSP430F6638 , MSP430F6658 , MSP430F6659 , MSP430FG6425 , MSP430FG6426 , MSP430FG6625 , MSP430FG6626
The elegance of USB is that users see none of this complexity – it simply does what they need it to.
But developers can have more trouble avoiding this complexity. Compared to UART, SPI, or I2C, layers of protocol are required to give USB its unique capabilities. This means that sending data over USB takes more effort than simply writing a byte to an output buffer. On-chip USB modules offset some of this complexity, but they cannot do all of this; layers of software need to be employed.
Good USB software can insulate the application developer from many of these complexities. But like icebergs, the tips of these concerns can still be seen by the application. How should the device respond when attached or not attached to a host? How should software be written to ensure it keeps flowing even when the host or bus is busy or unreliable? The simplest USB applications might be able to ignore these concerns, but professional applications often cannot.
An industry of middleware and consultants is available to help developers through this process. But, many developers still rely on silicon vendors and the community to provide both software and support.