USB EHCI: Help with transaction errors - usb

One of our current milestones on our (open source) project at the moment is to complete USB support, and as such we're working hard on drivers at the moment. Our current development focuses on EHCI on both x86 and ARM (OMAP35xx SoC specifically, EHCI-only in the silicon of the board). We have mostly everything running smoothly in a variety of emulators - VMware (free and non-free versions), QEMU, and VirtualBox.
When we do testing on real hardware however, we get absolutely nowhere. The basic routine for device enumeration in our system goes something like this:
Turn on port power (if the option is available) and wait for power to stabilise to the device
Perform a port reset (held for 50 ms) and then wait as long as needed for the reset to complete (while loop)
If the port has a device present, and is enabled, notify the system that a new USB device is available for initialisation.
Send the SET ADDRESS command to assign an address to the device. This is where we run into problems everywhere:
The SETUP transaction for this command completes without error
The zero-length IN transaction (status phase) throws a transaction error, halts the qTD, and disables the port.
Our timing delays are basically the same as Linux's driver (if anything, longer).
According to the USB 2.0 specification, this behaviour is a "Port Error" (section 11.8) but to be completely honest I don't see how to translate its description of a port error into a working solution for our driver. As we are an open source project we also don't have the money to go out and purchase a proper hardware USB protocol analyser to investigate exactly what's going on on the line either.
Has anyone faced a similar problem and knows a solution?

We have identified the cause of this problem has been a timing issue, but in our case the issue was too much of a delay.
By modifying our qTD/QH creation code to create a single QH with multiple linked qTDs associated with it, we've been able to get successful runs on physical hardware.
We also had to use te EHCI 64-bit data structures, which had not been implemented previously.

Related

unexplicaly shutdown problem and SSH unreachable

I make this post because I didn't find the answer (I made some searches with tag Shutdown, Reboot and SSH).
Since fews months, I've got 2 Corals (out of 3) that shutdown unexplicaly and then become unreachable.
When this occur, I'm forced to go the device (the serial connectivity doesn't work either and the fan doesn't works at this time), unplug and then re-plug the power in order to be able to reconnect through SSH.
What the best thing to do ?
Thanks a lot.
I've seen similar behavior with low power. Be sure you are connecting your board to a 2-3 A power supply. A couple indications that this might be your problem are:
Your board is connected to your computer USB power
Your board runs fine until you load it (i.e. start inferencing on the TPU)
That's the first things I would look for.

How to bypass Microsoft .NET Framework Unhandled Exception?

My company recently started installing IO modules to production machines to capture data to our database. To do so we outsourced a 3rd party programmer to create an IO pulling software to draw data from IO module to a database in a collector PC.
The IO pulling software is running on the collector PC and will continue to draw data from machines into its local database for as long as the software is left open. No data will come in if the collector PC is shut down or the software is turned off.
The program works well but there was a bit of an oversight. If a machine gets unplugged or disconnected from the network (connection made via Ethernet cables), an unhandled exception error will appear for the pulling software for that particular machine.
Clearly its due to there being no connection and clicking Continue will solve this problem. But I'm afraid it will affect the quality of the data captured. Also our contract with the programmer who made this expired, so I'm the one who has to fix it.
The program was done in VB and I was thinking of just adding a procedure into the code to automatically bypass this error or at least tell the program to automatically select Continue and move on without human intervention. As I'm new to programming I'm not sure if my approach is even possible. Any ideas?

Form gets stuck/freezes when windows event happens

I took over a GUI which has the purpose to communicate on USB (via a PEAK USB/CAN device) with an Electronic Control Unit. The problem is that, sometimes, when some Windows events take place (take the PC out of the docking station/ take the monitor out of the laptop, sometimes when plugging in a USB mem stick), my GUI (MainForm) gets stuck/ freezes in the background without any possibility to access it with the mouse, keyboard or from the Task Manger (only close it but not bring to front) but it is still working and updating values received from the PEAK system via USB.
Can you help me with this issue, please? Take into account that this project was not started by me I just took over in order to update it's features when the guy left. Can this issue appear due to the PCAN drivers? Can I find a work around?

What would cause a LBC-managed region access to hang?

I'm trying to write a Compact Flash driver for the RouterBoard 800, for FreeBSD, and running into problems. The CF slot is managed by the Local Bus Controller (LBC) of the CPU (MPC8544E), using the User Programmable Machine (UPM) module and any access to the memory region the CF is located at hangs the thread (the CPU can still be interrupted, but the thread never continues). Even dummy accesses, when programming or reading the UPM, hang. Now, the question is, what would cause the thread to hang when accessing the UPM-managed region, even if it's a dummy access, which should not actually assert the bus?
I know the CF card and slot themselves work, because the kernel itself boots from the card, loaded by the RouterBoard boot loader.
For posterity, the mpc8544E (probably most of the mpc85xx series) has the concept of Local Access Windows (LAWs). If an address does not exist in any of the 10 windows created, it's dropped on the floor, with no exception thrown nor garbage data returned. This is true for all address regions, including external RAM.

Change the Process priority of a device driver

I have a specific device driver which is used to do Motion Control over the parallel port on my machine.
I'm told that the issues I'm having are caused by other windows processes taking away it's CPU time.
So i want to change the priority fo the thread for this device driver (Mach3.sys) to realtime.
But I can't find it in the Process list in task manager.
Does anyone know how to get it show up, to alter it's priority in another way, or
if it's run inside another process what exactly that is.
, so that I can alter it's priority.