Nosaer 0 27 сентября, 2016 Опубликовано 27 сентября, 2016 · Жалоба Добрый день. Столкнулся с проблемой, возможно кто сталкивался с подобным. При считывании Flash(k9k8g) через USB(FT245) теряется информация частями(кратными 256 байт). На компьютере с USB 3.0 или новыми драйверами FTDI скорость считывания выше 1 000 000 байт в секунду и проблем с потерей информации нет. На более старых ПК, где стоят драйвера для FTDI какой нить старой версии(например 2.4.16), информация теряется. Причем на некоторых компьютерах это всего 5 массивов по 256 или 512 байт, а на некоторых отсутствует вплоть до 20% информации Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 27 сентября, 2016 Опубликовано 27 сентября, 2016 · Жалоба А как Вы флешку к FT245 подключили? Возможно в этом и кроется проблема. И какая именно FT245? Они с разными суффиксами вроде бывают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosaer 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Флешка и FTDI еще подключены к контроллеру. Который подает команды на вывод информации и проверяет флаги готовности Flash и FTDI. Т.е. судя по даташиту FTDI у нее размер буфера как раз 256 байт. Думаю я как раз теряю периодически ее буфер. Но в программе я постоянно отслеживаю флаг TXE, который отвечает за переполнение буфера и его передачу по USB к ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Флешка и FTDI еще подключены к контроллеру. Который подает команды на вывод информации и проверяет флаги готовности Flash и FTDI. Очевидно, что следует искать баг именно в Вашем ПО на контроллере. Интерфейс у FT245 примитивный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Флешка и FTDI еще подключены к контроллеру. Который подает команды на вывод информации и проверяет флаги готовности Flash и FTDI. Т.е. судя по даташиту FTDI у нее размер буфера как раз 256 байт. Думаю я как раз теряю периодически ее буфер. Но в программе я постоянно отслеживаю флаг TXE, который отвечает за переполнение буфера и его передачу по USB к ПК. А каким софтом и как Вы определяете наличие факта передачи с FT245 на PC ? Проверьте, возможно потеря и не в FT245 а в верхнем уровне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Сейчас провёл ряд тестов с FT245RL. Тестировал передачу с устройства (evalboard, работа с FT245 через GPIO) на PC с VCP-дровами. Все тесты проходят нормально только если в потоке нет байтов == 0. Передавал блоки рандомных данных размером до 32МБ, на стороне PC проверял CRC - всё ок. Если же в потоке есть нулевые байты, то начинается странное: на PC принимается больше данных, чем было отправлено На 32000000 переданных байт появляется 40-50 байт лишних. Для теста использовал стороннее ПО на PC - возможно это оно глючит. По уму надо написать свою утилиту приёма на PC, чтобы точно протестить. Вряд-ли это проблема FT245, но всё-же... Если исключить нули из потока, то однозначно всё работает прекрасно. Скорость передачи блока 32МБ получилась = ~883660 Б/сек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба . . . . Если же в потоке есть нулевые байты, то начинается странное .... . . . . может собака порылась на участке "заливки" данных в FT245 - задержки стробов относительно установки данных итп. "Нулевой эффект" - выход при 0x00 за допустимый предел. Ну я бы еще кабель проверил - как владелец второго "проездного" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 29 сентября, 2016 Опубликовано 29 сентября, 2016 · Жалоба может собака порылась на участке "заливки" данных в FT245 - задержки стробов относительно установки данных итп. Т.е. - Вы считаете, что при передаче 01 или 02 и т.п. нет задержки, а при передаче 00 - есть??? Ниже привожу передающий код. Покажите где здесь порылась задержка: void FtTx(void const *src, int len) { u8 const *s = (u8 const *)src; PoutM(PORT(PIN_FT245_D0), 255 << PIN(PIN_FT245_D0)); //переключение пинов D0...D7 на вывод for (; --len >= 0; ) { int c = *s++; PsetM(PORT(PIN_FT245_D0), c << PIN(PIN_FT245_D0)); //установка единиц на линиях D0...D7 PclrM(PORT(PIN_FT245_D0), (c ^ 255) << PIN(PIN_FT245_D0)); //установка нулей на линиях D0...D7 while (Pdat(PIN_FT245_TXE)); //ждём 0 на PIN_FT245_TXE Pset(PIN_FT245_WR); FtDelayNs(25); //задержка, нс Pclr(PIN_FT245_WR); FtDelayNs(26); } } //макрос PORT() возвращает 1-ю компоненту номера пина (порт пина); //макрос PIN() возвращает 2-ю компоненту номера пина (разряд пина); #define PIN_FT245_WR 3, 22 #define PIN_FT245_TXE 4, 24 #define PIN_FT245_RD 1, 2 #define PIN_FT245_RXF 4, 31 #define PIN_FT245_D0 1, 20 #define PIN_FT245_D1 1, 21 #define PIN_FT245_D2 1, 22 #define PIN_FT245_D3 1, 23 #define PIN_FT245_D4 1, 24 #define PIN_FT245_D5 1, 25 #define PIN_FT245_D6 1, 26 #define PIN_FT245_D7 1, 27 Ну я бы еще кабель проверил - как владелец второго "проездного" :) Какой кабель? USB? Если в кадре есть нули, то такие кадры как-то по другому передаются по этому кабелю??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться