Hub alimentado por barramento USB - mais de 100 mA por dispositivo?


11

Eu gostaria de fazer uma pergunta bastante específica sobre o gerenciamento de energia USB.

Antes de tudo, descreverei o design do meu dispositivo. É um driver de linha de sinal simétrico com um codec de áudio embutido para o meu sistema de alto-falantes DIY. O dispositivo é dividido internamente em dois blocos majoritariamente independentes: o driver de linha com um MCU de controle e o codec de áudio (PCM2706 da TI). Ambos precisam de conectividade de dados USB (via FT232R para o bloco do driver) e todo o dispositivo deve ser alimentado por barramento. Os dois blocos serão conectados por um chip de hub USB, produzindo uma única conexão USB de ligação ascendente ao PC. Espero que o consumo do estágio do driver seja algo entre 100 e 200 mA (definitivamente mais de uma unidade de carga).

Aí vem o problema: de acordo com a especificação USB, um hub alimentado por barramento pode fornecer apenas uma unidade por porta a jusante enquanto extrai no máximo 5 unidades a partir da montante. Gostaria de saber o que o hub faria se solicitasse duas unidades via FT232 para o estágio do driver. O limite upstream de 5 unidades não será atingido (1 unidade para o hub, 1 unidade para o codec e duas para o driver); portanto, o computador deve estar fisicamente apto a fornecer essa corrente.

Para o chip do hub, visitei http://www.ti.com/lit/ds/symlink/tusb2036.pdf . Existe uma opção do modo de alimentação "agrupado", isso ajudaria? Ou o chip se recusaria a conceder duas unidades ao motorista? E, neste caso, existe alguma solução suja?

Estou ciente do requisito de que dispositivos de alta potência também sejam necessários para extrair no máximo 100 mA durante a enumeração; isso não é um problema, pois o FT232 pode ativar o driver logo após a enumeração. O hub também ativará os estágios de forma independente.

Espero ter afirmado o meu problema suficientemente claro e obrigado pelo seu tempo de antecedência :)

ATUALIZAR:

Eu fiz mais algumas pesquisas sobre o chip TUSB2036. A proteção contra sobrecorrente pode ser desativada pelo pino / OCPROT. O hub então relata ao controlador raiz que não é capaz de detectar sobrecorrente. Há um aviso na folha de dados de que a proteção contra OC é exigida pela especificação USB 2.0 - isso não importa para mim, eu preciso apenas de 1.1 velocidade total. O hub raiz do PC deve fornecer à IMO 500 mAmps para todo o dispositivo. Assim, eu poderia definir o FT232 do driver para exigir apenas 100 mA e o hub nunca saberia se eu teria excedido o limite (respeitando os 500 mA do PC, é claro). Alguém pode dizer se isso poderia funcionar?

Respostas:


3

Meu entendimento do seu projeto é que todo o dispositivo está em uma única PCB, está em um único gabinete e está conectado ao host por um único cabo USB. Você integrou um hub no PCB para permitir que ambos os dispositivos se comuniquem com o PC. A resposta a seguir se baseará nessas suposições, se for feita de vários dispositivos separados conectados por cabos desconectáveis, isso muda as coisas.

Nesse caso, sugiro que você simplesmente configure o hub para enumerar como um dispositivo de alta potência e compartilhe os 500 mA resultantes entre toda a placa. Curiosamente, o esquema de exemplo de portas agrupadas da TI mostra os dispositivos todos conectados juntos, mesmo ao usar o IC de gerenciamento de energia:

insira a descrição da imagem aqui

A linha de alimentação de entrada de 5V (destacada em azul, pois é uma das duas redes em que estamos interessados ​​neste esquema complicado) está conectada a um IC de gerenciamento de energia TPS2041 (uma descrição generosa, é realmente apenas um FET que é desligado quando detecta 500mA de corrente sendo passada). No entanto, cada uma das entradas é colocada em curto, e cada uma das saídas também em curto e, em seguida, distribuída para cada uma das portas a jusante (a rede mostrada em vermelho).

Basicamente, eles estão protegendo a sobrecorrente para todas as seções posteriores em um único IC. Eles não têm como detectar se têm três unidades de baixa potência (100mA), uma única unidade de alta potência ou duas unidades de baixa potência e uma unidade de 300 mA. Todas essas opções são aceitáveis ​​com base neste design de referência. Você escreveu:

De acordo com a especificação USB, um hub alimentado por barramento pode fornecer apenas uma unidade por porta a jusante enquanto extrai no máximo 5 unidades ...

mas, para responder diretamente à sua pergunta, esse design da Texas Instruments (um membro do grupo USB e implementador principal) mostra que você só precisa garantir que a corrente total seja inferior a 5 unidades.


Para resolver seu problema, o estado das regras (extraído do excelente USB em um documento resumido ):

As funções alimentadas por barramento de alta potência extraem toda a sua energia do barramento e não podem extrair mais de uma unidade de carga até que ela tenha sido configurada, após o que pode drenar 5 cargas de unidade (500 mA Máx), desde que solicitado em seu descritor.

Se você pode garantir que o estágio do driver não comece a consumir corrente até que o dispositivo tenha sido configurado (o que pode ser tão simples quanto um atraso no controlador do host), você pode simplesmente conectar tudo. Como todo o circuito está em uma única placa de circuito impresso e não possui portas a jusante acessíveis ao usuário, você provavelmente também pode deixar de fora o TPS2041 e simplesmente projetar o sistema para não exigir mais de 500 mA de corrente em qualquer estado.

Outro benefício da enumeração como dispositivo de alta potência são as especificações aprimoradas da tensão de entrada. Quando você enumera como um dispositivo de baixa energia, o host precisa apenas produzir 4,40 V na porta upstream (que será menor no seu dispositivo devido à resistência do cabo). Quando você enumera como um dispositivo de alta potência, a especificação garante que você obtenha 4,75 V, o que é mais provável que esteja dentro da faixa operacional de qualquer componente de 5V que você possa estar usando.


Obrigado por uma excelente resposta. Mas como configuro o hub dessa maneira? Preciso da EEPROM externa ou apenas amarro o pino / GANGED ao terra (e os outros pinos de configuração de acordo com o esquema que você enviou)?
Ladislav

11
Você precisaria amarrar! GANGED ao chão e! EXTMEM a 3.3V. No entanto, a EEPROM externa pode ser boa: caso contrário, o dispositivo será exibido como 'hub USB genérico' no PC. Como alternativa, você provavelmente poderia emular uma EEPROM com seu microcontrolador integrado (configure uma das interfaces I2C para atuar como escravo). Em seguida, você pode denunciá-lo como um 'driver de sistema de alto-falante e controlador de codec' ou algo assim.
Kevin Vermeer

5

Eu projetei uma placa em torno desse hub.

Na minha aplicação, estava permitindo o acesso a um FT232 e um FT245.

Se tudo estiver em seu próprio PCB, recomendo que você ignore completamente todos os sistemas de proteção contra sobrecorrente inteiros. Afinal, se algo no seu PCB falhar, tudo precisará de trabalho; portanto, tornar o dispositivo capaz de lidar com uma falha parcial é um ponto discutível.

Na minha situação, amarrei o TUSB para solicitar os 500 ma completos e desativar a proteção contra sobrecorrente, e executei tudo diretamente do USB 5.0v. Consegui isso forçando o hub a relatar como autoalimentado para o host upstream.

Eu criei algumas diretorias, sem problemas reais, então parece uma estratégia perfeitamente viável. Também foi usado com vários computadores diferentes, então eu me sentiria bastante confiante ao usá-lo como está.

Obviamente, se isso é para um dispositivo de produção, e não para um projeto pessoal ou um equipamento de teste (que é o que é no meu caso), é um problema totalmente diferente.

insira a descrição da imagem aqui

(Veja a nota no esquema)


Pelo que vale, muitas vezes você pode abusar horrivelmente da maioria das portas USB modernas sem muitos problemas. Muitos deles podem fornecer muito mais energia do que os 500ma para os quais são classificados, sem muitos problemas.
Além disso, a maioria deles (tudo que eu testei, exceto alguns laptops ) fornecerá com prazer os 500ma completos sem que um dispositivo precise enumerar.

No entanto, isso varia de placa-mãe para placa-mãe, dependendo de como o host USB foi projetado. Sua milhagem pode variar.


Sim, eu estive pensando sobre isso, mas como você disse, isso varia de MB para MB. O dispositivo não será produzido em milhares, mas eu preciso que seja o mais interoperável possível, para que "funcione" em qualquer computador. Obrigado de qualquer maneira, observações práticas são igualmente valiosas :).
Ladislav

@Ladislav - Eu acho que não há maneira de evitar a necessidade de ativar e desativar os dispositivos a jusante sem violar as especificações USB pelo menos um pouco.
Connor Wolf

Vale a pena notar que, se você amarrar o dispositivo para relatar como alimentado por barramento, e simplesmente não se incomodar com a comutação de energia, ele poderá funcionar de qualquer maneira. Poderia valer a pena testar. Como alternativa, procure um IC de hub somente USB-1.1.
Connor Wolf

1

Pode estar um pouco sujo: o TUSB2036 permite a seleção de portas a jusante (p3 NPINT1-0 definido como 10). Em seguida, conecte seu dispositivo a duas portas (físicas) para poder desenhar 2 unidades em paralelo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.