¿Cómo funciona la resolución de colisiones del ADB de Apple?

1

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.

enlace

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í?

    
pregunta user148298

1 respuesta

0

Está en el segundo párrafo.

  

Debido a que el bus ADB es colector abierto, las colisiones pueden detectarse cuando un dispositivo está tratando de conducir el bus alto y otro dispositivo lo baja. Esto significa que cuando el dispositivo está conduciendo el autobús alto, debe estar vigilando para asegurarse de que el autobús esté realmente alto; Si el bus baja, algún otro dispositivo está enviando al mismo tiempo. Cuando un dispositivo detecta una colisión, debe dejar de transmitir inmediatamente: esto significa que si dos dispositivos chocan, uno de ellos detectará la colisión, mientras que uno no lo hará. Esto ocurre porque un dispositivo solo puede detectar la colisión si está conduciendo el bus alto y otro dispositivo lo hace bajo. El dispositivo que lo baja no tiene forma de saber que hubo una colisión, ya que el bus lo sigue. Como el dispositivo de detección deja de transmitir inmediatamente, el otro dispositivo no detectará la colisión. Por lo tanto, si hay varios dispositivos que transmiten en el bus, solo uno de ellos completará su transmisión sin detectar la colisión, a menos que ocurra la improbabilidad de que más de un dispositivo transmita exactamente los mismos datos con la misma temporización, y ninguno de ellos detecta la colisión.

Colector abierto significa que el dispositivo hace que la tensión del bus disminuya al conducir activamente la corriente a tierra, pero permite que una resistencia la haga alta, por lo tanto, cuando cualquier dispositivo no está ordenando el bus bajo, pero dejándolo en alto, puede monitorear el bus para ver si otro dispositivo lo está utilizando.

Dos dispositivos que tomaron la misma dirección cuando se les ordenó devolver el registro 3 al devolver un número aleatorio en lugar de una dirección (que coincidiría exactamente) tendrán la posibilidad de no estar de acuerdo con el número aleatorio y, por lo tanto, uno de ellos detectará la colisión.

    
respondido por el Jasen

Lea otras preguntas en las etiquetas