As transferências de controle são pequenas transferências utilizadas principalmente para levar pedidos utilizados pelo host para controlar dispositivos, seja obtendo informações sobre eles ou configurando-os. Toda transferência de controle possui pelo menos dois estágios: um estágio Setup e um estágio Status. Algumas, no entanto, podem também conter um estágio Data.
No estágio Setup, o host inicia uma transação “setup” enviando informações sobre o pedido: um pacote “token” identificando a transferência e um pacote de dados contendo dados sobre o pedido, entre eles o número do pedido e em que sentido o estágio Data, se houver, irá ocorrer. Neste caso, este estágio, que consiste de transações “in” e “out” contendo dados, se dará na seqüência. A transferência é encerrada com o estágio Status, no qual há uma transação “status”. Esta transação é iniciada pelo receptor dos dados no estágio Data (ou pelo dispositivo, caso não haja este estágio), e contém um pacote de dados ou um pacote “handshake” indicando se o pedido foi efetuado com sucesso.
Para garantir velocidade neste tipo de transferência, o controlador do host reserva uma porção da banda passante para realizar transferências de controle, podendo utilizar mais banda caso seja possível. Os dispositivos não precisam responder a estes pedidos instantaneamente. No entanto, em intervalos periódicos (500 ms ou menos, dependendo da transferência) o host envia um pacote “token” para verificar se os dados já estão disponíveis, recebendo um pacote “handshake” NAK caso eles não o estejam.
O host também detecta e trata erros em transferências de controle. Se um pacote “handshake” esperado pelo host não é recebido, ele tenta realizar a transação outras duas vezes, alertando o software se houver falha e interrompendo a comunicação com o endpoint até que o problema seja resolvido. Além disso, no fim do estágio de Dados de uma transferência de controle de leitura, o host retorna não somente um “handshake” ACK, mas também um pacote token que dispara o estágio Status. Isto permite ao dispositivo, caso não receba o ACK, tratar o erro interpretando o “token” como permissão para iniciar o estágio Status. Recepções de NAK não são consideradas erro. A detecção de erros também ocorre através do PID dos pacotes de dados, que contém um valor chamado “data toggle”, utilizado para prevenir duplicação e perda de dados se houver diversos pacotes de dados.
A transferênca de controle é o único tipo de transferência que permite comunicação bidirecional, através do Message Pipe.
Top