(c) Todos os direitos reservados.

quinta-feira, 13 de janeiro de 2011

Adaptador USB para Serial com TUSB3410


Dispoitivo: TUSB3410 - Conversor USB para Serial
Objetivo: Construir um conversor USB para RS-232
Dificuldade: 7 - (1~10)

Há algum tempo atrás eu precisei de um conversor USB para serial para testar um módulo VDIP1 da FTDI pois o conversor que eu usava, um BELKIN F5U109 (foto abaixo), era um verdadeiro lixo, irônicamente como eu tinha algumas amostras do TUSB3410, eu fui logo juntando algumas peças e colocando o projeto em prática.


Eu poderia muito bem comprar um conversor pronto da própria FTDI, mas qual seria a graça?
Vamos ao que interessa, mas antes de falar sobre o projeto eu quero comentar um pouco a respeito deste chip da Texas.


O chip:
Gosto muito dos produtos da Texas Instruments e um deles é o TUSB3410, no datasheet ele esta descrito como uma ponte entre a porta USB e uma porta serial que contém toda a lógica necessária para se comunicar com um computador.
Bom, para mim o TUSB3410 é muito mais que isso, pois quando você lê a descrição acima, não da para perceber que este chip pode ser configurado para funcionar como uma ponte USB para Serial RS-232, RS-485 ou infra-vermelho bastando apenas configurar alguns registradores internos e isso não é tudo.

Veja abaixo outras caracteristicas interessantes:
  • 8052 Core
  • 5 Interrupćões controladas pela CPU
  • 10KB ROM
  • 16Kb RAM
  • 2KB SRAM
  • 2 x 16-bit Timers
  • 2 DMA
  • 4 I/O
  • 1 porta I2C - 100 ou 400Khz master
  • USB 2.0 - 12Mbs
  • Bootcode Flow via I2C ou USB
Vou fazer um breve comentário a respeito das características listada acima.
A grande vantagem de se ter um núcleo de um velho microcontrolador como o da família 805x, é que você pode personalizar este chip para fazer muito mais do que simplesmente funcionar como uma porta serial.
Esta CPU tem acesso a todos os registradores e hardware e ainda tem 4 pinos externos que podem funcionar tanto como entrada quanto saida, você pode acionar transistores, Leds ou receber um comando via push botton e muito mais.
Resumidamente é mais ou menos assim, o usuário cria um firmware usando um compilador compatível com a familia 805x e ou apenas um cabećario usando um aplicativo fornecido pela TI, este firmware será armazenado na eeprom ou no PC, depende da vontade do desenvolvedor.

Depois de um reset, o TUSB3410 vai primeiramente inicializar a porta I2C e USB, em seguida vai verificar na eeprom se existe um cabeçario para que ele possa ser corretamente inicializado pelo sistema operacional no computador, depois ele vai olhar nos outros blocos da eeprom para procurar um firmware válido, caso contrário vai aguardar pela USB por um firmware válido para ser transferido pelo computador.
Se a eeprom não tiver um cabeçario ou um firmware, o chip vai funcionar no modo padrão que é um simples conversor USB para RS-232.

Quando o chip encontra um firmware válido, ele transfere este firmware para a RAM e executa, este é o segredo da flexibilidade do TUSB3410. Mas nem tudo é alegria, na hora de determinar um cabeçario você precisa adquirir uma licença apropriada pois não é permitido usar a licença que a Texas fornece como padrão, mas isso é um outro assunto que não pretendo comentar agora.


O primeiro Protótipo:
A minha intenção quando eu montei o primeiro protótipo foi a de deixar todos os pinos acessíveis para que eu pudesse fazer testes e entender melhor o funcionamento do TUSB3410, infelizmente cometi alguns enganos no layout que impossibilitaram o uso prático desta versão do circuito apesar dele ter resolvido meu problema de comunicação com a placa da FTDI.


Um outro problema é que eu uso o método térmico para confeccionar minhas placas e nesta época eu estava tentando aprimorar minha técnica, obviamente algo saiu errado e minha PCB ficou com o visual comprometido.

A reciclagem:
Como todo bom técnico de fundo de quintal, eu dificilmente jogo algo fora, especialmente se tiver algum componente eletrônico dentro... Nunca se sabe quando você vai precisar daquilo.
Pois então, lembra daquele conversor que eu citei acima e disse que era um verdadeiro lixo?
Ficou guardado, mas não por muito tempo, dele eu pude aroveitar o drive para RS232 que era um chip da saudosa Analog Devices codificado como ADM211, 3 Leds, a carcaça, o conector DB9 e alguns resistores e capacitores.


Retirei as medidas internas da carcaça e desenhei a placa no Eagle um pouco maior que a original, outra modificação que fiz foi substituir um cabo USB tipo A (macho) de 30Cm por um mini B (Fêmea) diretamente na placa.


Erro no circuito:
Cometi um engano quando desenhei meu esquema elétrico depois de ler a respeito do problema com o pino 2 (Suspend).
No datasheet, o fabricante sugeriu adicionar um resistor e um diodo em série com o pino 2 para solucionar o problema reportado, mas ao fazer a correção, eu acidentalmente coloquei o pino 1 (VRegen) em nível alto o que desativou o regulador interno de 1.8V do chip e com isso ele não funcionava.


Quando descobri minha falha, eu resolvi experimentar uma solução simples (entenda gambiarra) adicionando um resistor de 1K no pino 4 (VDD1) que é a alimentaćão externa de 1.8V, mas foi uma solução temporária pois depois de alguns dias o circuito passou a apresentar problemas intermitentes.
Conclusão, refiz o circuito na forma correta, pino 1 em nível alto, retirei o resistor do pino 4 mas mantive o resistor e o diodo no pino 2.

A versão melhorada:
Depois de alguns meses decidi fazer uma versão melhorada incluindo um conversor de nivel RS-232, acesso aos pinos I2C, aos pinos de I/O e também a alguns pinos da serial mas com nível TTL.
Eu sabia que os pinos da serial do TUSB3410 trabalhavam com 3.2V, mas o que eu não sabia é que os pinos eram extremamente sensíveis a curto circuito.


Queimei dois chips acidentalmente encostando um dos pinos que estava em nível alto no terra e com isso meu chip passou a se auto ressetar sozinho sempre que o computador reconhecia o dispositivo USB.
A solução que encontrei foi usar um divisor de tensão, até que não foi uma má idéia pois desta forma posso trabalhar tanto com 5Vcc quanto com 3.3Vcc, mas o problema é que para isso eu tive que refazer o layout da placa de circuito.


Conclusão:
Depois de tudo, acabei o dia com um final feliz. O circuito esta funcionando perfeitamente, está bem estável e não tive problemas com o funcionamento do driver da texas instalado no computador. Aliás, funciona sem problemas tanto no Windows quanto no Linux.
Os conversores atuais possibilitam a construção de PCBs bem menores, muitos já suportam tensões de alimentação desde 2.1 a 5V. Isso elimina regulador de tensão externo e se não me engano eu acho que vi em um circuito de um aparelho Chinês, conversor USB/Serial que no próprio chip ja tinha o drive para conexão RS-232 bastando apenas adicionar 4 capacitores, incrível.
Este que eu montei ficou bom, o fato de eu ter aproveitado a caixa do conversor antigo deu um visual muito melhor e facilitou muito uso deste equipamento.


Os Leds TX e RX estão conectados nos Pinos de I/O do TUSB3410, eles não estão funcionando pois a CPU não tem instruções para executar este trabalho porque ainda não programei a EEProm.
Pretendo usar os registradores de STATUS para fazer-los funcionar porém esta brincadeira vai estar um outro post que pretendo fazer em breve, fique atento as novidades.

Recursos:
Clique aqui para baixar o esquemático do Eagle.