|
Китайский "USB2.0 TO RS232 Convertor" |
|
|
|
Jan 19 2011, 20:01
|
Группа: Участник
Сообщений: 7
Регистрация: 22-01-10
Пользователь №: 54 992

|
Пишу это, чтобы другие на эти грабли не наступили. Надо было древний программатор запустить. Вот купил это самое Г. Часа 3 дровами в компьютере шевелил - не работает. Потом взял осциллограф, посмотрел и прослезился. Вместо уровней RS-232, на разъеме уровни UART-а 3,3v. В прикрепленных файлах фотографии девайса.
|
|
|
|
|
Jan 20 2011, 13:28
|
Профессионал
    
Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347

|
Цитата ukpyr, там от 0 до 3 вольт уровни. А не от -3. 0..-15В допустимо в качестве низкого уровня, а 1ца - от 3В (напр.даташит на HT6571) Цитата гораздо хуже, что они часто вообще не определяются, как USB-устройство и определяются как prolific, а драйвера нужны родные китайские
Сообщение отредактировал ukpyr - Jan 20 2011, 13:29
|
|
|
|
|
Jan 20 2011, 18:14
|
Группа: Участник
Сообщений: 7
Регистрация: 22-01-10
Пользователь №: 54 992

|
Хватит спорить об уровнях. Там был чистый TTL сигнал. Если его подать на UART любого поца, он был бы туда как родной. Очевидно китайцы МАХ забыли припаять. Дрова работали (USB устройство распознавалось), но только до тех пор, пока не соединишь с RS232 клиентом. После чего устройство сразу становилось не известным. Сегодня еще разок съездил на радио базар. Тот вернул в зад, тому у кого взял и притащил новый. Внешний вид такой же. Другая упаковка и начинка. Сквозь полупрозрачный корпус просматривается две многоногие мелкосхемы. По одной с каждой стороны. Вот и все визуальное отличие. Тоже китайский. На скорости 115200 работал как часы. В винде отображался как обычный COM порт. Фотографии прилагаются.
|
|
|
|
|
Jan 20 2011, 18:36
|
Профессионал
    
Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347

|
Цитата Хватит спорить об уровнях. Там был чистый TTL сигнал. Если его подать на UART любого поца, он был бы туда как родной. данные на TX передавались нулём ? у меня похожий адаптер ( http://www.dealextreme.com/details.dx/sku.24799 ), там данные передаются единицей, но уровнями TTL. Для связи с другими портами RS232 покатит, но для программаторов - нет.
|
|
|
|
|
Jan 21 2011, 06:47
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Muscat @ Jan 21 2011, 12:22)  Есть задача - передать большой массив данных, на осциллографе я вижу, что скорость внутри пакета соотвествует заданной, но вот между передачами пакетов возникают длительные, явно програмные, задержки. А чем передаете?
|
|
|
|
|
Jan 21 2011, 08:35
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Muscat @ Jan 21 2011, 14:06)  Если серьезно, то я не понимаю вот чего Я использую виртуальный RS-232 - на отладочной плате стоит преобразователь USB->RS232, в системе существует виртуальный КОМ-порт. Почему я не могу использовать его скорость по максимуму? ИМХО "115200" - это скорость среды. Фактическая передача всегда будет с меньшей скоростью. В том числе и за счет пауз между байтами/посылками. Величина этих пауз определяется возможностями передающей стороны + старт/стоп условиями.
|
|
|
|
|
Jan 21 2011, 09:34
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Muscat @ Jan 21 2011, 12:19)  Вот именно так у меня и происходит. Битовая скорость внутри посылок 1.5Мбита, так как физически RS232 не существует нигде, то и ограничение на скорость от USB. А вот изза пауз реальная скорость передачи данных составляет 30 кБит/сек Скорее всего, дело в вашей программе. Вы точно пакетами данные передаёте или побайтно? Дело в том, что ваш пакет (или байт) должен упаковаться во фрейм USB, передаться (с возможными задержками в несколько мс), потом распаковаться и выйти наружу в виде RS-232. Если вы передаёте пакет, он просто упакуется в фрейм и передастся. Если каждый байт по отдельности - получите отдельный фрейм для каждого байта и соответственно, задержки тоже.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jan 21 2011, 10:21
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Muscat @ Jan 21 2011, 16:18)  Если же я запущу fwrite(s,STR1) fwrite(s,STR2) То между пакетами будет интервал в 100мс, а внутри пакетов все по прежнему хорошо. Условно говоря возникает задержка при переходе от строчки к строчке Так что вас собственно удивляет? Между вызовом fwrite и реальной передачей может пройти неопределенное количество времени (кто знает как их драйвер устроен и чем сейчас система занята)
|
|
|
|
|
Jan 21 2011, 20:30
|
Группа: Участник
Сообщений: 7
Регистрация: 22-01-10
Пользователь №: 54 992

|
Вообще, реальная скорость передачи - это ответственность программиста, который это написал. Передающая сторона сваливает данные в передающий буфер, вполне реального размера. Дальше передающий драйвер дует этот буфер, на скорости стремящейся к максимальной, в канал. А там заполняется приемный буфер. Драйвера как правило пишут профессионалы и тут все в порядке. А вот сколько времени нужно передающей программе, чтобы сформировать буфер. И приемной стороне, чтобы обработать принятый массив. В 95% случаев, которые я встречал, тормозило именно здесь. И многозадачность винды тоже добавляет тормозов.
Вообще, самая тяжелая ситуация, когда данные идут из примитивно девайса (типа меги или TMS) в персоналку. Тут приходится контролировать, что все данные приняты. А иначе можно не только байты, а целые пакеты потерять.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|