otix7777555
|
|
1 | |
Нужна помощь, сломал голову!!! (Atmel AT91SAM7х256)10.09.2017, 16:43. Показов 4026. Ответов 34
Метки нет Все метки)
(
Есть плата обработки внешних сигналов на 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, сотни раз использовались, и их много, какую не залей, тот же эффект. Единственная пока идея: может контроллеры бракованные??? Но мне кажется это маловероятно. Кто-нибудь сталкивался с подобным? Прошу помощи, проект горит, заказчик топает, а мы подвисли. <Изображение удалено> |
|
10.09.2017, 16:43 | |
Ответы с готовыми решениями:
34
Нужна помощь для старта с Atmel ARM STM32F0 и RS485 (сломал голову)
Z-index голову сломал |
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
|
10.09.2017, 16:54 | 2 |
Ревизия хоть у рабочих и нерабочих чипов одинаковая?
0
|
otix7777555
|
|
10.09.2017, 17:03 | 3 |
![]() |
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
|
10.09.2017, 17:09 | 4 |
![]()
0
|
otix7777555
|
|
10.09.2017, 17:13 | 5 |
![]() Платы из проверенной серии. МК эти используем несколько лет, никогда не обращали внимание на ревизию, разве datasheet не однозначно определяет характеристики МК и они могут меняться со cменой ревизии? На сколько считаете вероятным брак? |
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
|
|
10.09.2017, 17:27 | 6 |
После прошивки контроллер запускается и происходит настройка портов, тут и надо колупать. Может, порт 91 нога не на выдачу, а на вход с подтяжкой. И 94 посмотреть, как конфигурируется. Похоже, производитель слегка изменил номиналы внутри чипа, не нарушив даташит, а программист с самого начала использовал чип не очень корректно.
0
|
otix7777555
|
|
10.09.2017, 17:39 | 7 |
![]() |
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
|
|
10.09.2017, 18:02 | 8 |
Очевидно - соединять D+ через резистор 1.5к не с ногой контроллера, а напрямую с Vcc.
PS. А специалистов не сокращать надо после проекта, а холить и лелеять и между проектами тоже.
0
|
otix7777555
|
|
10.09.2017, 18:22 | 9 |
![]() Сделал, как порекомендовали, теперь и прошитый и непрошитый контроллер определяются как "неизвестное устройство" в диспетчере задач. Вернул все обратно, непрошитый определяется как на моем скрине вначале темы. |
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 1
|
|
11.09.2017, 07:04 | 10 |
Atmel - уроды! (с) - не моё
Уроды потому, что меняют или вообще снимают с производства годами работающую комплектуху. Может, попробовать изобразить из 2-х транзисторов ключ, который будет подключать резистор к VCC? Или такие доработки недопустимы? Или поставить буфер между ногой и резаком?
0
|
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
|
|
11.09.2017, 14:42 | 11 |
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
11.09.2017, 15:36 | 12 |
![]() могло действительно просто очень повезти что раньше оно как-то работало на внутренней подтяжке, даже когда нога не сконфигурирована нормально на выход. а в новой ревизии чипа это "исправили".
0
|
otix7777555
|
|
11.09.2017, 16:05 | 13 |
Всем спасибо за помощь! Проблема пока не решена, но хотя бы понятно куда копать.
Нашли пару МК с более старой ревизией, запаяли, все сразу заработало, т.о. понятно что дело только в новой ревизии. Блин! Такой удар со стороны классика )) 5 лет все было нормально и вдруг на тебе! Самое главное вовремя ) |
otix7777555
|
|
11.09.2017, 16:15 | 14 |
А если тупо посадить питание на D+ USB вместо 91 ноги? Там наверное нужно выставить нужный уровень напряжения, но мы помереем на рабочей плате какой нужен уровень и сделаем делитель напряжения. Наверняка плата будет определяться, но вот будет ли работать? Я не уверен, что 91 нога просто задавала уровень напряжения для USB.
Программно отключать USB не нужно, как это можно было сделать через 91-ногу, режим работы такой что USB всегда должен быть подключен. Может это сработать? |
otix7777555
|
|
11.09.2017, 16:29 | 15 |
[QUOTE="orm999"][QUOTE="Цитата:[/QUOTE]
Пытаюсь найти код. Открываю проект в IAR, там вверху море закладок с исходниками. Мне кажется, что ноги инициализируются в pio_it.c или нет? Какие признаки кода инициализации ног? |
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
11.09.2017, 16:39 | 16 |
![]()
0
|
otix7777555
|
|
11.09.2017, 17:00 | 17 |
![]() Тогда видимо правильно, но найти инициализацию этой ноги не могу. В даташит 91 - это PA7/PGMNVOTID, в коде этого нет. Или она там как-то иначе обозначается? Я могу сбросить код на e-mail, если это удобно. |
otix7777555
|
|
12.09.2017, 13:54 | 18 |
Нашел такой код. Если я правильно понял 91 нога правильно включена, на подтяжку
Нашел такой код: //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; |
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
12.09.2017, 14:30 | 19 |
осталось найти где и как этот PIN_USB_PULLUP используется при инициализации.
0
|
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
|
12.09.2017, 14:51 | 20 |
![]()
0
|
12.09.2017, 14:51 | |
Помогаю со студенческими работами здесь
20
уже голову сломал. помогите! Позиционирование div. Голову сломал
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |