Не - в мегадеве 2 реализации SPI - аппаратная и программная. В чем суть - аппаратной даешь байт и принимаешь ответный байт. А программная - шевелишь битами сам. Ну - это рудимент многолетней давности - шевелить с паралельного порта ногами и этим самым что то передавать и принимать.
А полноценный SPI (именно SPI) аппаратный там есть! Хоть и читает пишет блоками по несколько байт, но этого с лихвой хватит на ISP. Т.к. там применяются посылки по 32 бита. Только придется с модуль ядра запихать обработчег протокола AVR910 (номер по памяти). Он будет принимать команды с якобы ком порта преобразовывать в 32разрядные посылки ISP и передавать аппаратной шине SPI.
У меня это уже реализовано, только на жаве. Надо портировать.
Просто обрадовался легкости программного SPI. А не тут то было.
После изрядного ядерного программинга tty устройств в голову пришло суперское решение всех проблем.
Нет - все продолжается. Просто я решил НЕ заморачиваться с эмуляцией COM чтобы эмулировать тот же AVRISP. Вместо этого драйвер модуля открывает UDP сервер, пакеты с которого обрабатываются и отсылаются обратно.
Что это даст. Во первых мы отрываемся от концепции проводов. Мегадев может быть один - а компов по сетке с ним работающих много. Во вторых никакой возни с битами, пропускной способностью и прочим. В третьих и самых интересных - программатор AVRDUDE может работать с сетевым устройством! А также эмулятор QEMU(KVM) тоже ЭМУЛИРУЕТ ком порт в винде (аппаратный!!) через сервер UDP.
Только что попробовал - запустил сервачек UDP и настроил куему с виндой на него. Запустил в куеме АВР студию и она стала общаться с моим серверком.
Это просто прорыв. Долой ком порты! Мутотень
У нас все будет сетевым. И будет работать везде. Кстати я думаю что параллельно созданию файлов создавать удп сокеты. Можно будет обращаться с других машин. Да хоть с интернета.
А не будет у народа запары с созданием UDP серверов. Вообще поясните что это такое и с чем это едят. И не вызовет это какую либо опасность, все таки сервер, например из того же Инета?
О !. У меня по сети заработал протокол AVR910 =)
AVRStudio думает что все хорошо
UDP сервер это не комп это программная абстракция. Просто некая дырка с номером. Можете понимать как почтовый ящег. Ящеги с номерами. Как в многоэтажках.
Вот. Ящиков может быть много, 65535. Но первые 1024 козырные и система просто так вам их не даст да и не нужно. Теперь дальше. Ящик может принимать сообщение. И его обработать. И все. В ответ он шлет другое сообщение в тот ящег от которого оно пришло (первое). Таким образом обмен сообщениями заменят собой обмен байтами через ком порт. Удобнее чем ком порт? Не правда ли?
Запустил в домашней сетке мегадев на порту 4555 а на ноуте запустил АВРДУДКУ и говориш ей - ком порт у меня там - на 4555 порту. И оно работает! =)
Насчет CodeVision я просто не знаю. Это надо тестить. Если ПО под виндопс - путь простой и однозначный - запускать его надо в эмуляторе - эмуляторы с удовольствием берут сетевой поток и представляют в виде ком порта. Точно знаю qemu + vmvare могут. А следовательно все клоны на их основе. Т.О. любое виндовое ПО и не узнает ничего. Для него оно - ком порт.
Теперь о ПО на линуксе. Мощнейший программатор AVRDUDE, шьет через что угодно. Тоже понимает редирект по протоколу TCP. Для всякой мелочи оставшейся можно таки напрячься и сбабахать эмулятор tty или pty (это вроде как реальный ком порт и виртуальный). А вообщето помнится это есть такой программный пакет - забыл как называется. Он в общем сотворяет этот комп порт в системе а трафик берет с сети. Надо его тоже потестить.
В общем штука получается нешуточная. Масштабная фигня. Вырастает в какуюто монстроидальную платформу. Однозначно склоняюсь к мысли, что нужно делать 3 варианта аппаратуры.
*) миниатюрный и тупой мега8. С небольшим кругом задач. Порядка 20% возможных сетапов. Это ограничения самого камня и софт усб.
*) средний на меге16 или 32. Круг задач больше. т.к. периферии больше. Уже 50%
*) полный на... внимание... двух чипах [16..2560] и одном конверторе USB -> UART. Этот конфиг позволит делать немыслимые сетапы. Т.к. один чип может шить другой на предмет задач, от которых требуется либо быстрый обмен либо быстрая реакция. Например снифферы, системы захвата данных и прочая.
При этом стоимость любого варианта - ну совсем минимум.
Типовые конфиги для запусков напишем. Это то как раз примитивно.
Главное - у меня весь виндовс думает что мегадев это ком порт. А значит всех потенциальных пользователей мы уже имеем. В хорошем смысле.
То есть если я Вас правильно понял, мы подключаем к компу, на котором стоит винда, MegaDev запускаем на нем UDP сервер, и она думет что у нас девайс это ком порт? Или как?
Не.. винду на железе запускать нельзя. Это принципиально.
Винду в эмулятор. Оттуда она видит ком порт. И все ок.
А ваша конфигурация - живая винда на отдельном компе заработает если найти то самое ПО которое из траффика делает реальный ком порт - то заработает. Почему нет.
Я вот счас отлаживаю 910 протокол. На предмет эмуляции. АВР студия пинается, пытается прочесь совпадающие участки памяти с разных смешений и ловит меня чтоб я не подсунул ей лажу. Но.. виртуализацию не остановить.
tim@tim-desktop:~$ cd IO
tim@tim-desktop:~/IO$ make main.hex
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=attiny2313 -DF_CPU=20000000 -DDEBUG_LEVEL=0 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
usbdrv/usbdrv.c:14:23: error: avr/io.h: No such file or directory
usbdrv/usbdrv.c:15:29: error: avr/pgmspace.h: No such file or directory
In file included from usbdrv/usbdrv.c:17:
usbdrv/usbdrv.h:461: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.h:467: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.h:473: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.h:479: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.h:485: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
usbdrv/usbdrv.h:491: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
usbdrv/usbdrv.h:497: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
usbdrv/usbdrv.c:71: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.c:81: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
usbdrv/usbdrv.c:90: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
usbdrv/usbdrv.c:112: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.c:143: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘char’
usbdrv/usbdrv.c: In function ‘usbDriverDescriptor’:
usbdrv/usbdrv.c:325: error: ‘usbDescriptorDevice’ undeclared (first use in this function)
usbdrv/usbdrv.c:325: error: (Each undeclared identifier is reported only once
usbdrv/usbdrv.c:325: error: for each function it appears in.)
usbdrv/usbdrv.c:327: error: ‘usbDescriptorConfiguration’ undeclared (first use in this function)
usbdrv/usbdrv.c:336: error: ‘usbDescriptorString0’ undeclared (first use in this function)
usbdrv/usbdrv.c:338: error: ‘usbDescriptorStringVendor’ undeclared (first use in this function)
usbdrv/usbdrv.c:340: error: ‘usbDescriptorStringDevice’ undeclared (first use in this function)
usbdrv/usbdrv.c:342: error: ‘usbDescriptorStringSerialNumber’ undeclared (first use in this function)
usbdrv/usbdrv.c:353: error: ‘usbDescriptorHidReport’ undeclared (first use in this function)
usbdrv/usbdrv.c: In function ‘usbDeviceRead’:
usbdrv/usbdrv.c:507: warning: implicit declaration of function ‘pgm_read_byte’
usbdrv/usbdrv.c: In function ‘usbPoll’:
usbdrv/usbdrv.c:595: error: ‘PIND’ undeclared (first use in this function)
usbdrv/usbdrv.c: In function ‘usbInit’:
usbdrv/usbdrv.c:613: error: ‘MCUCR’ undeclared (first use in this function)
usbdrv/usbdrv.c:613: error: ‘ISC00’ undeclared (first use in this function)
usbdrv/usbdrv.c:613: error: ‘ISC01’ undeclared (first use in this function)
usbdrv/usbdrv.c:618: error: ‘GICR’ undeclared (first use in this function)
usbdrv/usbdrv.c:618: error: ‘INT0’ undeclared (first use in this function)
make: *** [usbdrv/usbdrv.o] Ошибка 1
tim@tim-desktop:~/IO$
Я так понимаю я что то не то делаю, Ubuntu 9.04. gcc-avr стоит.
VenomXP писал(а):Такая трабла. Спасайте. Не компилит и все тут.
tim@tim-desktop:~$ cd IO
tim@tim-desktop:~/IO$ make main.hex
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=attiny2313 -DF_CPU=20000000 -DDEBUG_LEVEL=0 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
usbdrv/usbdrv.c:14:23: error: avr/io.h: No such file or directory
usbdrv/usbdrv.c:15:29: error: avr/pgmspace.h: No such file or directory
...
Я так понимаю я что то не то делаю, Ubuntu 9.04. gcc-avr стоит.
Компилятор не находит avr/io.h и avr/pgmspace.h, исходники бы посмотреть, ну и убедитесь в наличии файлов. Остальные траблы надо думать из-за того что хидеры не найдены.
VenomXP писал(а):Такая трабла. Спасайте. Не компилит и все тут. Я так понимаю я что то не то делаю, Ubuntu 9.04. gcc-avr стоит.
Компилятор не находит avr/io.h и avr/pgmspace.h, исходники бы посмотреть, ну и убедитесь в наличии файлов. Остальные траблы надо думать из-за того что хидеры не найдены.