_fun_ 0 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба Здравствуйте. Поюзал недавно "development board" с LPC1768 на борту и развел свою (кварц 12 МГц и там и там). Проблема следующая: не хочет работать на высокой частоте, начинаются какие-то глюки на частоте от 30 МГц. При тактировании от внутреннего RC эти глюки происходят при разгоне до 60 МГц. Толком обьяснить не смогу, такое впечатление, что происодят пропуски тактовой частоты. ПРи ресете программа выполняется какое-то время, затем останавливается. Или выполняется, но глючно (программа - дерганье ногой). На плате производителя все нормально. Начал сравнивать - апмлитуда на моем кварце немногим больше 1В, причем она падает с увеличением конечной частоты и некая нестабильность появляется. На плате производителя около 1.8 и практически ни от чего не зависит. Ставил другие кварцы (6 МГц - та же проблема, только амплитуда стабильно держится 1В с небольшим, 25 МГц - не шьется, говорит в конце ошибка лоадера...) Подскажите, пожалуйста, в чем могут быть проблемы? Плохая разводка кварца? вторая неделя уже ни к чему не привела(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба Приведите схему своей платы и её разводку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба PLL, WS, MAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_fun_ 0 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба не понял, как правильно сюда файлы загружать PLL, WS, MAM. Я Вас немного не понял :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба На какой частоте работает PLL - смотреть внимательно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_fun_ 0 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба На какой частоте работает PLL - смотреть внимательно смотрел. все время попадает в диапазон от 300 до 550 МГц, как написано в даташите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 августа, 2010 Опубликовано 30 августа, 2010 · Жалоба Регистр SC->FLASHCFG и SC->CCLKCFG правильно записываете. Нужны ws для работы с флешкой. Инициализировать их надо ДО включения PLL! Код бы глянуть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_fun_ 0 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба Регистр SC->FLASHCFG и SC->CCLKCFG правильно записываете. Нужны ws для работы с флешкой. Инициализировать их надо ДО включения PLL! Код бы глянуть... понял, спасибо, попробую переделать, но почему-то интуиция говорит что не в программе дело - на другой плате работает...хотя..Уважаемые гуру, подскажите по разводке - дело может скрываться в ней, или нормально? До сегодняшнего дня было вот так: // 1. Init OSC SCS_bit.OSCRANGE = 0; SCS_bit.OSCEN = 1; // 2. Wait for OSC ready while(!SCS_bit.OSCSTAT); // 3. Disconnect PLL PLL0CON_bit.PLLC = 0; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 4. Disable PLL PLL0CON_bit.PLLE = 0; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 5. Select source clock for PLL CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source. // 6. Set PLL settings 300 MHz PLL0CFG_bit.MSEL = 25-1; PLL0CFG_bit.NSEL = 2-1; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 7. Enable PLL PLL0CON_bit.PLLE = 1; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 8. Wait for the PLL to achieve lock while(!PLL0STAT_bit.PLOCK); // 9. Set clk divider settings // CCLKCFG = 3-1; // 1/3 Fpll CCLKCFG = 5-1; PCLKSEL0 = PCLKSEL1 = 0; // other peripherals 100/4 = 25MHz // 10. Connect the PLL PLL0CON_bit.PLLC = 1; PLL0FEED = 0xAA; PLL0FEED = 0x55; //Flash accelerator init FLASHCFG = (0x5UL<<12) | 0x3AUL; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба подскажите по разводке - дело может скрываться в ней, или нормально? Разводка, конечно, не ахти. По паре переходных на каждую дорожку от кварца до чипа, дорожки несколько длинноваты. Также видно много пересекающих дорожек на верхнем слое. По идее проводники от кварца должны быть как можно короче, без переходных отверстий, и их не должны пересекать на других слоях быстрые сигнальные проводники. Также на плате не видно, куда именно подключена земля нагрузочных ёмкостей кварца? Видно только никуда не подключенное переходное. Полигон? Плата двухслойная? Но для озвученных частот в 6 - 12 МГц особого криминала нет, имхо. Попробуйте поиграться с конденсаторами кварца - поварьируйте их ёмкость. Какие их номиналы установлены на фирменной плате? // 1. Init OSC //Flash accelerator init FLASHCFG = (0x5UL<<12) | 0x3AUL; Инициализировать MAM нужно ДО подключения PLL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 5 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба 1) земляные проводники от конденсаторов (возможная причина) должны идти на землю максимально коротко, равной длины и на нужную землю! 2) возможно что параметы вашего кварца(-ев) требуют других емкостей. Это видно по амплитуде. 3) не все кварцы будут работать, если параметры далеки от требуемых. Смотрите внимательнее параметры рекомендованных кварцев. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_fun_ 0 31 августа, 2010 Опубликовано 31 августа, 2010 (изменено) · Жалоба Пытаюсь играться с емкостями кварца - пока никаких результатов. На фирменной плате кварц другой фирмы. Сейчас поставил 25Мгц - амплитуда стала еще меньше, наверное из-за этого даже и не прошивается. Забыл отметить - плата 4-х слойная Изменено 31 августа, 2010 пользователем _fun_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба Да оставьте Вы в покое несчастый кварц и тем более "исследования" щупом, как я подозреваю, с изрядной емкостью. Бит OSCSTAT у Вас, взводится, всякие проблемы у Вас и с внутренним генератором. Спокойно вычитывайте инициализацию и посмотрите не порограммировали-ли флешь с неверными таймингами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 31 августа, 2010 Опубликовано 31 августа, 2010 · Жалоба Для начала можно поиграться с внутренним RC-генератором (IRC). По крайней мере это позволит отсечь проблемы с кварцем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_fun_ 0 17 сентября, 2010 Опубликовано 17 сентября, 2010 · Жалоба Вообщем игрался я с этими кварцами довольно долго. Схема заводится от внутреннего 4МГц генератора, можно посмотреть его на ноге и вот что еще обнаружилось: при включении PLL и умножении на 1 длительность не 250нс, а 300! На фирменной плате такого не наблюдается. Вообще на фирменной плате можно внутренний генератор спокойно до 100МГц умножить. У меня же в какой-то момент начинается дребезга, а если дальше увеличивать частоту, то вообще работать перестает. от внешнего генератора частота совпадает, от внутреннего нет. Сейчас припаял генератор на 12 МГц, сначала работал на 25 МГц, но теперь она почему-то стала стабильна и на 50. Еще особенность - греешь паяльником кварц, блокировочные конденсаторы рядом с контроллером - частота стабилизируется...может плохой внутренний слой какой-то получился. Но причем тут внутренний генератор я тогда не понимаю. Сегодня обнаружил, что АЦП на моей плате также не делает преобразование...Одна и та же программа. Максимально простая. На фирменной взводится, на моей нет. Контроллер перепаял. Может, серия бракованная? :))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_fun_ 0 17 сентября, 2010 Опубликовано 17 сентября, 2010 · Жалоба Господа, вообщем частоту я добил. Все заработало и дело было все-таки в разводке. Однако радость моя была недолгой. Решив посмотреть как будет умножаться внутренний генератор написал след. вещь : void InitClock(void) { //Flash accelerator init FLASHCFG = (0x5UL<<12) | 0x3AUL; // // 1. Init OSC // SCS_bit.OSCRANGE = 0; // SCS_bit.OSCEN = 1; // 2. Wait for OSC ready // while(!SCS_bit.OSCSTAT); // 3. Disconnect PLL PLL0CON_bit.PLLC = 0; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 4. Disable PLL PLL0CON_bit.PLLE = 0; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 5. Select source clock for PLL CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source. // 6. Set PLL settings 300 MHz PLL0CFG_bit.MSEL = 25-1; PLL0CFG_bit.NSEL = 2-1; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 7. Enable PLL PLL0CON_bit.PLLE = 1; PLL0FEED = 0xAA; PLL0FEED = 0x55; // 8. Wait for the PLL to achieve lock while(!PLL0STAT_bit.PLOCK); // 9. Set clk divider settings // CCLKCFG = 3-1; // 1/3 Fpll CCLKCFG = 3-1; PCLKSEL0 = PCLKSEL1 = 0; // other peripherals 100/4 = 25MHz // 10. Connect the PLL PLL0CON_bit.PLLC = 1; PLL0FEED = 0xAA; PLL0FEED = 0x55; CLKOUTCFG_bit.CLKOUTSEL = 0; //CLKOUTCFG_bit.CLKOUTDIV = 1; CLKOUTCFG_bit.CLKOUT_EN =1; PINSEL3 |= (1<<22); } При этом случайно забыл CLKSRCSEL_bit.CLKSRC = 1 поставить 0 (внутренний осциллятор). Программа зашилась, но на все последующие прошивки теперь ругается. IAR, SEGGER говорят что-то вроде "FAILED to measure CPU clock frequency" или "Could not write Ctrl/Stat register". Попробовал поиграться со скоростями JTAGа - ничего не вышло. Проделал тоже самое с фирменной платой - теперь и она не работает :). Как дальше быть? Стереть также не получается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться