![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
0men
-
Постов
142 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Сообщения, опубликованные 0men
-
-
Все сделал как написали, в 3-х местах и код. Тоже самое (
В любом случае огромное спасибо за время и терпение, если получится, то с меня прочитается :)
Надеюсь на ваш опыт.
Если вы в Москве, то я могу подвести все рабочую и нерабочую платы, исходники у вас есть.
я Питере :(
пока идеи иссякли ((
А процессор вообще работает? Другие ноги управляются?
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Сделал. Все тоже самое. Но это дефолтная прошивка. Если нужно внести изменения в код, которые вы рекомендовали, то какие именно?во всех 3х местах изменили на AT91SAM7X256?
вот это в начале мейна вставьте и проверьте напряжение на D+
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA);
AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_SODR = AT91C_PIO_PA7;
for(;;);
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Да я готов попробовать, подскажите, что именно нужно сделать? что-то не могу найти подходящие настройки в IARмышкой ткнитесь в EIM-v3-Debug
потом - Project->Options-General options-Device
и там меняете Atmel AT91SAM7X512 на Atmel AT91SAM7X256
потом все перекомпилируйте
И еще нужно исправить в настройках линкера:
Project->Options-Linker-Config-Linker configuration file
изменить на 256
и еще ))
Project->Options-С/С++ Compiler->Preprocessor
изменить AT91SAM7X512 на Atmel AT91SAM7X256
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Мы паяли разные: 128, 256, 512 и всегда они работали и одной и той же прошивкой. Вроде разработчик что-то предусмотрел в коде, чтобы можно было ставить любые модификации.Сейчас и рабочие и нерабочие платы с вариантом 256, но вот старые работают, а новые нет.
не упрямьтесь, а попробуйте )) В последних ревизиях атмел очень серьезно ухудшил характеристики флеш памяти, этот код отвечает за время доступа к ней. Ваш разработчик ничего не предусмотрел в этом плане
-
Сделал. Держит напряжение нормально, 3.3в на D+ при отключенном USB и 2.9 при подключенном. Определяется как неизвестное устройство, но это понятно, из-за изменения в коде.
у
AT91C_BASE_EFC0
AT91C_BASE_EFC1
AT91C_BASE_MC
абсолютно разные базовые адреса. Выбирая 512 в яре и прошивая прошивку в 256 вы не правильно инициализируете работу флэш памяти
-
Сделал. Ничего не изменилось: РА7 - 2.3в, D+ - 2.2в при отключенном кабеле USB. После подключения кабеля, на D+ падает до 1.7в и плата не определяется.
Посмотрите код, так надо было?
да, код правильный, но результат полная ерунда.. Ножка не переводится на выход, что абсолютно непонятно. А сделайте плис тоже самое на рабочей плате
кстати, все таки важно, какой чип указан: 256 или 512. В функции LowLevelInit
#if defined(at91sam7x512)
AT91C_BASE_EFC0->EFC_FMR = AT91C_MC_FWS_1FWS;
AT91C_BASE_EFC1->EFC_FMR = AT91C_MC_FWS_1FWS;
#elif defined(at91sam7x128) || defined(at91sam7x256)
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS;
-
Проблема по-прежнему актуальна.
Готов выставить хороший коньяк или иное вознаграждение по Вашему выбору за конструктивную помощь )
ээээ.. зачем там цикл while(1) то?? у вас там нужка РА7 дергается в 0-1 постоянно.
короче, нужно понять, переводится ножка РА7 на выход или нет.
Напишите в самом начала мейна следующее:
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA);
AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_SODR = AT91C_PIO_PA7;
for(;;);
И измерьте напряжение на самой ножке РА7 и на D+
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Да. 1.7 при подключенном usb, 2.2 при отключенном.это означает, что нога на выход не работает..
перед
PIO_Configure(pins, PIO_LISTSIZE(pins));
вставьте вот такую строчку:
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA);
это включение клока
да, похоже проблема именно в этом )) Клоки на порты у вас включаются в функции
PIO_InitializeInterrupts(0);
а она находится значительно ниже
перенесите функцию
PIO_InitializeInterrupts(0);
перед
PIO_Configure(pins, PIO_LISTSIZE(pins));
-
Ничего не изменилось.
На всякий случай вот скрин результатов компиляции
ничего не изменилось это что означает? какое напряжение на D+? 1.7?
-
Тоже не помогло. После прошивки напряжение на D+ 2.2в без подключения к компу (со стертой прошивкой 3.3в), а при подключении кабеля usb падает до 1.7, ну то есть все как раньше.
Давайте от простого пойдем, посмотрим, переводится вообще РА7 на выход 1.
Для этого в мейне после
PIO_Configure(pins, PIO_LISTSIZE(pins));
USB_PULLUP_OFF;
wait(100000);
USB_PULLUP_ON;
напишите
for(;;);
то есть дальше код исполняться не будет. Подключите к компу и измерьте напряжение на D+
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Нашел такой код://USB VBUS
#define PIN_USB_VBUS {1 << 4, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_INPUT, PIO_DEFAULT}
//USB PULL_UP
#define BOARD_USB_PULLUP_EXTERNAL
#define PIN_USB_PULLUP {1 << 7, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
//USB
#define USB_Vbus 1<<4
#define USB_BUS_POWERED
#define AT91C_VBUS AT91C_PIO_PA4
#define AT91C_PIO_VBUS AT91C_BASE_PIOA
#define AT91C_ID_VBUS AT91C_ID_PIOA
#define USB_PULLUP 1<<7
#define AT91C_PULLUP AT91C_PIO_PA7
#define AT91C_PIO_PULLUP AT91C_BASE_PIOA
#define AT91C_ID_PULLUP AT91C_ID_PIOA
#define USB_PULLUP_ON AT91C_PIO_PULLUP->PIO_SODR = USB_PULLUP;
#define USB_PULLUP_OFF AT91C_PIO_PULLUP->PIO_CODR = USB_PULLUP;
#define Cfg_Vbus_Detect AT91C_PIO_VBUS ->PIO_ODR = USB_Vbus;\
AT91C_PIO_VBUS ->PIO_PER = USB_Vbus;\
AT91C_PIO_VBUS ->PIO_IFER = USB_Vbus;
Скинул
Не боюсь, у нас главная фишка не в платах, а в софте для PC :)
чего то я нигде не увидел перевод ножки 91 (PA7) на выход (в мейне)
Точнее, там есть настройка портов, но достаточно специфическая :)
чтобы не разбираться долго, попробуйте в MAIN
сразу после первой строчки
PIO_Configure(pins, PIO_LISTSIZE(pins));
написать так:
AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA7;
скомпилировать и проверить
Нашел такой код:И еще у вас есть непонятный момент. В мейне есть такой код
// connect if needed
VBus_Configure();
Cfg_Vbus_Detect;
USB_PULLUP_ON;
ISR_Vbus(&pinVbus);
Так вот Vbus это PA4 судя по этому коду:
#define USB_Vbus 1<<4
#define USB_BUS_POWERED
#define AT91C_VBUS AT91C_PIO_PA4
#define AT91C_PIO_VBUS AT91C_BASE_PIOA
#define AT91C_ID_VBUS AT91C_ID_PIOA
PA4 это 88 нога, а на вашей схеме она тупо через резистор притянута к земле... зачем, почему..
И еще: попробуйте закомментировать строчку
#define BOARD_USB_PULLUP_EXTERNAL
в board.h
Кстати, в проекте выбран чип at91sam7x512, а впаян at91sam7x256
-
Я готов скинуть и весь проект, там секретного ничего нет. Дайте контакты куда.
Осциллографа нет. Мы давно ничего не меняли в электронике, обновляли только софт для PC, с которым работает плата, не меняя протокол обмена с платой.
Соответственно нет ни специалистов ни оборудования, кроме тестера. Платы паялись и всегда работали, до этого момента :)
кидайте весь проект, контакт отправил в личке
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Конечно, только подскажите что скинуть. У меня в IAR, при открытом проекте вверху куча вкладок с исходниками, но я не знаю в какой ноги инициализируются. Как быстро найти?если не хотите кидать весь проект, кидайте файл, где функция мейн, по ней пробежимся, скажем что кинуть дальше )
Кстати, а вы можете осциллографом посмотреть поведение при работе ноги 91 на обеих платах?
-
Если не нужна принудительная енумерация, то можно 1.5 кОм намертво к +3.3В подцепить.
Самое странное, что ТС пытался 1.5 кОм намертво к +3.3В подцепить (по его словам), ничего не помогло.
Подцепил.Непрошитый МК определяется нормально, как на скрине в начале темы.
Прошитый как неизвестное устройство. На D+ при этом 2,9в.
Это однозначно говорит о том, что принудительная енумерация присутствует?
очень похоже на это. Уровень напряжения нормальный
Может вы кусок проекта сюда скините с инициализацией периферии?
-
Можете не думать, я не настаиваю.
Есть опыт борьбы с FT232RL, на которую навесили именно так как у Вас. Пока не сняли, опознавалось один из десяти раз.
у меня сотни плат с такой схемой и на FTDI и на AT91SAM7S. И если вы внимательно почитаете топик сначала, то поймете, что уровни напряжения совсем не связаны с конденсаторами
-
Попробуйте снять эту гроздь из конденсаторов на цепях USB. Могу предположить что SAMBA loader откатывается на USB 1, а прошивка не умеет. Изменились скорее всего электрические параметры хоста.
не думаю, с кондерами там все ок (если стоят те, что на схеме)
-
Значит, не туда затянули, либо фронт долгий вышел. Предлагаю подключить USB, вернуть подтяжку на VUSB и ребутить устройство через сигнал RESET(не отключая от USB). Не прошитый девайс должен определятся! Затем проверить прошитый девайс.
Также из поста не совсем понятно, запускается ли в целом прошивка, то-есть проблема только с USB? Остальной функционал исправен?
Затянули то туда, но неправильно )) "когда подаешь Vcc напрямую на D+ определяется как "неизв.устройство" Нужно Vcc на D+ через 1.5К
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Ну так я переменником подгоню нужный уровень напряжения 2.4в и наверное должно заработать. 5 минутправильный уровень 2.8 В. Вот, посмотрите для быстрого понимания http://usb.fober.net/teoriya/Fizicheskij-interfejs/
ПС, судя по вашей схеме, ножка 91 должна в программе быть определена на выход . Она сейчас у вас на вход с верхней подтяжкой (килоом в 50). Думаю, если она (91 нога) используется в программе и далее (для ре-енумерации), то проблема с подбором 1.5К до конца не решится.
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Сейчас попробую. А вы понимаете как там устроены процессы? Я не пойму, почему непрошитый контроллер, когда подаешь Vcc напрямую на D+ определяется как "неизв.устройство", а убираешь и все в порядке.Постоянная составляющая напряжения на D+ становится выше нормы? Померил - 3.3в, когда напрямую от питания и 2.4, когда, когда убираешь.
Понимаю, так делать нельзя. Хост, по уровням на D+, D- определяет скорость подключенного устройства. А вообще, мне не очень понятна цель 91 ноги. Она используется для ре-енумерации устройства чтоли?
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Повесил. Теперь и прошитый и непрошитый контроллер определяются как "неизвестное устройство" в диспетчере задач. Вернул все обратно, непрошитый определяется как на моем скрине вначале темы.А если поиграться номиналом 1.5К? То есть уменьшить его (сохранив ваши схему - подтяжка к 91 ноге )
-
Опубликовано · Изменено пользователем 0men · Пожаловаться
Не передает. Пробовал while(HAL_SPI_TransmitReceive_DMA(...)!=HAL_OK);Просто программа весит на цикли и все.
клок разрешен?
ПС увидел
эээ!!! Так у вас в одном место spi3, а в другом spi4 )))
-
Привет.
Столкнулся с проблемой передачи и приема данных по spi.
Так может он еще передает? Через какой промежуток идет следующий вызов?
-
Да это я уже нашёл, но как я понял она только в функциям применяется, а если чтение DWT_CYCCNT запихать в функцию то фиг поймешь сколько он тактов на вход функцию будет тратить и будит ли вообще.
Да и я смотрю что компилятор любитель, местами менять операции. Это бы тоже хотелось избежать при чтении DWT_CYCCNT
Сколько тратит на вход в функцию это можно в ассемблере посмотреть. Менять местами - посмотрите pragma inline
-
Добрый день подскажите как выключить оптимизацию для куска кода внутри функции ?
копните в направлении #pragma optimize
Нужна помощь, сломал голову! (Atmel AT91SAM7х256)
в NXP
Опубликовано · Изменено пользователем 0men · Пожаловаться
Давайте так, если до понедельника ничего не решится, то я вам напишу, куда отправить :)
У вас в программе есть управление светодиодами, на плате они есть? Моргают?