Por que FTDI e não AVR com controlador USB embutido?

8

Eu fiz um programa simples no Visual C # que se comunica com o AVR via chip FT232RL.

PC <-> FTDI <-> MCU.

Estou usando o FTD2XX_NET.dll para acessar diretamente o dispositivo USB.

Gostaria de saber, qual é a diferença entre um par de FTDI-AVR e um único AVR com controlador USB embutido? Eu acho que deve haver alguma diferença na velocidade da comunicação. O que mais é diferente?

MrBit
fonte
2
Com o FTDI, o programador do AVR não precisa implementar uma pilha USB, mas apenas o suporte ao UART. Há muitas outras diferenças que eu não sei, eu tenho certeza, é por isso que eu não vou responder, mas sim apenas comentando
Funkyguy
1
Além disso, os FTDIs vêm com drivers assinados para a maioria das plataformas e VID e PIDs codificados válidos, para que você não precise pagar pelos endereços 65536 quando precisar de apenas um.
venny
Obrigado pelos comentários. Outra diferença sobre o desempenho? Qual o melhor caminho para a comunicação com PC e MCU? Para ser sincero, o FTDI é MUITO mais fácil com os controladores USB embutidos.
MrBit
No software para PC com modo FTDI, existem funções difíceis muito baixas. E eu não sei se um esforço com pena AVR única lo
MrBit
1
FTDI é serial idiota. A MCU pode pré-processar, canais laterais ativar, UMS de apoio, etc.
Ignacio Vazquez-Abrams

Respostas:

11

Existem algumas razões, mas elas são, pelo menos para a maioria das pessoas, bastante nicho.

As razões que eu vejo e experimentei

  • A escolha de AVRs habilitados para USB é bastante limitada, especialmente a família TINY. Se, por algum motivo, for necessário um AVR que não possua uma combinação de USB e outro periférico, essa é uma opção fácil. Um exemplo que vem à mente são os AVRs habilitados para PLL.
  • Mesmo que o periférico USB seja implementado em hardware, você ainda precisará colocar uma pilha USB no firmware. Isso consome muitos recursos (por exemplo, LUFA requer pelo menos 6kB de flash e 1,5kB de RAM para uma implementação completa do CDC, e esta é uma das bibliotecas mais leves)
  • As interrupções e os eventos do barramento USB consomem recursos que podem interferir no firmware crítico de tempo. Por exemplo: medições ADC de alta velocidade podem ficar muito confusas quando uma tarefa USB é interrompida.
  • Nem todas as implementações de bibliotecas USB funcionam tão bem com todos os AVRs com USB. Por exemplo: carregadores de inicialização USB usando LUFA não funcionam com dispositivos XMEGA.
  • O FTDI usa drivers assinados que são instalados automaticamente usando o Windows Update, enquanto muitas bibliotecas USB, por exemplo ASF e LUFA, não. Isso torna a implantação para usuários finais mais complicada.
  • Algumas implementações têm desempenho inferior, por exemplo, o FT2232H é capaz de conectar um FIFO a USB a 8MiB / s, o que é impossível de ser feito com um AVR.
  • Muitos projetos não têm controle total sobre hardware e software, por exemplo, as impressoras 3D possuem projetos de hardware e firmware completamente separados. Para manter o nível de interoperabilidade o mais alto possível, as funções USB e microcontrolador são separadas.

No entanto, com bibliotecas USB prontas para uso, o custo significativo das pontes USB FTDI (geralmente custam mais do que os AVRs de ponta) e sem penalidade de desempenho na maioria dos aplicativos, é muito difícil justificar os chips FTDI hoje em dia se você tenha controle total sobre hardware e firmware.

user36129
fonte
2
Mesmo que um projeto esteja em um microcontrolador que tenha interface USB integrada e o plano seja usá-lo, ainda vale a pena ter um cabeçalho para acessar os pinos UART, pois você pode obter uma saída de depuração útil disso enquanto tenta obter o USB código para trabalhar.
Chris Stratton
4
O comentário de @ ChrisStratton aponta outra questão: os dispositivos USB são uma ordem de magnitude mais difícil de depurar do que o simples serial UART. Por isso, acelera o desenvolvimento e remove as incógnitas para deixar a extremidade USB das coisas no chip FDTI funcional e depurado. Obviamente, a economia muda com a quantidade, mas para pequenas produções com pressão de tempo, a solução FDTI geralmente é melhor.
markrages
Uau, o seu tl;drparágrafo certeza foi uma surpresa fim ... Você lixo comentada / pilhas de série USB só de firmware (embora com pontos extremamente válidos), e, em seguida, BAM ... "só um idiota iria usar FTDI". Hilário. Amo isso!
Alex Gray
@alexgray: Uau, você está realmente falando em extremos por lá. Eu não acho que estava falando besteira; esses são apenas os tipos típicos de objetivos que as pessoas têm no design de produtos. Eu lidei com projetos que otimizaram praticamente todas as combinações desses pontos. Para projetos de hobby, pode haver uma abordagem de Trump vs. Sanders para resolver 'eu devo ou não tomar uma ponte FTDI RS-232?', Mas na engenharia real, você deve realmente considerar objetivamente todos os prós e contras e chegar a uma conclusão. conclusão ótima.
user36129
4

Há vantagens em usar um chip USB separado e permitir que o AVR se comunique através do seu UART.

Uma pilha USB precisa responder à pesquisa do PC host. Isso acontece pelo menos a cada milissegundo. Isso significa que é ainda mais difícil garantir uma resposta em tempo real aos eventos, pois o MCU pode ser interrompido para responder à pesquisa de USB dos hosts.

Quando não há nada para se comunicar ou o MCU quer se concentrar totalmente em uma tarefa em tempo real, ainda precisa responder a alguns eventos de sondagem USB do host, ou o host 'perderá' o dispositivo. Portanto, é difícil ignorar. Um chip USB dedicado, como um FTDI, descarrega essas tarefas do AVR.

Um pequeno problema é que a pilha USB consumirá uma quantidade razoável de memória flash e RAM; portanto, o chip precisa de mais recursos do que um simples AVR.

Além disso, as duas partes podem ser separadas em duas placas; portanto, o USB não é um custo fixo, mas pode ser compartilhado em várias placas.

Por outro lado, o principal benefício do uso de um AVR com um periférico USB e uma pilha USB integrados é que há apenas uma peça para comprar e montar.

Não verifiquei recentemente, mas acredito que os chips FTDI mais recentes forneceram uma taxa de transferência de dados USB mais alta do que o USB do AVR. No entanto, os UARTs do AVR eram tão lentos que um AVR com USB é uma transferência mais rápida do que a combinação de FTDI (ou qualquer interface USB) que se comunica através do UART do AVR por causa do lento AVR UART.

Edit: O FTDI faz outras interfaces além do UART. Por exemplo SPI. Não tenho experiência em usá-los. Alguns AVRs suportam transferência SPI de 9 (talvez 12) megabits. O FTDI é o mestre SPI, o que não é ideal. Se o AVR estiver transmitindo, pode ser bom. Como os FTDI têm amortecedores, mas receber pode ser 'como beber de uma mangueira de incêndio'. AFAIK, você precisará trabalhar no PC host para fazê-lo funcionar.

A transferência de velocidade mais alta pode ser através de uma placa-filha Ethernet de 100mbits, mas eu não vi medições de taxa de transferência.

Estou feliz em usar outros microcontroladores que não o AVR. Então, eu poderia usar algo com um UART rápido e um controlador DMA que poderiam mover caracteres sem o envolvimento da CPU. Se essa é uma abordagem útil, talvez veja o Arduin Due, ou o mbed, o ST mbed é chamado nucelo, que é de baixo custo.

gbulmer
fonte
quanto à taxa de transferência AVR UART, sim, é muito lenta ... então, (para corrigir isso) que maneira diferente existe para fazer a comunicação entre os chips AVR e FTDI? Agora estou em 230,4kbps em uart modo
MrBit
@ user3829694 - Não sei o que você quer dizer. Você está perguntando como ir mais rápido que 230,4kbps? Ou você está dizendo que 230,4kbps é bom para você?
gbulmer
Estou perguntando, se eu quero mais velocidade, o que mais posso fazer? Pensando em FT245 FIFO, pode subir até 1Mbps. Estou tentando criar projetos HID com "monitoramento em tempo real" apenas para coletar dados do avr (com sensores etc.) para o formulário do PC. Mas, com o UART, mesmo na velocidade máxima (230,4kbps), a taxa de transferência do buffer inteiro (256 bytes) leva cerca de 9ms: 230,4kbit = 28,8kByte = 1 / 28,8 = 34.722us por byte * 256byte = 8,88ms / 256byte eu pensei que desta vez não é bom para o monitoramento em tempo real
MrBit
se eu quiser atualizar meu formulário a cada 10-100ms (envio e recebimento de dados a cada 10-100ms), não resta tempo para o AVR processar outras tarefas.
MrBit
@ user3829694 - Ok, então você deseja mover os dados rapidamente, com pouca sobrecarga.
precisa saber é o seguinte