Trabalho Prático Nº8 Aplicação USB 1. OBJECTIVOS Saber implementar uma aplicação completa USB entre o dispositivo e o HOST Saber utilizar e configurar o módulo FTDI DLP-USB245M Figura 8.1 Módulo DLP-USB245M. 2. O MÓDULO DLP-USB245M O módulo DLP DLP-USB245M é um módulo de baixo custo que integra o dispositivo da FTDI FT245BM, que é um FIFO USB. Este dispositivo é ideal para implementação de interface USB entre uma aplicação externa e um PC. O módulo integra uma EEPROM 93C46 que possibilita a customização OEM da aplicação. O FTDI FT245BM, implementa uma FIFO de leitura e de escrita que resulta na prática num porto bidireccional de 8 bits de leitura e escrita com memória. O desenvolvimento da aplicação no PC (HOST) pode ser efectuada utilizando driver de COM virtual ou via driver em que a aplicação comunicação com o mesmo via DLL. No primeiro caso o PC vê o módulo com se fosse uma porta série, o software é escrito Microprocessadores III ano lectivo 2004/2005 Página 1 Trabalho Prático Nº8
como se tratasse de uma aplicação na porta série. No segundo caso é necessário conhecer as especificações das funções implementadas pela livraria dinâmica (DLL). O Dispositivo DLP-USB245M disponibiliza um método fácil e de baixo custo, para se efectuar a transmissão de dados entre um PC e um dispositivo via porto USB. As taxas e transferência podem chegar até 1 Megabit por segundo, sendo o método de FIFO uma mais valia para criar o interface com um microcontrolador, através das portas de IO. Através do ciclo de leitura e escrita representados nas figuras abaixo podemos ver que a recepção de dados pode ser iniciada a quando de uma transição negativa de RD# num estado baixo de RXF# Figura 8.2: Diagrama temporal de leitura de FT245BM Ao contrário no ciclo de escrita como podemos ver, a transmissão de dados pode ser iniciada a quando de transição positiva de WR para um estado baixo de TXE# Figura 8.3: Diagrama temporal de escrita de FT245BM. Microprocessadores III ano lectivo 2004/2005 Página 2 Trabalho Prático Nº8
3. APLICAÇÃO E O FTDI Para realizar a comunicação com qualquer dispositivo externo é necessário um API. Para a comunicação como dispositivo é utilizada uma DLL (Dynamic Link Library) disponibilizada pelo fabricante do FTDI http://www.ftdichip.com. A DLL é a FTD2XX.DLL, no nosso caso e dado estarmos a utilizar o C# é acedida através de uma outra DLL chamada AID.DLL. A incorporação desta DLL na aplicação permite de forma muito simples ler, escrever configurar o dispositivo que serve de interface USB. Figura 8.4 Diagrama de bloco que identifica as diversas fases do processo de comunicação entre a aplicação e o dispositivo USB Para se utilizar a DLL em C# em primeiro lugar cria-se um ficheiro com a classe USBAccess de extensão.cs chamado por exemplo USBInterop. Assim o ficheiro USBInterop.cs deverá conter o seguinte código: Microprocessadores III ano lectivo 2004/2005 Página 3 Trabalho Prático Nº8
using System; using System.Runtime.InteropServices; public class USBAccess { public static extern uint FT_ListDevices(); public static extern uint FT_Open(); public static extern uint FT_Close(); public static extern uint FT_Write([MarshalAs(UnmanagedType.LPArray)] byte[] p_data,ulong size); public static extern uint FT_GetStatus(ref ulong rxsize, ref ulong txsize); public static extern uint FT_SetBitMode(byte mask, byte enable); public static extern uint FT_Read([MarshalAs(UnmanagedType.LPArray)] byte[] p_data,ulong size); public static extern uint FT_EE_Read(ref ushort vid,ref ushort pid, ref ushort power); public static extern uint FT_EE_Program(ushort power); public static extern uint FT_EE_ProgramToDefault(); public static extern uint KCAN_Send(uint channel, uint id, uint dlc, [MarshalAs(UnmanagedType.LPArray)] byte[] p_data); public static extern uint KCAN_Receive(ref uint channel, ref uint id, ref uint dlc, [MarshalAs(UnmanagedType.LPArray)] byte[] p_data); public static extern uint KCAN_Init(uint baudraute); } Figura 8.5 Classe USBAccess para utilizar as funções da DLL Este código permite fazer a importação das funções que estão na DLL para utilizar o FTDI. Aquando da ligação deste dispositivo ao PC, o sistema operativo necessitará de o instalar e para tal é necessário ter também os drivers fornecidos pelo fabricante. Exceptuando o caso em que ligamos o dispositivo numa outra porta USB, após a primeira instalação não será necessário repeti-lo de novo. Também a quando da utilização é necessário executar três comandos referenciados na DLL para que o dispositivo possa ser usado. Em primeiro lugar deve-se listar os dispositivos ligados ao PC (este comando não é obrigatório ser usado quando apenas se pensa em ligar um FTDI ao PC). Para o fazer deve-se fazer utilizar o comando FT_ListDevices() que no nosso caso concreto será USBAccess.FT_ListDevices();. Em seguida dever-se-á iniciar o dispositivo com o comando FT_Open(). Microprocessadores III ano lectivo 2004/2005 Página 4 Trabalho Prático Nº8
E por ultimo deve-se definir quais as linhas de saída e de entrada do porto de dados do FTDI com o comando FT_SetBitMode(byte mask, byte enable). Ao encerar o programa também deve ser encerrado o dispositivo, através do comando FT_Close(). Figura 8.6 Gestor de dispositivos depois da instalação do módulo FTDI DLP-USB245M 4. TRABALHO i. Estudar o modo de funcionamento de cada dispositivo ii. Estabelecer as ligações entre o dispositivo e o módulo da FTDI iii. Escrever a aplicação GRUPO Nº GRUPO 1 GRUPO 2 GRUPO 3 GRUPO 4 GRUPO 5 DISPOSITIVO Conversor série de 12 bits ADC LTS1258 Conversor série de 12 bits DAC LTS1257 Programação de E2PROM série X24C04 Sensor de temperatura DS1620 Interface com microcontrolador para maximizar a velocidade de transferência (PIC16F84?) Microprocessadores III ano lectivo 2004/2005 Página 5 Trabalho Prático Nº8