Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь, сломал голову! (Atmel AT91SAM7х256)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
alex7577
Есть плата обработки внешних сигналов на ATMEL AT91SAM7х256

Плата проверена годами, выпустили сотни штук и никогда не было такой проблемы, как сейчас.
Проблема в том, что до прошивки контроллера, плата при подключении к компу по USB определяется в диспетчере устройств.


После прошивки, не определяется, потому что на контакте D+ USB-разъема напряжение слишко мало, 1.7в, а нужно хотя бы 2.4в. До прошивки напряжение присутствует, поэтому и нормально определяется.

Требуемое напряжение на D+USB задается ножкой 91 через резистор 1.5к (см. схему). Если резистор отпаять, то на ножке 91 присутствует 3.3в, как и должно быть. Если припаять резистор обратно, то напряжение падает на ножке 91 до 2.3в, а на D+USB до 2.2в и это при отключенном кабеле USB, т.е. без нагрузки. Если подключить компьютер (через кабель USB), то на D+USB падает до 1.7в и соответственно плата не видна в диспетчере устройств. Если обнулить прошивку (3.3в на ножку 92), все восстанавливается, плата определяется.
Все элементы заменял, проверял, прозванивал, ошибки нет. Запаял 4 такие платы, у всех одни и те же симптомы. При этом старая рабочая плата прекрасно работает, у нее напряжение на на D+USB 3.3в без подключения кабеля и 2.4в при подключении.
Получается, что после прошивки падает входное сопротивление на ножке 94 и просаживается напряжение на ножке 91. Но как такое может быть в зависимости от наличия прошивки?
Прошивки не менялись лет 5, сотни раз использовались, и их много, какую не залей, тот же эффект.
Питание контроллера не просаживается, стабильно 3.3в
Единственная пока идея: может контроллеры бракованные??? Но мне кажется это маловероятно.
Кто-нибудь сталкивался с подобным? Прошу помощи, проект горит, заказчик топает, а мы подвисли.





Сергей Борщ
Чудес не бывает. Кто-то из ваших программистов дрогнувшей рукой перевел ножку 91 на ввод и вы там наблюдаете напряжение встроенной подтяжки (она включена по умолчанию). Можете убедиться в этом, подгрузив на землю резистором с известным сопротивлением. Ток встроенной подтяжки по документации - 300мкА плюс-минус лапоть. Возможно, в предыдущих партиях контроллеров он был "плюс лапоть" и его хватало.
richie
1) А паршивка за это время не протухла, в смысле, не менялась?

2) Ревизия чипа отличается от остальных?
alex7577
Цитата(richie @ Sep 11 2017, 16:25) *
1) А паршивка за это время не протухла, в смысле, не менялась?

2) Ревизия чипа отличается от остальных?


Прошивка не менялась. Ревизия отличается.
richie
Если прошивка точно не менялась, тогда курить ревизию из даташита.

Если не поможет, искать непропай, бракованную деталь.

P.S. А как вы платы перепрошиваете если это понадобится?
alex7577
Цитата(Сергей Борщ @ Sep 11 2017, 16:12) *
Чудес не бывает. Кто-то из ваших программистов дрогнувшей рукой перевел ножку 91 на ввод и вы там наблюдаете напряжение встроенной подтяжки (она включена по умолчанию). Можете убедиться в этом, подгрузив на землю резистором с известным сопротивлением. Ток встроенной подтяжки по документации - 300мкА плюс-минус лапоть. Возможно, в предыдущих партиях контроллеров он был "плюс лапоть" и его хватало.

Черт, похоже Вы правы! В другом форуме человек такое же сделал предположение. Однако мы не можем быстро разобраться с прошивкой, сейчас такого специалиста в штате нет. Можете посоветовать, что тут можно предпринять?
Сергей Борщ
QUOTE (alex7577 @ Sep 11 2017, 16:37) *
Можете посоветовать, что тут можно предпринять?
Повесьте резистор 1.5 кОм не на 91 ногу, а сразу на питание. Ваше устройство не сможет по собственной инициативе (без выдергивания USB-шнурка) переподключаться к компу, на остальном вроде не должно сказаться.
alex7577
Цитата(richie @ Sep 11 2017, 16:35) *
Если прошивка точно не менялась, тогда курить ревизию из даташита.
Если не поможет, искать непропай, бракованную деталь.

P.S. А как вы платы перепрошиваете если это понадобится?


Прошивка точно не менялась, а если даже дело в ревизии, то мы не можем быстро изменить прошивку.
Тут все уже перепробовали, 4 платы с одним и тем же дефектом, явно дело в не случайном непропае или детали.
Программатором JTAG.


Цитата(Сергей Борщ @ Sep 11 2017, 16:46) *
Повесьте резистор 1.5 кОм не на 91 ногу, а сразу на питание. Ваше устройство не сможет по собственной инициативе (без выдергивания USB-шнурка) переподключаться к компу, на остальном вроде не должно сказаться.


Повесил. Теперь и прошитый и непрошитый контроллер определяются как "неизвестное устройство" в диспетчере задач. Вернул все обратно, непрошитый определяется как на моем скрине вначале темы.
0men
Цитата(alex7577 @ Sep 11 2017, 17:12) *
Повесил. Теперь и прошитый и непрошитый контроллер определяются как "неизвестное устройство" в диспетчере задач. Вернул все обратно, непрошитый определяется как на моем скрине вначале темы.


А если поиграться номиналом 1.5К? То есть уменьшить его (сохранив ваши схему - подтяжка к 91 ноге )
alex7577
Цитата(0men @ Sep 11 2017, 17:20) *
А если поиграться номиналом 1.5К? То есть уменьшить его (сохранив ваши схему - подтяжка к 91 ноге )

Сейчас попробую. А вы понимаете как там устроены процессы? Я не пойму, почему непрошитый контроллер, когда подаешь Vcc напрямую на D+ определяется как "неизв.устройство", а убираешь и все в порядке.
Постоянная составляющая напряжения на D+ становится выше нормы? Померил - 3.3в, когда напрямую от питания и 2.4, когда, когда убираешь.
0men
Цитата(alex7577 @ Sep 11 2017, 17:26) *
Сейчас попробую. А вы понимаете как там устроены процессы? Я не пойму, почему непрошитый контроллер, когда подаешь Vcc напрямую на D+ определяется как "неизв.устройство", а убираешь и все в порядке.
Постоянная составляющая напряжения на D+ становится выше нормы? Померил - 3.3в, когда напрямую от питания и 2.4, когда, когда убираешь.


Понимаю, так делать нельзя. Хост, по уровням на D+, D- определяет скорость подключенного устройства. А вообще, мне не очень понятна цель 91 ноги. Она используется для ре-енумерации устройства чтоли?
alex7577
Цитата(0men @ Sep 11 2017, 17:29) *
Понимаю, так делать нельзя. Хост, по уровням на D+, D- определяет скорость подключенного устройства. А вообще, мне не очень понятна цель 91 ноги. Она используется для ре-енумерации устройства чтоли?

Ну так я переменником подгоню нужный уровень напряжения 2.4в и наверное должно заработать. 5 минут
0men
Цитата(alex7577 @ Sep 11 2017, 17:34) *
Ну так я переменником подгоню нужный уровень напряжения 2.4в и наверное должно заработать. 5 минут


правильный уровень 2.8 В. Вот, посмотрите для быстрого понимания http://usb.fober.net/teoriya/Fizicheskij-interfejs/

ПС, судя по вашей схеме, ножка 91 должна в программе быть определена на выход . Она сейчас у вас на вход с верхней подтяжкой (килоом в 50). Думаю, если она (91 нога) используется в программе и далее (для ре-енумерации), то проблема с подбором 1.5К до конца не решится.
Integro
Цитата(alex7577 @ Sep 11 2017, 17:12) *
Повесил. Теперь и прошитый и непрошитый контроллер определяются как "неизвестное устройство" в диспетчере задач. Вернул все обратно, непрошитый определяется как на моем скрине вначале темы.


Значит, не туда затянули, либо фронт долгий вышел. Предлагаю подключить USB, вернуть подтяжку на VUSB и ребутить устройство через сигнал RESET(не отключая от USB). Не прошитый девайс должен определятся! Затем проверить прошитый девайс.

Также из поста не совсем понятно, запускается ли в целом прошивка, то-есть проблема только с USB? Остальной функционал исправен?
richie
1) Ага, всё-таки существует вероятность, что файл прошивки сейчас может отличаться от того что был ранее.

2) Ревизия скорее всего отпадает.

3) Перепрошивка. Это был наводящий вопрос. Почему при проектировании платы нельзя добавить джампер, при наличии которого плата предназначена для прошивки с гарантированным состоянием условий работы контроллера, не зависящих от "прошит", "не прошит", "прошит неправильной прошивкой"?
0men
Цитата(Integro @ Sep 11 2017, 18:00) *
Значит, не туда затянули, либо фронт долгий вышел. Предлагаю подключить USB, вернуть подтяжку на VUSB и ребутить устройство через сигнал RESET(не отключая от USB). Не прошитый девайс должен определятся! Затем проверить прошитый девайс.

Также из поста не совсем понятно, запускается ли в целом прошивка, то-есть проблема только с USB? Остальной функционал исправен?


Затянули то туда, но неправильно )) "когда подаешь Vcc напрямую на D+ определяется как "неизв.устройство" Нужно Vcc на D+ через 1.5К
Genadi Zawidowski
Попробуйте снять эту гроздь из конденсаторов на цепях USB. Могу предположить что SAMBA loader откатывается на USB 1, а прошивка не умеет. Изменились скорее всего электрические параметры хоста.
0men
Цитата(Genadi Zawidowski @ Sep 11 2017, 18:16) *
Попробуйте снять эту гроздь из конденсаторов на цепях USB. Могу предположить что SAMBA loader откатывается на USB 1, а прошивка не умеет. Изменились скорее всего электрические параметры хоста.


не думаю, с кондерами там все ок (если стоят те, что на схеме)
Genadi Zawidowski
Можете не думать, я не настаиваю.
Есть опыт борьбы с FT232RL, на которую навесили именно так как у Вас. Пока не сняли, опознавалось один из десяти раз.
0men
Цитата(Genadi Zawidowski @ Sep 11 2017, 18:32) *
Можете не думать, я не настаиваю.
Есть опыт борьбы с FT232RL, на которую навесили именно так как у Вас. Пока не сняли, опознавалось один из десяти раз.


у меня сотни плат с такой схемой и на FTDI и на AT91SAM7S. И если вы внимательно почитаете топик сначала, то поймете, что уровни напряжения совсем не связаны с конденсаторами
Corvus
Цитата(0men @ Sep 11 2017, 18:34) *
у меня сотни плат с такой схемой


Схема-то штатная. Но могли и неправильные номиналы запаять. Я бы не зацикливался на напряжении вывода, а сначала упростил до минимума. D+ через резистор 1,5к к +3V3, резистор от 91-й ножки отпаять. А то может помимо напряжения на выводе ещё и кварц шалит wink.gif
alex7577
Цитата(0men @ Sep 11 2017, 18:37) *
правильный уровень 2.8 В. Вот, посмотрите для быстрого понимания http://usb.fober.net/teoriya/Fizicheskij-interfejs/

ПС, судя по вашей схеме, ножка 91 должна в программе быть определена на выход . Она сейчас у вас на вход с верхней подтяжкой (килоом в 50). Думаю, если она (91 нога) используется в программе и далее (для ре-енумерации), то проблема с подбором 1.5К до конца не решится.


Да, не решилось (( непрошитая определяется, прошитая нет. При этом после прошивки падает напряжение на D+ до 1.5 (с 2.8 до прошивки) и подбор перемещением результатов не даёт, определяется как неизвестное устройство




Цитата(Integro @ Sep 11 2017, 19:00) *
Значит, не туда затянули, либо фронт долгий вышел. Предлагаю подключить USB, вернуть подтяжку на VUSB и ребутить устройство через сигнал RESET(не отключая от USB). Не прошитый девайс должен определятся! Затем проверить прошитый девайс.

Также из поста не совсем понятно, запускается ли в целом прошивка, то-есть проблема только с USB? Остальной функционал исправен?


Отъехал пока, вернусь, попробую. Проверить работу прошивки не могу, она работает с софтом на PC, т.е. пока usb не заработает, нельзя проверить работу платы

Цитата(richie @ Sep 11 2017, 19:03) *
1) Ага, всё-таки существует вероятность, что файл прошивки сейчас может отличаться от того что был ранее.

2) Ревизия скорее всего отпадает.

3) Перепрошивка. Это был наводящий вопрос. Почему при проектировании платы нельзя добавить джампер, при наличии которого плата предназначена для прошивки с гарантированным состоянием условий работы контроллера, не зависящих от "прошит", "не прошит", "прошит неправильной прошивкой"?


Не, не, откуда вы взяли? Прошивка последний раз менялась в 2013г., с тех пор - нет. А плат за это время сделали сотни и всегда все ок.


Цитата(Genadi Zawidowski @ Sep 11 2017, 19:16) *
Попробуйте снять эту гроздь из конденсаторов на цепях USB. Могу предположить что SAMBA loader откатывается на USB 1, а прошивка не умеет. Изменились скорее всего электрические параметры хоста.

Пробовал. Ни на что не влияет.

Цитата(0men @ Sep 11 2017, 19:05) *
Затянули то туда, но неправильно )) "когда подаешь Vcc напрямую на D+ определяется как "неизв.устройство" Нужно Vcc на D+ через 1.5К


Это имелось ввиду, конечно через 1.5к. А напрямую - это смысле "не через 91 ногу"
aaarrr
Цитата(alex7577 @ Sep 11 2017, 17:12) *
Повесил. Теперь и прошитый и непрошитый контроллер определяются как "неизвестное устройство" в диспетчере задач. Вернул все обратно, непрошитый определяется как на моем скрине вначале темы.

Так НЕ ДОЛЖНО быть. Проверьте еще раз.

Цитата(Сергей Борщ @ Sep 11 2017, 16:12) *
Чудес не бывает. Кто-то из ваших программистов дрогнувшей рукой перевел ножку 91 на ввод и вы там наблюдаете напряжение встроенной подтяжки (она включена по умолчанию). Можете убедиться в этом, подгрузив на землю резистором с известным сопротивлением. Ток встроенной подтяжки по документации - 300мкА плюс-минус лапоть. Возможно, в предыдущих партиях контроллеров он был "плюс лапоть" и его хватало.

Я бы думал, что все с точностью до наоборот: загрузчик ничего не знает о 91 ноге, поэтому подключение хост видит через включенный pull-up, благо на AT91SAM они зверские. А вот что происходит в основной программе - науке неведомо.

alex7577, снимите резистор, и посмотрите поведение 91 ноги в режиме загрузчика и в боевом - куда и в каком объеме она тянет/отдает ток.
jcxz
Цитата(alex7577 @ Sep 11 2017, 20:37) *
Однако мы не можем быстро разобраться с прошивкой, сейчас такого специалиста в штате нет. Можете посоветовать, что тут можно предпринять?

Для быстрого выявления "программной природы" бага, можно найти готовый пример какого-либо USB-устройства для отладочной платы с Вашим МК и с аналогичной распиновкой USB-интерфейса.
Скомпилить, прошить, проверить.
_4afc_
Цитата(alex7577 @ Sep 11 2017, 16:21) *
Есть плата обработки внешних сигналов на ATMEL AT91SAM7х256

Плата проверена годами, выпустили сотни штук и никогда не было такой проблемы, как сейчас.
Проблема в том, что до прошивки контроллера, плата при подключении к компу по USB определяется в диспетчере устройств.

А есть старые платы? Они с этим компом на этом виндоус с этим разъёмом работают?

Был случай, пришлось на другую реализацию стека USB уходить....
alex7577
Всем спасибо за помощь! Проблема пока не решена, но хотя бы понятно куда копать.
Нашли пару МК с более старой ревизией, запаяли, все сразу заработало, т.о. понятно что дело только в новой ревизии.
Блин! Такой удар со стороны классика )) 5 лет все было нормально и вдруг на тебе! Самое главное вовремя )

Цитата(jcxz @ Sep 11 2017, 22:09) *
Для быстрого выявления "программной природы" бага, можно найти готовый пример какого-либо USB-устройства для отладочной платы с Вашим МК и с аналогичной распиновкой USB-интерфейса.
Скомпилить, прошить, проверить.

Боюсь это не быстро для нас ( Нам бы "костыль" влепить, лишь бы работало, отправить заказ, а потом уже посидим, покумекаем.
VladislavS
Цитата(alex7577 @ Sep 12 2017, 14:58) *
Блин! Такой удар со стороны классика )) 5 лет все было нормально и вдруг на тебе! Самое главное вовремя )


Ребят, ну вы же сами себе злобные буратины (ССЗБ). Даташит что гласит?
Нажмите для просмотра прикрепленного файла

Если не нужна принудительная енумерация, то можно 1.5 кОм намертво к +3.3В подцепить.
alex7577
Цитата(VladislavS @ Sep 12 2017, 15:30) *
Ребят, ну вы же сами себе злобные буратины (ССЗБ). Даташит что гласит?
Нажмите для просмотра прикрепленного файла

Если не нужна принудительная енумерация, то можно 1.5 кОм намертво к +3.3В подцепить.


Подцепил.
Непрошитый МК определяется нормально, как на скрине в начале темы.
Прошитый как неизвестное устройство. На D+ при этом 2,9в.

Это однозначно говорит о том, что принудительная енумерация присутствует?
0men
Цитата(VladislavS @ Sep 12 2017, 15:30) *
Если не нужна принудительная енумерация, то можно 1.5 кОм намертво к +3.3В подцепить.


Самое странное, что ТС пытался 1.5 кОм намертво к +3.3В подцепить (по его словам), ничего не помогло.

Цитата(alex7577 @ Sep 12 2017, 16:16) *
Подцепил.
Непрошитый МК определяется нормально, как на скрине в начале темы.
Прошитый как неизвестное устройство. На D+ при этом 2,9в.

Это однозначно говорит о том, что принудительная енумерация присутствует?


очень похоже на это. Уровень напряжения нормальный
Может вы кусок проекта сюда скините с инициализацией периферии?
alex7577
Цитата(_4afc_ @ Sep 12 2017, 13:54) *
А есть старые платы? Они с этим компом на этом виндоус с этим разъёмом работают?

Был случай, пришлось на другую реализацию стека USB уходить....


Да написал выше, старая плата работает на этом компе стабильно.
Более того, перепаяли МК на новую, тоже работает.

Цитата(0men @ Sep 12 2017, 16:19) *
Самое странное, что ТС пытался 1.5 кОм намертво к +3.3В подцепить (по его словам), ничего не помогло.

очень похоже на это. Уровень напряжения нормальный
Может вы кусок проекта сюда скините с инициализацией периферии?



Конечно, только подскажите что скинуть. У меня в IAR, при открытом проекте вверху куча вкладок с исходниками, но я не знаю в какой ноги инициализируются. Как быстро найти?
0men
Цитата(alex7577 @ Sep 12 2017, 16:28) *
Конечно, только подскажите что скинуть. У меня в IAR, при открытом проекте вверху куча вкладок с исходниками, но я не знаю в какой ноги инициализируются. Как быстро найти?


если не хотите кидать весь проект, кидайте файл, где функция мейн, по ней пробежимся, скажем что кинуть дальше )

Кстати, а вы можете осциллографом посмотреть поведение при работе ноги 91 на обеих платах?
alex7577
Цитата(0men @ Sep 12 2017, 16:33) *
если не хотите кидать весь проект, кидайте файл, где функция мейн, по ней пробежимся, скажем что кинуть дальше )

Кстати, а вы можете осциллографом посмотреть поведение при работе ноги 91 на обеих платах?


Я готов скинуть и весь проект, там секретного ничего нет. Дайте контакты куда.
Осциллографа нет. Мы давно ничего не меняли в электронике, обновляли только софт для PC, с которым работает плата, не меняя протокол обмена с платой.
Соответственно нет ни специалистов ни оборудования, кроме тестера. Платы паялись и всегда работали, до этого момента sm.gif
jcxz
Цитата(alex7577 @ Sep 13 2017, 14:21) *
Я готов скинуть и весь проект, там секретного ничего нет. Дайте контакты куда.

Не боитесь, что форум читают и китайцы? biggrin.gif
0men
Цитата(alex7577 @ Sep 13 2017, 10:21) *
Я готов скинуть и весь проект, там секретного ничего нет. Дайте контакты куда.
Осциллографа нет. Мы давно ничего не меняли в электронике, обновляли только софт для PC, с которым работает плата, не меняя протокол обмена с платой.
Соответственно нет ни специалистов ни оборудования, кроме тестера. Платы паялись и всегда работали, до этого момента sm.gif


кидайте весь проект, контакт отправил в личке
alex7577
Нашел такой код:

//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;

Цитата(0men @ Sep 13 2017, 12:34) *
кидайте весь проект, контакт отправил в личке


Скинул

Цитата(jcxz @ Sep 13 2017, 12:12) *
Не боитесь, что форум читают и китайцы? biggrin.gif


Не боюсь, у нас главная фишка не в платах, а в софте для PC sm.gif
0men
Цитата(alex7577 @ Sep 13 2017, 12:44) *
Нашел такой код:

//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 sm.gif


чего то я нигде не увидел перевод ножки 91 (PA7) на выход (в мейне)
Точнее, там есть настройка портов, но достаточно специфическая sm.gif

чтобы не разбираться долго, попробуйте в MAIN
сразу после первой строчки

PIO_Configure(pins, PIO_LISTSIZE(pins));

написать так:
AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA7;

скомпилировать и проверить



Цитата(alex7577 @ Sep 13 2017, 12:44) *
Нашел такой код:



И еще у вас есть непонятный момент. В мейне есть такой код

// 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
alex7577
Цитата(0men @ Sep 13 2017, 14:16) *
чего то я нигде не увидел перевод ножки 91 (PA7) на выход (в мейне)
Точнее, там есть настройка портов, но достаточно специфическая sm.gif

чтобы не разбираться долго, попробуйте в MAIN
сразу после первой строчки

PIO_Configure(pins, PIO_LISTSIZE(pins));

написать так:
AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA7;

скомпилировать и проверить


Сделал, к сожалению ничего не изменилось, так же падает напряжение на D+ до 1.7 и плата не определяется. После стирания прошивки, определяется. Два повторил, результата нет (

И еще у вас есть непонятный момент. В мейне есть такой код

// 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 нога, а на вашей схеме она тупо через резистор притянута к земле... зачем, почему..


Вот начальная схема




но по факту, диод никогда не паяли, поэтому цепь VBUS была разомкнута и получается, что ножка на землю только через 15к. Зачем это было сделано не знаю, разработчик давно не работает у нас.



Цитата(0men @ Sep 13 2017, 14:16) *
Кстати, в проекте выбран чип at91sam7x512, а впаян at91sam7x256


Это не влияет, я так понимаю, что просто разный объем паммяти.
Мы ставили 128, 256, 512, всегда работали.

Цитата(0men @ Sep 13 2017, 14:16) *
И еще: попробуйте закомментировать строчку

#define BOARD_USB_PULLUP_EXTERNAL

в board.h


Тоже не помогло. После прошивки напряжение на D+ 2.2в без подключения к компу (со стертой прошивкой 3.3в), а при подключении кабеля usb падает до 1.7, ну то есть все как раньше.
0men
Цитата(alex7577 @ Sep 13 2017, 14:48) *
Тоже не помогло. После прошивки напряжение на 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+

alex7577
Цитата(0men @ Sep 13 2017, 15:11) *
Давайте от простого пойдем, посмотрим, переводится вообще РА7 на выход 1.
Для этого в мейне после

PIO_Configure(pins, PIO_LISTSIZE(pins));
USB_PULLUP_OFF;
wait(100000);
USB_PULLUP_ON;

напишите

for(;;);

то есть дальше код исполняться не будет. Подключите к компу и измерьте напряжение на D+


Ничего не изменилось.
На всякий случай вот скрин результатов компиляции

0men
Цитата(alex7577 @ Sep 13 2017, 16:04) *
Ничего не изменилось.
На всякий случай вот скрин результатов компиляции


ничего не изменилось это что означает? какое напряжение на D+? 1.7?
alex7577
Цитата(0men @ Sep 13 2017, 16:16) *
ничего не изменилось это что означает? какое напряжение на D+? 1.7?


Да. 1.7 при подключенном usb, 2.2 при отключенном.
0men
Цитата(alex7577 @ Sep 13 2017, 16:22) *
Да. 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));

aaarrr
Цитата(0men @ Sep 13 2017, 17:05) *
да, похоже проблема именно в этом )) Клоки на порты у вас включаются в функции
PIO_InitializeInterrupts(0);

а она находится значительно ниже

Для работы пинов на выход в серии SAM7 клоки не нужны.
alex7577
Цитата(0men @ Sep 13 2017, 17:05) *
это означает, что нога на выход не работает..

перед
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));


К сожалению, опять не помогло, ситуация ровно таже 1.7в, на D+.
вот скрин кода, посмотрите, пожалуйста, все ли правильно.




Раскопали в хламе старые паянные МК. Запаяли вместо новых на эти же платы, все работает, блин!
Но три нам к сожалению мало, а хлам закончился.
Проблема по-прежнему актуальна.
Готов выставить хороший коньяк или иное вознаграждение по Вашему выбору за конструктивную помощь )
0men
Цитата(alex7577 @ Sep 14 2017, 13:46) *
Проблема по-прежнему актуальна.
Готов выставить хороший коньяк или иное вознаграждение по Вашему выбору за конструктивную помощь )


ээээ.. зачем там цикл 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+



alex7577
Цитата(0men @ Sep 14 2017, 14:34) *
ээээ.. зачем там цикл 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+


Сделал. Ничего не изменилось: РА7 - 2.3в, D+ - 2.2в при отключенном кабеле USB. После подключения кабеля, на D+ падает до 1.7в и плата не определяется.
Посмотрите код, так надо было?


0men
Цитата(alex7577 @ Sep 14 2017, 14:54) *
Сделал. Ничего не изменилось: РА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;
alex7577
Цитата(0men @ Sep 14 2017, 14:59) *
да, код правильный, но результат полная ерунда.. Ножка не переводится на выход, что абсолютно непонятно. А сделайте плис тоже самое на рабочей плате


Сделал. Держит напряжение нормально, 3.3в на D+ при отключенном USB и 2.9 при подключенном. Определяется как неизвестное устройство, но это понятно, из-за изменения в коде.
0men
Цитата(alex7577 @ Sep 14 2017, 15:12) *
Сделал. Держит напряжение нормально, 3.3в на D+ при отключенном USB и 2.9 при подключенном. Определяется как неизвестное устройство, но это понятно, из-за изменения в коде.


у
AT91C_BASE_EFC0
AT91C_BASE_EFC1
AT91C_BASE_MC

абсолютно разные базовые адреса. Выбирая 512 в яре и прошивая прошивку в 256 вы не правильно инициализируете работу флэш памяти

alex7577
Цитата(0men @ Sep 14 2017, 15:20) *
у
AT91C_BASE_EFC0
AT91C_BASE_EFC1
AT91C_BASE_MC

абсолютно разные базовые адреса. Выбирая 512 в яре и прошивая прошивку в 256 вы не правильно инициализируете работу флэш памяти


Мы паяли разные: 128, 256, 512 и всегда они работали и одной и той же прошивкой. Вроде разработчик что-то предусмотрел в коде, чтобы можно было ставить любые модификации.
Сейчас и рабочие и нерабочие платы с вариантом 256, но вот старые работают, а новые нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.