Qualidade de serviço RS232 vs USB CDC / as mensagens devem conter uma soma de verificação?

13

O USB tem uma garantia de qualidade de serviço para os dados enviados entre o meu dispositivo USB-CDC e o host USB?

Eu sei que com o RS232 tradicional em uma situação barulhenta (por exemplo, porta de diagnóstico automotivo) os bits ruins acontecem com frequência suficiente para que as somas de verificação sejam importantes para o protocolo. Se eu fosse adaptar esse protocolo a um aplicativo USB puro, posso omitir com segurança a soma de verificação e as rotinas de tratamento de erros relacionadas?

Para referência, estou usando um AT91SAM7S256 com a estrutura USB-CDC fornecida pela Atmel.

Atualizar:

Eu exercitei meu Google-Fu um pouco mais sobre esse problema e encontrei este artigo que descreve uma subclasse CDC para emulação Ethernet e declara:

Pelo cabo USB, os quadros Ethernet encapsulados fluem começando com o endereço MAC de destino e terminando imediatamente antes da soma de verificação do quadro. (A soma de verificação do quadro não é necessária, pois o USB é um transporte confiável.)

Eles podem significar que o USB-CDC é um transporte confiável, e não o USB em geral, uma vez que algumas classes de dispositivos destinadas a dados intermitentes de alta produtividade (webcam?) Podem não querer preencher buffers se um programa não puder pesquisar dados com rapidez suficiente.

Eu ainda gostaria de uma confirmação adicional sobre isso.

Steven T. Snyder
fonte

Respostas:

12

Isso depende de quais tipos de pontos de extremidade seu dispositivo está usando.

Um resumo rápido retirado do USB em poucas palavras :

Transferências de interrupção

  • Latência garantida
  • Tubo de fluxo - unidirecional
  • Detecção de erros e nova tentativa no próximo período.

Transferências isócronas

  • Transferências isócronas fornecem acesso garantido à largura de banda USB.
  • Latência limitada.
  • Tubo de fluxo - unidirecional
  • Detecção de erro via CRC, mas nenhuma nova tentativa ou garantia de entrega.
  • Somente modos de velocidade total e alta.
  • Sem alternância de dados.

Transferências em massa

  • Usado para transferir grandes dados estourados.
  • Detecção de erros via CRC, com garantia de entrega.
  • Nenhuma garantia de largura de banda ou latência mínima.
  • Fluxo de Tubo - Unidirecional Apenas nos modos de velocidade total e alta.

Para responder adequadamente à sua pergunta, você precisará descobrir quais modos de transferência estão sendo usados ​​abaixo para implementar o dispositivo CDC. A especificação da classe de dispositivo CDC pode ser um ponto de partida. Se você tiver um código fonte para o dispositivo, isso seria ainda melhor. Como não estou familiarizado com a classe CDC, não posso comentar sobre seus padrões de implementação, mas, à primeira vista, em alguns documentos e no google, parece que há alguma flexibilidade na implementação.

EDITAR

Depois de ler o documento Atmel que você vinculou, parece que é com você!

O Abstract Control Model requer duas interfaces, uma Interface de classe de comunicação e uma Interface de classe de dados. Cada um deles deve ter dois pontos de extremidade associados. O primeiro deve ter um terminal dedicado ao gerenciamento de dispositivos (terminal de controle padrão 0) e um para notificação de eventos (terminal de interrupção adicional).

A interface da classe de dados precisa de dois pontos de extremidade pelos quais transportar dados de e para o host. Dependendo do aplicativo, esses pontos de extremidade podem ser em massa ou isócrono. No caso de um conversor USB para serial, o uso de terminais em massa é provavelmente mais apropriado, pois a confiabilidade da transmissão é importante e as transferências de dados não são críticas em termos de tempo.

Portanto, na sua implementação, use transferências em massa na interface da Classe de Dados para garantir um transporte confiável.

Jon L
fonte
Ótima resposta. Esse resumo dos tipos de terminais é muito útil. O código Atmel para o projeto serial do CDC descrito no pdf vinculado é configurado para atuar como um adaptador USB para serial, portanto, ele já está configurado para usar pontos de extremidade em massa. Excelente!
Steven T. Snyder
3

O USB pode ser um protocolo relativamente confiável, mas nem todos os dispositivos e drivers que usam o CDC são confiáveis. Eu já vi alguns dispositivos diferentes que tinham o hábito bastante irritante de ignorar bytes de dados enviados pelo PC. Observar os dados em um escopo mostrou que o problema não estava no excesso do dispositivo receptor - alguns bytes de dados simplesmente desapareceram (eu consegui capturar pacotes inteiros no escopo; o cabeçalho e o rodapé estavam presentes, mas alguns dos bytes entre eles estavam ausentes). Não tenho certeza do que exatamente deu errado para causar esse comportamento, mas tentar enviar dados muito rápido parecia ser um fator que contribui.

supercat
fonte