# Apple Desktop Bus

L' Apple Desktop Bus (o ADB) és un bus sèrie obsolet usat per a connectar dispositius de baixa velocitat a les computadores. Usat primordialment a la plataforma Apple Macintosh, els equips ADB segueixen estant disponibles però no suportats per la majoria de vegades fabricat per Apple des de 1998. ADB utilitza un connector mini-DIN.

## Història

ADB va ser creat per Steve Wozniak, que havia estat buscant un projecte en el qual treballar des de mitjans de la dècada del 1980. Algú va suggerir que podia crear un nou sistema de connexió per a dispositius com ratolins i teclats, un que només requerís un sol cable daisy chain i és barat de fabricar. Segons explica la història, va marxar durant un mes i va tornar amb el ADB.
El primer sistema que va usar ADB va ser el Apple IIGS el 1986. Posteriorment va ser usat en tots els Apple Macintosh començant amb els Macintosh II i Macintosh SE, fins que va ser reemplaçat pel USB, començant amb el Apple iMac el 1998. ADB també va ser usat en les últimes sèries d'ordinadors NeXT, models que serien coneguts com els «Turbo ABDs».
Cap màquina fabricada en l'actualitat utilitza ADB per a la interconnexió de dispositiu, tot i que fins al febrer de 2005 els PowerBooks i els iBooks seguien emprant ADB internament com a interfície amb el teclat i el touchpad integrats. Actualment aquesta connexió interna ha canviat a USB.

## Especificacions
### Connector

Donada la simplicitat del sistema, no és sorprenent que el cablejat sigui igualment simple. L'únic pin de dades era etiquetat com ADB i s'acompanyava d'un pin d'alimentació a+5 V i un altre de massa. El pin d'alimentació garantia un mínim de 500 mA, i requeria que els dispositius no usessin més de 100 mA cadascun. Però, curiosament el cable ADB també incloïa el pin PSW que estava directament connectat a l'alimentació de l'ordinador. Això es va incloure per permetre que una tecla del teclat s'encengués l'ordinador sense necessitat que el programari ADB interpretés el senyal. Els cables ADB usen connectors mini-DIN, el mateix que els cables S-Video.

### Comunicació

El sistema ADB es basa en el fet que els dispositius tinguin la capacitat de decodificar un nombre simple (la seva adreça ) i de guardar una petita quantitat de dades (els seus registres ). Utilitza un únic pin per a les dades, fent que sigui un dels busos menys cars de la història: el maquinari ADB és tan barat que el connector sempre resulta més car.
Tot el trànsit del bus és gestionat per l'ordinador, que envia ordres per a llegir o escriure dades: no es permet als dispositius utilitzar el bus a menys que l'ordinador faci primer una petició. Aquestes peticions prenen la forma de cadenes d'un sol byte. Els quatre bits alts contenen l'adreça (l'identificador d'un dispositiu a la cadena), permetent així fins a 16 dispositius per bus. Els següents dos bits especifiquen un dels quatre ordres possibles i els dos bits més baixos indiquen un dels quatre registres del dispositiu. Les comandes eren:
* Talk ('parlar') - envia els continguts d'un registre al computador
* Listen ('escoltar') - estableix el registre al valor que segueix
* Flush ('netejar') - neteja el contingut del registre
* Reset ('reiniciar') - ordena a tots els dispositius del bus que es reiniciïn
Per exemple, si el ratolí tenia la direcció $ D , l'ordinador enviaria periòdicament un missatge al bus amb el següent contingut:
    1101 11 2000
Això diu que el dispositiu $ D ( 1101 ) ha de parlar ( 11 ) i tornar el contingut del registre zero ( 00 ). Els registres podien contenir entre dues i vuit bytes. El registre zero era normalment el canal de comunicació primari. Els registres 01:02 estaven sense definir, i es destinaven habitualment a permetre que els tercers desenvolupadors s'emmagatzemaran informació de configuració. El registre tres sempre contenien la informació d'identificació del dispositiu.
Les adreces i enumeració dels dispositius s'establien a valors per defectes durant un reinici. Per exemple, tots els teclats s'establien a $ 2 i tots els ratolins a $ 3 . Quan l'ordinador era encès per veure primera el controlador de dispositiu ADB enviava ordres talk a cadascuna d'aquestes adreces per defecte conegudes per llegir el contingut del registre tres. Si no es rebia resposta d'una direcció concreta, l'ordinador la marcava com morta i no molestava a fer polling més endavant.
Si un dispositiu responia, ho feia dient que es traslladava a una adreça nova més alta seleccionada aleatòriament. L'ordinador responia llavors enviant un altre ordre a aquesta nova adreça, demanant al dispositiu que es traslladés a una altra adreça nova. Un cop es completava això el dispositiu era marcat com viu i el sistema li faria polling en el futur.
Encara que estrany, era possible que el bus ADB tingués més d'un dispositiu d'aquest tipus connectat, per exemple dos tauletes gràfiques o motxilles de protecció. En aquest cas, quan es preguntava pels dispositius en aquesta direcció per defecte, tots dos responien i es produïa una col·lisió. Per evitar aquest problema els dispositius incorporaven un petit retard. Després de rebre un missatge de l'ordinador, els dispositius esperaven un petit temps aleatori abans de respondre, i després aquest ho feia només després de «tafanejar" en el bus per assegurar-se que no estava ocupat. Si es connectaven dues motxilla, quan el bus fora inicialitzat una d'elles seria la primera a respondre i l'altra advertiria que el bus estava ocupat i no ho faria. L'ordinador enviaria llavors un altre missatge a l'adreça original, però com que el primer es va traslladar a una nova direcció, només l'altre respondria. Aquest procés continuava fins que ningú respongués a les peticions a l'adreça original, el que significava que no quedaven dispositius d'aquest tipus per enumerar. D'aquesta manera l'ordinador elaborava la seva llista de dispositius.
La velocitat del bus podia arribar a teòricament els 125 Kbit/s. No obstant això la velocitat de comunicació era com molt la meitat pel fet que només hi havia un pin compartit entre l'ordinador i els dispositius. En l'ús real la velocitat era molt menor, ja que el sistema depenia de la velocitat a la que l'ordinador sondejava ( poll ) el bus. El sistema operatiu Mac OS no resultava particularment adequat per a aquesta tasca, i el bus sovint s'encallava a uns 10 kbit/s.
Un altre problema era que encara que el bus realitzava una ordre reset , els dispositius no tenien un mitjà d'indicar al bus algun canvi d'estat. Això significava que si el bus canviava, per exemple al connectar un nou dispositiu, no hi havia manera de que l'ordinador ho sabés. Així, el sistema no suportava el hot swap ping , encara que això podria haver estat implementat molt fàcilment usant el pin PSW.

## Problemes

No era segur connectar un dispositiu quan el sistema estava encés (a diferència d'USB en els ordinadors moderns), el que s'intentava amb freqüència si el ratolí es desconnectava. L'avaria que això ocasionava de vegades suposava reemplaçar un fusible soldat a la placa base, que en els serveis tècnics oficials suposava una factura elevada. Una alternativa simple per evitar aquest problema era soldar un fusible en paral·lel al de la placa base (que, si es feia bé, ni tan sols exigia soldadura).
El connector DIN no estava dissenyat per a més de 400 insercions, sent fàcil doblegar un pin si no es connectava amb compte.

## Referències

* ↑ "ADB - The Untold Story: Space Aliens Ate My Mouse", "Licensing" section; see also this page's Patent section.
* ↑ Oppenheimer, Alan «Còpia arxivada». MacWorld Expo, 1-2004. Arxivat de l'original el 16 d’octubre 2006 [Consulta: 28 desembre 2020]. «Còpia arxivada». Arxivat de l'original el 2006-10-16. [Consulta: 28 desembre 2020].
* ↑ "One cable to rule them all: a look at Apple's retired connectors through the years"
* ↑ "NetBSD/next68k: Frequently Asked Questions "

## Vegeu també

* I²C

## Enllaços externs

* Documentació tècnica sobre el bus ADB en el lloc web de Apple (anglès)