He leído varias fuentes de documentación diferentes que explican cómo funciona el protocolo ADB asíncrono de Apple. Aunque bastante complicado, tiene cierto sentido de varias repeticiones. Estoy teniendo dificultades para comprender cómo funciona la resolución de colisiones de ADB. Este protocolo es antiguo y ya no se usa, pero tal vez alguien con una mente fresca pueda analizar la documentación mejor que yo.
Primero, durante la resolución de la dirección del dispositivo (enumeración de dispositivos), el administrador de ADB sondea los dispositivos y los dispositivos son responsables de detectar colisiones. Cuando un dispositivo responde, se supone que debe proporcionar una dirección "aleatoria" al Administrador de ADB. No está claro cómo esta dirección aleatoria influye en la resolución de la dirección. Específicamente, esto es lo que dice el administrador de ADB:
El registro 3 de un dispositivo ADB tiene una longitud de 2 bytes e incluye 4 bits en los que se almacena la dirección. Cuando el dispositivo recibe un comando de registro de escucha 3, debe tomar su dirección de este campo de 4 bits. Cuando recibe un comando de talk register 3, sería redundante poner la dirección del dispositivo en ese campo: la dirección del dispositivo ya está determinada únicamente por el hecho de que el dispositivo responde al comando talk register 3, que se envió a un determinado dirección. En su lugar, se debe devolver un valor de 4 bits aleatorio en este campo; esto facilita la detección de colisiones entre dos dispositivos que responden a un registro de conversación 3.
Solo dice "hace que sea más fácil detectar colisiones". No hay más discusión sobre cómo usa esta dirección para determinar una colisión. La nota técnica AN591 de Microchip dice que el dispositivo es responsable, pero aún no está claro:
Cuando un dispositivo reconoce que el Host emitió un "Registro de conversación 3" comando, responde enviando una dirección aleatoria. Durante el traslado de cada celda de bit de la dirección aleatoria se monitorea la línea de señal para el nivel de señal esperado. Si la señal no es la esperada. Hay un conflicto de direcciones. Si la dirección se envía con éxito, el el host responderá con un comando de escucha para ese dispositivo. El comando tendrá una nueva dirección de dispositivo a la que se moverá ese dispositivo. los El dispositivo solo responde a los comandos en la nueva dirección. Si hay un conflicto, donde dos dispositivos tienen la misma dirección predeterminada, y responder al mismo tiempo, el dispositivo que encuentra la línea baja cuando espera que sea alta, deja de transmitir inmediatamente porque tiene determinó que se ha producido una colisión.
Dado que esta es una operación asincrónica, es imposible leer la señal ADB mientras se escribe una señal.
Segundo, se supone que ADB admite hasta 16 dispositivos ya que la dirección del dispositivo es de 4 bits. Sin embargo, durante la resolución del dispositivo, las direcciones $ 8- $ F se utilizan para la resolución de direcciones. Esto significa que puede haber un máximo de 8 dispositivos de una familia de dispositivos específica, no 16? ¿Estoy en lo correcto aquí?