Boa tarde pessoal!
Estou com o seguinte problema estou fazendo um driver de comunicação entre o pc e um magnetômetro (medidor de campo magnético)! O magnetometro comunica via serial e o pc(notebook) somente possui entradas USB, logo estou com
um converso UBS-SERIAL(com o chip FTDI). Magnetometro serial RS422, FTDI converte de RS422-USB!
O problema se configura nesse etapa, quando olho no gerenciadores de dispositivos o driver USB - local em USB to RS422/485 Serial Converter, está marcado com uma exclamação amarela. E
não cria uma porta COM virtual! Primeira dúvida todos os drivers que fazem essa conversão eles criam uma porta COM virtual ou podem fazer a comunicação de uma outra maneira ?
OBS: Tenho uma unidade inercial (mede aceleraçoes,velocidades angulares , campo magentico) que usa para comunicao RS232 e uso um outro conversor com chip FTDI- 232, e quando e olho em gerenciadores de dispositos está sem a
exclamação e ele cria uma porta COM virtual. Com essa unidade inercial consigo comunicar sem problemas! Criei o seguinte programa para abrir a comunicação!
HANDLE Configure_port(void)
{
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
TCHAR *pcCommPort = TEXT("COM9"); // Most systems have a COM1 port
// Open a handle to the specified com port.
hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // default security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n", GetLastError());
// return (1);
}
// Initialize the DCB structure.
SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
// Build on the current configuration by first retrieving all current
// settings.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
//return (2);
}
PrintCommState(dcb); // Output to console
// Fill in some DCB values and set the com state:
// 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_115200; // baud rate
dcb.ByteSize = 8; // data size, xmit and rcv
dcb.Parity = NOPARITY; // parity bit
dcb.StopBits = ONESTOPBIT; // stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n", GetLastError());
//return (3);
}
// Get the comm config again.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
//return (2);
}
PrintCommState(dcb); // Output to console
_tprintf (TEXT("Serial port %s successfully reconfigured.\n"), pcCommPort);
system("pause");
return(hCom);
}
Mas com o primeiro chip FTDI não consigo comunicar porque não sei se ela criou uma porta COM ou comunica-se de uma outra maneira usando alguma biblioteca diretamente! Existe alguma maneira de descobrir como é feita a comunicação
desse chip FTDI?