Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с AVR - CDC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Oleg_IT
Сделал связь AVR с PC через USB на libusb. Работает. Но для этого на РС нужно ставить драйвера, для заказчика это не удобно. Решил перейти на AVR – CDC. Взял проект AVR-CDC.2006-08-28 на ATtiny45. Не работает. Загружаю их прошивки cdctiny45.hex или cdctiny45r.hex, по осциллографу вижу, что какой-то обмен идёт, но РС пишет Unknown Device. Работаю в IAR проект для ATtiny45 не компилится из-за старой не решённой проблеме:
Error[e16]: Segment NEAR_Z (size: 0x8c align: 0) is too long for segment definition. At least 0x1 more bytes needed. The problem occurred while processing the
segment placement command "-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE:+_..X_EXT_SRAM_SIZE", where at the
moment of placement the available memory ranges were "DATA:d5-15f,DATA:15f--1"

Кто сделал такое устройство, помогите разобраться.
Dog Pawlowa
Цитата(Oleg_IT @ May 24 2007, 10:29) *
Сделал связь AVR с PC через USB на libusb. Работает. Но для этого на РС нужно ставить драйвера, для заказчика это не удобно. Решил перейти на AVR – CDC. Взял проект AVR-CDC.2006-08-28 на ATtiny45. Не работает. Загружаю их прошивки cdctiny45.hex или cdctiny45r.hex, по осциллографу вижу, что какой-то обмен идёт, но РС пишет Unknown Device. Работаю в IAR проект для ATtiny45 не компилится из-за старой не решённой проблеме:
Error[e16]: Segment NEAR_Z (size: 0x8c align: 0) is too long for segment definition. At least 0x1 more bytes needed. The problem occurred while processing the
segment placement command "-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE:+_..X_EXT_SRAM_SIZE", where at the
moment of placement the available memory ranges were "DATA:d5-15f,DATA:15f--1"

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

Re: ошибка
попробуйте в настройках проекта отобрать пару байтов у стека, и добавить для переменных.
Re: CDC
Я лично не верю в устойчивую работу этой связи. Мне предлагали поисследовать, я отказался.
А Вы согласились? smile.gif
Oleg_IT
У меня CSTACK 0x10, RSTACK 8, меньше не могу, лезут другие ошибки. Модель памяти Small. Откуда ещё байтики можно безболезненно изъять?

Цитата(Dog Pawlowa @ May 24 2007, 11:40) *
Re: CDC
Я лично не верю в устойчивую работу этой связи. Мне предлагали поисследовать, я отказался.
А Вы согласились? smile.gif

Советуете остаться на libusb и уговорить заказчика?
GDI
Цитата
Error[e16]: Segment NEAR_Z (size: 0x8c align: 0) is too long for segment definition. At least 0x1 more bytes needed.

Такая ошибка у кого то уже была и решилать увеличением размера стека, если я не путаю, попробуйте поиск по форуму.
KRS
Цитата(GDI @ May 24 2007, 11:56) *
Такая ошибка у кого то уже была и решилать увеличением размера стека, если я не путаю, попробуйте поиск по форуму.

NEAR_Z - это не стек это сегмнт данных которые заполняются 0
всего 1 байта не хватает smile.gif
Надо убрать перменную какую нибудь 1
может перенести ее GPIORx у 45 тиньки есть 3 регистра в портах общего назначения вот 3 байта и освободится
GDI
Необходимые размеры стека, да и адреса размещения блоков в памяти можно узнать если сделать листинг линкера, лучше в хтмлл формате со всеми галками.

Цитата
NEAR_Z - это не стек это сегмнт данных которые заполняются 0

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

2OlegIT проект программатора AVR910USB от prottosa сделан тоже на CDC он разместил исходники - они компилируются в ИАРе, правда у него мега8.... а проблемы с сегментом вроде были у кого то кто его проект хотел на мега48 переделать..
Dog Pawlowa
Цитата(Oleg_IT @ May 24 2007, 10:55) *
Советуете остаться на libusb и уговорить заказчика?

Нельзя доверять левым решениям.
Потом начнется - на этом компьютере работает, на этом не работает, кто виноват.
И я догадываюсь, кто будет виноват smile.gif
P.S. Могу ошибаться.
Oleg_IT
При ошибке линковщик мапа не делает, и посмотреть размещение негде. Компилится и линкуется, например на ATmega32 (но тоже не работает), но там же всё по-другому.
Попробую поискать, где байтик сэкономить можно.
KRS
Цитата(Oleg_IT @ May 24 2007, 12:16) *
При ошибке линковщик мапа не делает, и посмотреть размещение негде. Компилится и линкуется, например на ATmega32 (но тоже не работает), но там же всё по-другому.
Попробую поискать, где байтик сэкономить можно.

Там же есть GPIORx туда можно 3 переменных перенсти вот и будет 3 байта
GDI
Надо искать где определен этот сегмент NEAR_Z и рыть там
Oleg_IT
Цитата(KRS @ May 24 2007, 12:22) *
Там же есть GPIORx туда можно 3 переменных перенсти вот и будет 3 байта


Есть, но они заняты под программный USART.
И ещё, говорят, что CDC меняет номер COM порта при следующих подключениях.
GDI
Может при последующих включениях в другие порты? Я могу говорить про программатор от проттоса, который я уже упоминал, при перевключении в тот же порт - нопер порта не меняется, при включении в новый порт он требует установить драйвера и встает другим номером, и это естественно. Номер порта в последствии можно поменять.
Про проблемы с номером порта я слышал у ftdi без подключения микросхемы еепром.
aleksey_g
Цитата
usbdrv.h:
Hardware Prerequisites:
=======================
USB lines D+ and D- MUST be wired to the same I/O port. D+ must (also) be
connected to INT0. D- requires a pullup of 1.5k to +3.5V (and the device
must be powered at 3.5V) to identify as low-speed USB device. A pullup of
1M SHOULD be connected from D+ to +3.5V to prevent interference when no USB
master is connected. We use D+ as interrupt source and not D- because it
does not trigger on keep-alive and RESET states.

As a compile time option, the 1.5k pullup resistor on D- can be made
switchable to allow the device to disconnect at will. See the definition of
usbDeviceConnect() and usbDeviceDisconnect() further down in this file.
...
usbconfig.h:
/* ---------------------------- Hardware Config ---------------------------- */

#define USB_CFG_IOPORTNAME D
/* This is the port where the USB bus is connected. When you configure it to
* "B", the registers PORTB, PINB and DDRB will be used.
*/
#define USB_CFG_DMINUS_BIT 3
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
* This may be any bit in the port.
*/
#define USB_CFG_DPLUS_BIT 2
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
* This may be any bit in the port. Please note that D+ must also be connected
* to interrupt pin INT0!
*/


Обратите внимание на usbdrv.h и usbconfig.h
Возможно не правильно определены D+ D- и USB_CFG_IOPORTNAME
Отсюда может быть неопределенное устройство.
Вы используете те же линии, что и в примерах, которые прошивали?
Oleg_IT
Один к одному собрал. И D- c D+ менял, не помогает. По осциллографу вижу вроде бы как одни нули уходят в РС, уловить сложно быстро всё происходить, а пишущего нет.
GDI
Там еще есть режим отладки через уарт, но проблема я так понял при компиляции и расположение выводов никак не поможет... надо убрать ошибку сперва.

И еще, может попробовать использовать последнюю версию юсб драйвера?

Кстати на сайте http://www.recursion.jp/avrcdc/ есть версия от 7апреля 2007 г. может там эта проблема решена?

http://electronix.ru/forum/lofiversion/ind.../t13883-50.html тут что то про сегменты обсуждалось
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.