We run a regular program of embedded software webinars. On Wednesday 17 October, the topic was USB, with a focus on USB 3. If you missed it, you can see a recording here. We normally run a session by pre-recording the presentation and playing on the day, with me [or whoever] online to answer questions. Sadly, I was otherwise engaged at the time of this session, so I was unable to be present. The session was well attended and there were quite a few questions and I decided that a blog post was a good way to convey a few answers …
Here are the questions – most of them anyway. They are essentially unedited – i.e. exactly as entered by the questioners.
What device (sniffer) do you advice for USB host (not PC) to peripheral device communication debug? (for USB2.0 only and up to USB 3.x)
I am sorry, but I am unable to recommend any specific equipment.
How do you advice to qualify a host or peripheral class driver compliancy? (for instance mass storage)
Compliance is granted by USB IF.
Why 900/150ma on the current limits? Is this a range?
No. Devices are designated low- or high-power and these are the respective current limits.
What’s relationship between Type-C and USB 3.x? Can Type A support USB 3.X?
A standard Type-A connector does not support USB 3. An enhanced, but plug-compatible version was introduced with USB 3.0 – this just added the extra signal lines for SuperSpeed communication. The Type-C connector came along with USB 3.1 and is necessary to take advantage of some of the newer features, like higher charging voltages.
Who charge Logo and ID fee? USB IF?
Is any device supporting both power management and super charge?
I am not sure how this might work. A power managed device is one that is connected to the host, but not used all the time, so its power consumption needs to be managed. A device requiring fast charging is unlikely to fall into that category. Here is an interesting article on fast charging.
The stack – does Mentor have for both Nucleus and some form of Embedded Linux
We have USB 3 for Nucleus. Linux has a stack and drivers etc. and we offer Mentor Embedded Linux.
How does USB 3.0 affect the EMI/EMC aspects in a system ?
I am not an expert in this area. As a humble software engineer, I regard this as a hardware matter. However, to my knowledge, a lot of work was done on cable design to accommodate the higher frequencies. The protocol has provision to avoid a stream of ones [using bit stuffing] to preserve synchronization, but I guess it may have a bearing on EMI/EMC too.
Why is the adoption of USB 3.0 very slow in the industry ?
Do you mean among embedded device developers? I have not seen adoption figures, but USB 3 stacks are readily available and it is fully [universally?] embraced by the desktop computer world.
What is the bandwidth of each USB3.0 device can get if max to 127 device in a same USB bus?
The specified speeds indicate the theoretical maximum data rate on the bus for a given USB version. This will always be reduced because there is protocol overhead. The remaining bandwidth is simply shared between [active] devices, like it would be on any bus. The more devices that are using the same bus, the lower the available bandwidth.
What suggestions do you have on testing a new function? Sniffers, test frameworks, …?
This would depend on how you implemented the USB software interface on the function. If you have used a commercial, certified stack, you just need to write some test code on a host connected to your device. If you have implemented the USB stack yourself or have doubts about its integrity [i.e. it is not validated], a sniffer may be worthwhile.
Since the systems currently have bottlenecks in terms of speed of 5Gb/s, when do you think the industry will be fully able to adopt USB 3.0 ?
Where are you seeing the bottleneck?
Can you talk about how USB 3.x HUB support both Apple devices and Android devices?
I am sorry. I have no in-depth knowledge of these devices’ USB interfaces. Do you have a specific query/concern?
Do you have a deeper USB 3 Lecture? I was hoping to learn a little about the extension from USB2 and also the packet sizes and problems with getting this wrong for the Embedded programmer.
We do not have a more advanced session available at this time. The additional functionality in USB 3.x over USB 2.0 is quite well documented. In many cases, the application programmer simply does not need to know, as it is taken care of by the stack.
Follow up to previous question on testing. Are there frameworks for testing on common OS’s (Windows7, Win10, OSX, Linux, iOS,Android) that will exercise with an without traffic to the new function? What would be considered adequate in testing a new function in terms of traffic for various speeds, hubs, packet types, etc?
There are USB compliance testing suites available on the market. I would think that would be satisfactory.
Is the error correction actual correction or error control with retransmitting bad packets?
It is always referred to as “correction”, but “detection” or “control” would be better terms.
If you have further questions or need more clarification, please contact me by leaving a comment or via email or social media.