Перейти к содержанию
    

Как перевести AVREAL на работу с USB?

С USB и avrdude не все радужно, в ветке http://electronix.ru/forum/index.php?showtopic=42389 есть обсуждение

Возможно, но человеку нужен программатор, а не джитаг, сам я пользовался связкой: AVR910USB с прошивкой от AVRDOPER(STK500) и AVRDUDE, Нареканий не было, использовалось это и в виндовс и в линукс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, адреса показывает, не вопрос, но, например, всем известный PonyProg вообще адрес не спрашивает, стоят 3 радиокнопки - LPT1 .. LPT3 и все. Как он определяет базовые адреса - загадка.

в Ponyprog есть Help, в Help есть FAQ. Самый последний ответ.

Удачи.

Кстати Ponyprog недавно обновился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, адреса показывает, не вопрос, но, например, всем известный PonyProg вообще адрес не спрашивает, стоят 3 радиокнопки - LPT1 .. LPT3 и все. Как он определяет базовые адреса - загадка.
Есть такой Jan Axelson parallel port FAQ, там приведён способ через некий ключ в реестре определяются наличествующие порты и потом в их ключах в одной двоичной записи берутся два байта и составляется базовый адрес порта. Беда в том, что работает это только с набортными LPT (возможно - с портами, для которых у 2000/XP есть драйвер). А для стоящего у меня PCI-LPT+2COM адаптера (драйвер был на компакте с платой) и ключи в реестре другие, и смещение адреса в двоичном ключе другое (т.е. просто зная адрес я его нашёл в другом месте).

А с набортные имеют стандартные адреса 378/278/3BC и для них достаточно ключиков -p1/-p2/-p3.

Универсального способа я не нашёл (плохо искал?) потому и забросил это дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Универсального способа я не нашёл (плохо искал?) потому и забросил это дело.

А его скорее всего и нет - конкретные драйвера знают а другим и не надо :). Однако полууниверсальный сделать несложно - базовые адреса и прочие ресурсы железок PnP-плеятся и лежат по унифицированным фиксированым адресам в конфигурации железа. По Vendor и Device прочитать и пользоваться. Производителей PCI LPT где-то 3-4.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Универсального способа я не нашёл (плохо искал?) потому и забросил это дело.
В программаторе Курта для MSP430 в режиме RAW пользователем тупо адрес LPT-порта в настройках программы может задаваться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В программаторе Курта для MSP430 в режиме RAW пользователем тупо адрес LPT-порта в настройках программы может задаваться.
У avreal - уже не помню, с 1.00beta0 или немного позже, но во всяком случае с момента начала выкладывания в интернет году в 1999-том - в ключе -p может задаваться не номер LPT, а его адрес. Число в ключе воспринимается как шестнадцатеричное и если оно больше 0x100 - то это адрес, на адреса меньше 0x100 лазить нефиг.

Люди как раз просят задавать номер, а адрес чтобы искала программа сама.

Хотя я обхожусь адресом, выцепленным вручную из свойств оборудования - я не каждый день глобально меняю конфигурацию компа, а добавление сетевухи и видеозахватчика адрес LPT не подвинуло. Года три-четрые назад игрался с другой PCI-LPT картой, была другая мамка, адрес той карты был другой, но он тоже не подвинулся при мелких изменениях в компе (типа того же видеозахватчика).

На всех компах, на которых я работаю, в окружении прописал переменную AVREAL_PORT и в makefile в вызове avreal стоит -p$(AVREAL_PORT) (в батниках не-для-себя соответственно -p%AVREAL_PORT%), поэтому я просто не замечаю, где какой адрес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тов. ReAl, а в *никсовых версиях Вашего программатора обращение к порту идёт через соответствующие файлы устройств или через прямой вызов функций inb ()/ outb () ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тов. ReAl, а в *никсовых версиях Вашего программатора обращение к порту идёт через соответствующие файлы устройств или через прямой вызов функций inb ()/ outb () ?
Там сейчас винегрет - в FreeBSD на /dev/ppi, в линуксе - ioperm() и inb()/outb(). "Исторически сложилось".

Сейчас дописываю единый код - для линукса будет и /dev/parport, для bsd- и прямое обращение, просто в зависимости от формы ключа -p (число или строка).

Заодно делаю для win32 - если не NT-шный ряд осей, то не грузить dlportio и лазить напрямую, всё равно, если я правильно понимаю, в этом случае сама dlportio.dll не обращается к dlportio.sys а лазит напрямую.

DOS-версия будет приостановлена до получения аргументированных возражений против такого положения вещей (а дальше будем торговаться dos16 или dos32-dpmi).

 

p.s. по дороге я там ещё кое-что в структуре программы поменяю и после этого надеюсь за ft2232 взяться. Надеюсь ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди как раз просят задавать номер, а адрес чтобы искала программа сама.

 

Все доступные для открывания порты как СОМ так и LPT на момент запуска программы в символических именах ,можно определить через API.Там несложно ,могу примерчик скинуть.

Можно поискать и в Gogle типа "COM LPT API" даст кучу ссылок :)

А вот работать с ними через API глухой номер ,я пытался поработать с СОМ ,у меня зараза на больших скоростях пропускает байты при приеме,плюнул ,переполз опять на драйвер,а LPT нужет протокольный обмен ,тоесть отработка сигналов STROBE и ACK на порте,тупо дернуть ногой не удастся.

ИМХО ,лучше сразу подыскивать нормальный драйвер и закладываться на него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все доступные для открывания порты как СОМ так и LPT на момент запуска программы в символических именах, можно определить через API. Там несложно, могу примерчик скинуть.
enum-нуть их наличие - таких примеров пруд пруди, "но мне туда не надо", если это не даёт возможность определить базовый адрес порта. А вот с этим не так просто.

В доступных мне на момент "ещё не надоело искать" (года четыре назад) примерах находилось не всё, адрес имеющейся у меня тогда платы не находился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем вам базовый адресс ?

Я допустим по сей день не знаю какие у меня адресса :)

Обратиться можно по имени или по номеру.

Вот например для АПИ.

    ' Initialize Communications
    lngStatus = CommOpen(1, "COM1" , _
        "baud=9600 parity=N data=8 stop=1")
    
    If lngStatus <> 0 Then
    ' Handle error.
        lngStatus = CommGetError(strError)
    MsgBox "COM Error: " & strError
    End If

 

Вот для драйвера

 

MSComm.CommPort=1

 

Порты могут не увидиться в случаях если заняты под принтер,мышку,другим приложением или вообще винда не видит оборудования .У меня дополнительные платы под порты тоже стоят ,уже нераз палил LPT :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем вам базовый адресс ?
А чтобы значение ножки BUSY узнать, прочитав регистр статуса, или там на ножку STROBE выдать "0", потом пощёлкать на данных, потом на STROBE выдать "1". Вот такие извращения.

 

Я допустим по сей день не знаю какие у меня адресса :)

Обратиться можно по имени или по номеру.

Вот например для АПИ.

    ' Initialize Communications
    lngStatus = CommOpen(1, "COM1" , "baud=9600 parity=N data=8 stop=1")

А, COM-порт...

Под win32 предпочитаю так:

void eunit_interface_rs232::open_com_port(const char *portstr, uint32_t baud)
{
    hcom = CreateFile(portstr, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
    if (hcom == INVALID_HANDLE_VALUE)
        throw eunit_error(EU_CMD_NOCOMM, 
...
    EscapeCommFunction(hcom, SETDTR);
    EscapeCommFunction(hcom, SETRTS);

На 115200 байтики не теряются, быстрее не пробовал.

Но это не решает проблемы, связанные с "ногодрыжеством" на LPT.

 

Порты могут не увидиться в случаях если заняты под принтер,мышку,другим приложением или вообще винда не видит оборудования .У меня дополнительные платы под порты тоже стоят ,уже нераз палил LPT :biggrin:
Винда видит (раз через свойства/оборудование/... и так далее для LPT1 на закладке "ресурсы" базовый адрес показывает), принтера на ней нет и не ставился. Не винда не видит, а применяемый в стандартных примерах код поиска базового адреса по реестру, я же писал уже. А вручную подбирать для имеющейся платы и потом нарываться на то, что на другом производителе может и не пойти - вломно как-то. Поэтому предпочитаю указывать вручную, как и у упоминавшегося выше чьего-то программатора для MSP430.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ReAl

Если брать по большому счету ,то у вас проблема ,которой не существует :)

Если ваш драйвер не поддерживает выражения типа :

 

тыры-пыры_имя_драйвера.тыры-пыры_назначить_порт=1 или 2 или 3

 

а требует только базовый адресс ,то пошлите его лесом гулять,и подыщите нормальный.

Не нужно будет извращаться с копаниями в реестре вообще.

К примеру если для LPT нужно ,есть драйвер TVicPort ,ложится под любой язык ,начиная с Билдера кончая .NET .

Сам определяет какие есть порты ,сколько их,какие у них базовые адресса,дергает любой ногой,

есть даже дополнительные фичи - типа определить серийник винта или назначить лицензию на определенное количество дней .

Можно и другой подыскать на свой вкус.

Я с LPT редко работал ,поэтому коллекцию себе не собирал.

ИМХО если чтото новое мутить ,то лучше на LPT и не закладываться,но это дело хозяйское :)

 

Насчет СОМ ,функции CreateFile, ReadFile, SetupComm, WriteFile и т.д. у меня в коде они есть,я выдернул с инета уже четыре варианта и у всех одна и таже проблема с пропуском байтов.

Если подкинете свой рабочий вариант ,с меня будет пиво и уважуха :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет СОМ ,функции CreateFile, ReadFile, SetupComm, WriteFile и т.д. у меня в коде они есть,я выдернул с инета уже четыре варианта и у всех одна и таже проблема с пропуском байтов.

Если подкинете свой рабочий вариант ,с меня будет пиво и уважуха :biggrin:

Пиво по интернету передавать умеете ? :)

 

пользуетесь ли Вы таймаутами ком порта ? (в SetupComm)

пользуетесь ли Вы функцией Sleep(x) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...