Tengo muchos dispositivos USB conectados a mi MacBook Pro de 15 pulgadas Mid 2012 por mi trabajo.
Este MacBook Pro tiene 2 puertos USB externos. En uno es para un ventilador del portátil, y el otro es un Hub USB que tiene otro hub USB y el hub de mi monitor Dell U2713HM.
Los dispositivos aparentemente no funcionarían de forma aleatoria o serían... ¿detectados a medias? Aparecían en la lista de dispositivos USB pero no funcionaban correctamente, aunque sí lo habían hecho en el pasado. Al pasarlos a una instalación de Windows en Parallels, los resultados eran también a medias. A menudo el dispositivo era detectado a nivel de USB pero fallaba a nivel de software. Al conectarlos a un portátil dedicado a Windows, se comprobaba que funcionaban bien.
He instalado los controladores de registro de IOUSBFamily. USB Prober.app con el detalle establecido en 5 mostró lo siguiente en el registro al conectar un dispositivo:
Sep 2 10:52:41.274 [5] AppleUSBHub[0xffffff8026d7f800]::ProcessStatusChanged found (0x 2) in statusChangedBitmap
Sep 2 10:52:41.274 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(+) now (1)
Sep 2 10:52:41.274 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler: port 1 obtained runLock (_hasExternalConnector: 0)
Sep 2 10:52:41.274 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler: calling GetPortStatus for port 1
Sep 2 10:52:41.274 [5] AppleUSBHub[0xffffff8026d7f800]::powerChangeDone - spawning _checkForActivePortsThread
Sep 2 10:52:41.274 [4] AppleUSBHub[0xffffff8026d7f800]::CheckForActivePorts - this hub does not allow low power, so abandoning
Sep 2 10:52:41.274 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - Hub 0x14221000 port 1 - Initial status(0x0101)/change(0x0001)
Sep 2 10:52:41.274 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - change 6 clearing feature 0x10 (kUSBHubPortConnectionChangeFeature)
Sep 2 10:52:41.274 [5] AppleUSBHub[0xffffff8026d7f800]::ClearPortFeature port/feature (10010) - clearing
Sep 2 10:52:41.274 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - status(0x0101) - change(0x0000) - before call to (6) handler function
Sep 2 10:52:41.274 [5] AppleUSBHubPort[0xffffff802703d200]::DefaultConnectionChangeHandler - handling port 1 changes (0x0101,0x0000)
Sep 2 10:52:41.274 [3] AppleUSBHubPort[0xffffff802703d200]::DefaultConnectionChangeHandler port (1) - previous enumeration failed - sleeping 300 ms
Sep 2 10:52:41.575 [5] AppleUSBHubPort[0xffffff802703d200]::DefaultConnectionChangeHandler - port 1 - no existing device found on port
Sep 2 10:52:41.575 [4] AppleUSBHubPort[0xffffff802703d200]::DefaultConnectionChangeHandler port 1 status(0x0101)/change(0x0000) - no error from GetPortStatus
Sep 2 10:52:41.575 [5] AppleUSBHubPort[0xffffff802703d200]::DefaultConnectionChangeHandler - port 1 - device detected, calling AddDevice
Sep 2 10:52:41.575 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(+) now (2)
Sep 2 10:52:41.575 [5] AppleUSBHubPort[0xffffff802703d200]::DefaultConnectionChangeHandler - port 1 done, ending (_portPMState: 3)
Sep 2 10:52:41.575 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - err (0) on return from call to (6) handler function
Sep 2 10:52:41.575 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - err = 0 - done, releasing _runLock
Sep 2 10:52:41.575 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(-) now (1)
Sep 2 10:52:41.575 [3] AppleUSBHub[0xffffff8026d7f800]::DecrementOutstandingIO(1018), outstandingIO(0), _interruptReadPending(false) - rearming read
Sep 2 10:52:41.575 [5] AppleUSBHub[0xffffff8026d7f800]::DecrementOutstandingIO(1018) - spawning _checkForActivePortsThread
Sep 2 10:52:41.575 [5] ***** AppleUSBHubPort[0xffffff802703d200]::AddDevice - port 1 on hub at 0x14221000 - start (options: 0x00000000)
Sep 2 10:52:41.575 [4] AppleUSBHub[0xffffff8026d7f800]::CheckForActivePorts - this hub does not allow low power, so abandoning
Sep 2 10:52:41.575 [5] ***** AppleUSBHubPort[0xffffff802703d200]::AddDevice - port 1 on hub at 0x14221000 - bus 0xffffff81a6082000 - acquiring dev zero lock
Sep 2 10:52:41.575 [5] AppleUSBXHCI[0xffffff81a6082000]::ProtectedDevZeroLock - about to obtain device zero lock
Sep 2 10:52:41.575 [5] AppleUSBXHCI[0xffffff81a6082000]::ProtectedDevZeroLock - not already locked - obtaining
Sep 2 10:52:41.575 [5] AppleUSBXHCI[0xffffff81a6082000]::ProtectedDevZeroLock - setting _devZeroLock to true
Sep 2 10:52:41.575 [5] AppleUSBXHCI[0xffffff81a6082000]::AcquireDeviceZero Acquired devZeroLock
Sep 2 10:52:41.575 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(+) now (2)
Sep 2 10:52:41.576 [5] ***** AppleUSBHubPort[0xffffff802703d200]::AddDevice - port 1 on hub at 0x14221000 - resetting port
Sep 2 10:52:41.576 [5] AppleUSBHub[0xffffff8026d7f800]::SetPortFeature port/feature (0x10004) - setting
Sep 2 10:52:41.594 [5] AppleUSBHub[0xffffff8026d7f800]::ProcessStatusChanged found (0x 2) in statusChangedBitmap
Sep 2 10:52:41.594 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(+) now (3)
Sep 2 10:52:41.594 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler: port 1 obtained runLock (_hasExternalConnector: 0)
Sep 2 10:52:41.594 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler: delaying 100ms before first GetPortStatus after a reset of port 1
Sep 2 10:52:41.595 [5] ***** AppleUSBHubPort[0xffffff802703d200]::AddDevice - port 1 on hub at 0x14221000 - (err = 0) done - (0x0503, 0x0010), returning
Sep 2 10:52:41.595 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(-) now (2)
Sep 2 10:52:41.694 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler: calling GetPortStatus for port 1
Sep 2 10:52:41.694 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - Hub 0x14221000 port 1 - Initial status(0x0503)/change(0x0010)
Sep 2 10:52:41.694 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - change 2 clearing feature 0x14 (kUSBHubPortResetChangeFeature)
Sep 2 10:52:41.694 [5] AppleUSBHub[0xffffff8026d7f800]::ClearPortFeature port/feature (10014) - clearing
Sep 2 10:52:41.695 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - status(0x0503) - change(0x0000) - before call to (2) handler function
Sep 2 10:52:41.695 [5] ***** AppleUSBHubPort[0xffffff802703d200]::AddDeviceResetChangeHandler - port 1 on hub at 0x14221000 - start - status(0x0503) change (0x0000)
Sep 2 10:52:41.695 [3] **1** AppleUSBHubPort[0xffffff802703d200]::AddDeviceResetChangeHandler - port 1 on hub at 0x14221000 - new delay 300
Sep 2 10:52:41.695 [5] **1** AppleUSBHubPort[0xffffff802703d200]::AddDeviceResetChangeHandler - port 1 on hub at 0x14221000 - delaying 300 ms
Sep 2 10:52:41.995 [5] **2** AppleUSBHubPort[0xffffff802703d200]::AddDeviceResetChangeHandler - port 1 on hub at 0x14221000 - found high speed device
Sep 2 10:52:41.995 [5] **2** AppleUSBHubPort[0xffffff802703d200]::AddDeviceResetChangeHandler - port 1 on hub at 0x14221000 - configuring dev zero
Sep 2 10:52:41.995 [5] AppleUSBHubPort[0xffffff81a6082000]::DoConfigureDeviceZero - maxPacketSize: 64, speed: 2, hub: 10, port: 1
Sep 2 10:52:41.995 [3] AppleUSBXHCI[0xffffff81a6082000]::UIM **** - ConfigureDeviceZero maxPacketSize:64, speed:2, hub:10, adj port:1
Sep 2 10:52:41.995 [5] AppleUSBXHCI[0xffffff81a6082000]::ConfigureDeviceZero, new method called with speed : 2, hub:10, port:1
Sep 2 10:52:41.995 [5] AppleUSBXHCI[0xffffff81a6082000]::UpdateTopology, high speed ancestor hub:0, port:0
Sep 2 10:52:41.995 [5] AppleUSBXHCI[0xffffff81a6082000]::DoCreateEP, high speed ancestor hub:0, port:0, address: 0, speed: 2, maxStreams: 0, maxBurst: 0, mult: 0 EP: (0,0,64,0)
Sep 2 10:52:41.995 [1] AppleUSBXHCI[0xffffff81a6082000]::TestConfiguredEpCount (kIOUSBEndpointCountExceeded) - sub 2 _configuredEndpointCount, was:(97)
Sep 2 10:52:41.995 [1] AppleUSBXHCI[0xffffff81a6082000]::DoCreateEP - Received a kIOUSBEndpointCountExceeded, Address: 0, Speed: 2: Endpoint: (0x0, 0x0, 0x40, 0x0)
Sep 2 10:52:41.995 [3] AppleUSBXHCI[0xffffff81a6082000]::ConfigureDeviceZero (maxPacketSize: 64, Speed: 2) returned 0xe0004046 (Controller does not support more endpoints)
Sep 2 10:52:41.995 [3] ASM107x[0xffffff802703dc00] DisplayUserNotification type 0x1000007
Sep 2 10:52:41.995 [3] ASM107x[0xffffff802703dc00]::DisplayUserNotificationForDevice notificationType: 7, port 1
Sep 2 10:52:41.995 [5] **3** AppleUSBHubPort[0xffffff802703d200]::AddDeviceResetChangeHandler - port 1 on hub at 0x14221000 - failed to create device zero, detach'ing device
Sep 2 10:52:41.995 [5] AppleUSBHub[0xffffff8026d7f800]::ClearPortFeature port/feature (10001) - clearing
Sep 2 10:52:41.995 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(-) now (1)
Sep 2 10:52:41.995 [3] AppleUSBXHCI[0xffffff81a6082000]::UIMDeleteEndpoint - fn:0, ep:0, dir:3
Sep 2 10:52:41.995 [3] AppleUSBXHCI[0xffffff81a6082000]::GetSlotID - functionNumber disabled: 0
Sep 2 10:52:41.995 [5] AppleUSBXHCI[0xffffff81a6082000]::ProtectedDevZeroLock - about to release device zero lock
Sep 2 10:52:41.995 [5] AppleUSBXHCI[0xffffff81a6082000]::ProtectedDevZeroLock - releasing lock
Sep 2 10:52:41.995 [5] AppleUSBXHCI[0xffffff81a6082000]::ProtectedDevZeroLock - wakeup done
Sep 2 10:52:41.995 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - err (0) on return from call to (2) handler function
Sep 2 10:52:41.995 [5] AppleUSBHubPort[0xffffff802703d200]::PortStatusChangedHandler - port 1 - err = 0 - done, releasing _runLock
Sep 2 10:52:41.995 [3] AppleUSBHub[0xffffff8026d7f800]::ChangeRaisedPowerState(-) now (0)
Sep 2 10:52:41.995 [3] AppleUSBHub[0xffffff8026d7f800]::DecrementOutstandingIO(1023), outstandingIO(0), _interruptReadPending(false) - rearming read
Sep 2 10:52:41.995 [5] AppleUSBHub[0xffffff8026d7f800]::powerChangeDone - spawning _checkForActivePortsThread
Sep 2 10:52:41.995 [4] AppleUSBHub[0xffffff8026d7f800]::CheckForActivePorts - this hub does not allow low power, so abandoning
El error está en estas líneas:
Sep 2 10:52:41.995 [1] AppleUSBXHCI[0xffffff81a6082000]::TestConfiguredEpCount (kIOUSBEndpointCountExceeded) - sub 2 _configuredEndpointCount, was:(97)
Sep 2 10:52:41.995 [1] AppleUSBXHCI[0xffffff81a6082000]::DoCreateEP - Received a kIOUSBEndpointCountExceeded, Address: 0, Speed: 2: Endpoint: (0x0, 0x0, 0x40, 0x0)
Fuente de IOUSBControllerV2.cpp que arroja ese error. Lamentablemente, ese archivo es bastante viejo, ya que Apple ya no publica esa fuente. La fuente es para 10.8.4 y yo estoy en 10.9.4.
El error se define en USB.h como #define kIOUSBEndpointCountExceeded // 0xe0004046 The endpoint was not created because the controller cannot support more endpoints
pero desgraciadamente eso es un detalle igual de pequeño.
El nombre del error sugiere que se trata de un límite de dispositivos excedido (dur), así que desenchufé un montón de dispositivos y tras enchufar sólo uno se detectó y funcionó bien.
Mis preguntas son:
- ¿Dónde está la limitación?
- ¿Está documentado?
- ¿Hay alguna solución?