теме UP!
А кто-нить игрался с FT232, но в плане соединения ножек Rx и Тх и передачи массива данных?
вопрос возник......
Добавлено через 9 минут
как видно из скрина:
желтым - буфер скопирован нормально.
красным - это уже идет передача... и стал появляться какой-то странный первый бит, при чем он плавающий, может взять любое значение из буфера.
т.е. первая посылка правильная, а ответ уже приходит больше.... ?!
хз откуда берется. никто с таким не сталкивался?
https://yadi.sk/i/zNYg5GxKS-yfNw
Добавлено через 1 минуту
ну и сам код:
[PHP]/* Includes ------------------------------------------------------------------*/
#include <iostream>
#include <string.h>
#include <windows.h> //all_lib
#include <conio.h> //getch()
#include <process.h> //exit()
#include <string> //строки
#include "ftd2xx.h" //ft232_lib
#include "stdafx.h" //xz
//#include "main.h"
using namespace std;
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void FTDI_Config();
void FTDI_ID(void);
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Programm_conf ------------------------------------------------------------*/
//char BufferSend[] = { "ZXCVBNML"}; //'\0'
char BufferSend[] = { 'z','x','c','v','b','n','m' }; //'\0'
char BufferRead[] = { 0 };
char Recieve_buf[] = { 0 };
DWORD SendBuffer;
DWORD ReadBuffer;
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* FTDI_232RL_conf ---------------------------------------------------------*/
FT_HANDLE ftHandle; //к чему обращаемся
FT_STATUS ftStatus; //опрашивемый флаг-статус
DWORD numDevs; //кол-во подлюченных девайсов
FT_DEVICE_LIST_INFO_NODE *devInfo; //характеристики
DWORD BytesWritten; //кол-во передаваемых байт
DWORD BytesReceived; //кол-во принимаемых байт
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Main Funcion ---------------------------------------------------------*/
int main()
{
//настройки порта
FTDI_ID();
FTDI_Config();
//Копируем строки для передачи,проверяем,что всё закопировалось
memcpy(Recieve_buf, BufferSend, sizeof(BufferSend)); //sizeof(uint8_t)* SendBuffer);
cout << ">>BufferSend =" << BufferSend << endl;
cout << ">>Recieve_buf=" << Recieve_buf << endl;
while (1)
{
//Чистим регистры перед передачей
ftStatus = FT_Open(0, &ftHandle);
if (ftStatus != FT_OK) { cout << " FT_Open failed " << endl; return 0; }
else { cout << "FT_Open... " << endl; }
//Отчистка регистра Tx
if (FT_Purge(ftHandle, FT_PURGE_TX) != FT_OK) { cout << "FT_Purge failed" << endl; exit(0); }
else { cout << "FT_Purge_TX OK" << endl; }
//Отчистка регистра Rx
if (FT_Purge(ftHandle, FT_PURGE_RX) != FT_OK) { cout << "FT_Purge failed" << endl; exit(0); }
else { cout << "FT_Purge_RX OK" << endl; }
cout << "FT_Close... " << endl;
FT_Close(ftHandle);
//Запись пакета в порт
ftStatus = FT_Open(0, &ftHandle);
if (ftStatus != FT_OK) { cout << " FT_Open failed " << endl; return 0; }
else { cout << "FT_Open... " << endl; }
//Запись
ftStatus = FT_Write(ftHandle, &BufferSend, sizeof(BufferSend), &BytesWritten);
if (ftStatus != FT_OK) { cout << "FT_Write Failed\n\r" << endl; return 0; }
else { cout << ">>BufferSend=" << BufferSend << endl; }
//чтение ответа из порта
ftStatus = FT_Read(ftHandle, &BufferRead, sizeof(BufferRead), &BytesReceived);
if (ftStatus != FT_OK) { cout << "FT_Write Failed\n\r " << endl; return 0; }
else { cout << ">>BufferRead=" << BufferRead << endl; }
cout << "FT_Close... " << endl;
FT_Close(ftHandle);
Sleep(100);
}
system("pause");
return(0);
}
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* FTDI_ID Funcion ---------------------------------------------------------*/
void FTDI_ID(void)
{
//Напечать на экраке хар-ки подключенных устройств
cout << "===================================================" << endl;
ftStatus = FT_CreateDeviceInfoList(&numDevs);
if (ftStatus == FT_OK) { printf("OnLine Device = %d\n", numDevs); }
if (numDevs > 0)
{
devInfo = (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*numDevs);
ftStatus = FT_GetDeviceInfoList(devInfo, &numDevs);
if (ftStatus == FT_OK)
{
for (int i = 0; i < numDevs; i++)
{
printf("Dev Number %d:\n", i); //первй девайс под номер 0.
printf(" ID=0x%x\n", devInfo.ID);
printf(" LocId=0x%x\n", devInfo.LocId);
printf(" SerialNumber=%s\n", devInfo.SerialNumber);
cout << "===================================================" << endl;
//ID = 0x4036001
//LocId = 0x21
//SerialNumber = A50285BI
}
}
}
}
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* FTDI_Config Funcion ---------------------------------------------------------*/
void FTDI_Config()
{
//Настройка Устройства
if (FT_Open(0, &ftHandle) == FT_OK)
{cout << "Device Config: FT_Open OK" << endl;}
else { cout << "Device Config: ERROR" << endl; exit(0); }
//Настройка скорости передачи
if (FT_SetBaudRate(ftHandle, 9600) == FT_OK)
{cout << "Baud rate = 9600" << endl;}
else { cout << "SET ERROR" << endl; exit(0); }
//Настройка кол-ва передаваемых бит, стоповый бит, четности
if (FT_SetDataCharacteristics(ftHandle, FT_BITS_8, FT_STOP_BITS_1, FT_PARITY_NONE) == FT_OK)
{cout << "Bits = 8" << endl; cout << "STOP_Bits = 1" << endl; cout << "PARITY = none" << endl;}
else { cout << "SET ERROR in configured" << endl; exit(0); }
FT_Close(ftHandle);
cout << "===================================================" << endl;
}
/*----------------------------------------------------------------------------*/[/PHP]