(Updating the thread...)
This week I discovered some things.
The words of the GetPortStatus were not being interpreted correctly. Endianess problems and misinterpreted casts from compiler.
Well, now I can enumerate the internal hub and see the PortStatus flowing as it should be.
Below is the dump from my program:
GetDeviceDescriptor: address:0 | size:8 GetDeviceDescriptor: address:2 | size:18 SetFeature PORT_POWER on port 1 SetFeature PORT_POWER on port 2 SetFeature PORT_POWER on port 3 GetConfigurationDescriptor address:2 SetConfiguration 0x1 address:2
GetPortStatus: wPortChange[0001] wPortStatus[0101] (Now it is represented correctly)
ClearFeature C_PORT_CONNECTION on port 2 SetFeature PORT_RESET on port 2 GetPortStatus: wPortChange[0010] wPortStatus[0103]
ClearFeature C_PORT_RESET on port 2 GetPortStatus: wPortChange[0000] wPortStatus[0103] DW1 data: Token:SETUP | EPType:CONTROL | Addr:0 | Endp:0 GetDeviceDescriptor failed
PTD Error: DW3: 5240_0000 => DW1 data: Token:SETUP | EPType:CONTROL | Addr:0 | Endp:0 SetAddress(3) failed
GetDeviceDescriptor: address:3 | size:18 PTD Error: DW3: 5240_0000 => DW1 data: Token:SETUP | EPType:CONTROL | Addr:3 | Endp:0 GetDeviceDescriptor failed
The port gets powered, the hub sees a device at port 2, the port is succesfully reset and enabled, but when I issue a GetDeviceDescriptor or SetAddress, the PTD area returns (H)Halt and X(Transaction error).
What could be missing between the Clear C_PORT_RESET and GetDeviceDescriptor to get the device receiving and answering it?
I'm using an Full-Speed device.
Thanks for the help.